ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Pwnkr] Input2 Write-up
    표튜터와 함께하는 Pwnable/Pwnable.kr Write-up 2019. 4. 17. 16:57

    이번 문제는 Input2이다.

    문제는 생각보다 어렵지 않았으나

    Payload짜는데서 조금 헤맸다..ㅎㅎ



    코드를 보도록 하자

    이 문제의 FLAG를 얻기 위해서는 5개의 Stage를 통과해야한다.




    먼저 첫 번째 Stage를 보자.

    우선 argc가 100이 되어야하고 넘겨지는 argv의 'A'와 'B' 번째 값이

    각각 "\x00" 과 "\x20\x0a\x0d"의 값이 들어가야한다.



    굉장히 간단하게 넘길 수 있다. 나는 Python을 사용했고 argv는 list형태로 넘겨야한다.

    이런식으로 구성하였다.'A'와 'B'는 각각 65, 66을 의미하므로

    65번째와 66번째에 값에 요구하는 값을 넣어주었다.




    다음 Stage를 보도록 하자. Stage2번이다.

    buf에 read를 두 번 진행하게되는데 fd를 보면 첫 번째는 0이고

    두 번째 read 함수에서는 2이다. 0은 stdin을 뜻하고 2는 stderr를 의미한다.

    그러므로 read의 fd인자가 0일때는 그냥 입력으로 "\x00\x0a\x00\xff"를

    입력해서 if문을 우회하면 될 것이고 다음의 fd가 2인 read의 경우

    file open을 통해 stderr에 "\x00\x0a\x02\xff"를 해주면 될 것이다.

    stdin으로 입력을 해주고~

    stderr도 입력해주면~ 간단하게 해결할 수 있다.






    다음 Stage3은 환경변수에 관련된 문제이다. 이러한 환경변수의 값을

    넘겨 줄 수 있는데 넘겨줄 때 dictionary 형태로 넘겨야 한다.

    그러므로 다음과 같이 진행해주었다.






    다음으로는 또 file open에 관련된 문제인데



    ./0a에서 4바이트를 읽어 buf에 저장한다. 이 때 buf 저장된 값이

    "\x00\x00\x00\x00"이어야 하므로 우리는 write를 이용하면 된다.



    마지막으로 Stage5이다.

    sin_port를 argv['C'] 즉 argv 67번째의 값과 맞도록 진행해줘야하며

    "\xde\xad\xbe\xef"를 전송해주면 해당 값을 recv하게 되면서 FLAG가 출력된다!!

    이런식으로 argv[67]값을 수정해주고



    sin.port를 맞춰서 진행한 뒤 "\xde\xad\xbe\xef"를 전송해준다.



    그러므로 최종 Payload는 다음과 같게 된다.

    참고로 우리는 권한이 없어서 해당 Payload를 작성할 수 없기 때문에

    tmp 디렉토리로 가서 작성하였다.




    해당 payload를 진행하게되면 FLAG를 볼 수 있게 된다? 는 아니고

    flag가 없기 때문에 원하는 결과를 볼 수가 없다. 




    그러므로 심볼링 링크를 걸어서 flag파일을 생성해주자



    짜잔~ 원하는 FLAG를 볼 수 있게 된다.


    참고 : https://mandu-mandu.tistory.com/76

    반응형

    '표튜터와 함께하는 Pwnable > Pwnable.kr Write-up' 카테고리의 다른 글

    [Pwnkr] Unexploitable Write-up  (2) 2019.05.17
    [Pwnkr] Blukat Write-up  (0) 2019.04.15
    [Pwnkr] Black Jack Write-up  (0) 2019.04.15
    [Pwnkr] Cmd1 Write-up  (0) 2019.04.04
    [Pwnkr] Lotto Write-up  (0) 2019.04.03

    댓글

Designed by Tistory.