ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • two targets write up
    System hacking training/pwnable.xyz 2020. 2. 6. 07:05

    two targets (50)
    prob

     

    file, checksec binary

    64bit, dynamically linked된 바이너리이며

    Partial RELRO, NX, Canary가 걸려있다.

     

    IDA-View main()

    문제 이름과 같이 해당 바이너리를 통해 flag를 얻을 수 있는 방법은 2가지다.

    먼저 4번 메뉴로 auth()함수를 호출하고, 해당 루틴을 맞추는 경우가 있고

     

    두번째로 바이너리의 buffer overflow 취약점을 이용하여 got overwrite하는 경우가 있다.

    첫번째 방법을 통해서 flag를 얻기에는 분석하는 과정이 조금 복잡할 것 같아서 buffer overflow를 이용한 got overwrite로 문제를 풀이할 수 있었다.

     

    취약점은 2번 메뉴의 input에서 24byte 입력할 수 있다는 점과 3번 메뉴에서 해당 포인터에 값을 쓸 수 있다는 점을 이용하여 트리거 할 수 있는데,

     

    먼저 2번 메뉴에서 nationality에 대한 입력을 받기 위해 24byte 문자열 형태로 입력을 받는다.

    이 과정에서 입력값이 저장되는 v6과 age가 저장되는 v7사이의 간격이 0x10(16)byte이기 때문에

     

    더미값 16byte를 입력하여 v7에 원하는 함수의 got를 저장할 수 있다.

    하지만 %s 즉, 문자 형태로 입력을 받기 때문에 아스키코드로 표현이 가능한 got주소를 넣어야하며 스페이스와 같은 공백 문자 전까지 저장을 하기 때문에 이 점에 유의해서 저장할 got를 결정해야한다.

     

    puts@got address

    여기서 puts()함수의 got는 0x20(space)가 들어가기 때문에 입력값이 0x20전에 짤리며

    got주소가 3byte로 이뤄져있기 때문에 이미 함수의 주소값을 가져온 함수들은 제외해야한다.

     

    따라서 다음과 같은 시나리오를 세울 수 있게 되었다.

     

    2번 메뉴를 통해 16byte dummy 입력 후 [키보드로 입력 가능한 함수의 got주소 && 실행되지 않은 함수의 got주소]를 입력하여 v7 포인터에 저장하고,

    3번 메뉴를 통해 win()함수의 주소를 %d 서식자에 맞게 10진수로 변환하여 입력해준다.

    이후 해당 함수가 실행되면..! flag를 획득..!

     

    해당 시나리오에 맞는 함수를 찾던 중

    setup()함수에 handler로 지정된 exit()함수를 찾게 되었다.

     

    exit()함수는 got주소를 키보드로 표현 가능하고, 아직 실행되지 않았기 때문에 깔끔하게 win()함수를 덮을 수 있다.

     

    payload.py

    따라서 다음과 같은 페이로드를 작성하고,

    60초 기다리면 flag를 얻을 수 있다. ^__^

     

    [+] Opening connection to svc.pwnable.xyz on port 30031: Done
    [*] Switching to interactive mode
    Menu:
      1. Change name.
      2. Change nationality.
      3. Change age.
      4. Get shell.
    > FLAG{~~~~~~~~~~~~~~~~~~~~~~}[*] Got EOF while reading in interactive
    $ 
    반응형

    'System hacking training > pwnable.xyz' 카테고리의 다른 글

    TLSv00 write up  (0) 2020.05.04
    Free Spirit write up  (0) 2020.04.04
    xor write up  (0) 2020.02.05
    note write up  (1) 2020.01.10
    GrownUp write up  (0) 2020.01.02
Designed by Tistory.