ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • note write up
    System hacking training/pwnable.xyz 2020. 1. 10. 20:03

    note (50)

    다소 easy한 문제다.

     

    prob
    file, checkec

    이젠 32bit 바이너리가 나오면 신기할것 같다.

    역시 64bit 바이너리, Canary와 NX만 활성화 되어있다.

     

    IDA-View main()

    main()함수를 보면 while로 무한루프를 돌며 read_int32()함수의 return값에 따라 edit_note(), edit_desc()함수가 호출된다.

     

    IDA-View print_menu()

    print_menu()함수는 단순하게 루프 한번 돌때마다 menu를 출력해주는 역할을 하고

     

    IDA-View read_int32()

    read_int32()함수는 read()함수로 32byte 입력받은 뒤 atoi()함수로 char to int변환을 해주며 return하는 함수다.

    (즉 char형으로 32byte 받고 int형으로 return해주는 함수!)

     

    해당 return값은 main()함수에서 menu를 고를 때 사용되고

     

    IDA-View edit_note()

    menu 1을 선택할 경우 edit_note()함수를 호출한다.

    edit_note()함수는 read_int32()함수로 동적할당할 size를 입력받고 할당한 위치에 값을 입력받는다.

     

    또한 strncpy()함수로 전역변수 s에 값복사를 진행한뒤 free()한다.

     

    IDA-View char s[32]

    여기서 s는 32byte로 선언되어있고 앞선 strncpy()함수에서 사용자가 지정한 size만큼 buf에서 값을 읽어와 복사하기 때문에 s[32] 이후 입력이 가능하다. (할당된 s의 크기 보다 더 많은 영역에 값을 쓸 수 있다.)

     

    IDA-View edit_desc()

    다음으로 2를 입력했을 때 edit_desc()함수가 호출되는데,

    해당 함수는 buf라는 전역 변수가 0이 아닐때 malloc()함수를 호출하여 0x20만큼 동적할당 하고 해당 위치에 0x20byte만큼 입력을 받으며 함수가 종료된다.

     

    s[32] - buf : 32

    문제가 되는 곳은 여러가지가 있다.

    1. 먼저 전역으로 선언되어있는 s와 buf가 인접해있다.

    2. edit_note()함수에서 size조절이 가능하기 때문에 s[32]보다 더 많은 영역에 값을 쓸 수 있다.

    3. edit_desc()함수에서 buf가 0일때만 malloc()함수를 호출하여 동적할당 한다.

     

    따라서 edit_note()함수를 이용하여 s[32] + 8의 위치 즉 buf의 위치에 접근하여 값을 쓸 수 있고, (got)

    edit_desc()함수에서 buf가 가리키는 주소에 사용자 입력으로 덮어쓸 수 있다. (overwrite)

     

    그리고 익스를 도와주는 win()함수가 있다.

     

    IDA-View win()

    따라서

     

    payload

    다음과 같이 payload를 작성하여 flag를 출력할 수 있다.

     

    ⚡ root@ubuntu  /mnt/hgfs/vm_shared/pwnable.xyz  python a.py
    [+] Opening connection to svc.pwnable.xyz on port 30016: Done
    [*] Switching to interactive mode
    FLAG{--------------------------------------}$
    반응형

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

    two targets write up  (0) 2020.02.06
    xor write up  (0) 2020.02.05
    GrownUp write up  (0) 2020.01.02
    misalignment write up  (0) 2020.01.01
    add write up  (0) 2020.01.01
Designed by Tistory.