[pwnable.kr] bof - 5pt

해킹대회 문제 풀이 연습장소

Moderator: amesianx

Post Reply
gee8195
Posts: 34
Joined: Thu Jul 21, 2016 5:12 pm

[pwnable.kr] bof - 5pt

Post by gee8195 » Wed Sep 21, 2016 5:35 pm

1.png
1.png (19.07 KiB) Viewed 270 times
bof 문제를 풀어보겠습니다.
2.png
2.png (5.26 KiB) Viewed 270 times
일단 소스를 확인해 보면 func()함수에 bof 취약점이 있다는 것을 알 수 있습니다. main()함수 에서 func()함수를 호출하고 key값으로 0xdeadbeef값을 넘겨줍니다. func()함수에서는 key값이 cafebabe면 system("/bin/sh");를 실행하고 아니면 문자열을 출력하고 종료하는군요...
그럼 인자로 받은 0xdeadbeef 를 0xcafebabe로 덮어 씌어 주면 sh명령어를 실행할수 있겠습니다.
일단 메모리 구조를 파악하기 위해 gdb 로 열어보겠습니다.
3.png
3.png (120.44 KiB) Viewed 270 times
main()함수는 별게 없으니 바로 func()함수로 가봤습니다.
일단 스택은 높은주소에서 낮은 주소로 데이터가 쌓입니다. 간단하게 메모리 구조에 대해 적으면...
argv + argc + ret + ftb + .... + buffer(취약점) + .... 이런식으로 쌓입니다 그러면 취약점이 있는 buffer에서 argv까지 접근해서 0xdeadbeef를 0xcafebabe로 덮어 씌우면 되겠습니다. 입력받는 함수 다음위치에 브레이크 포인트를 걸고 실행해보겠습니다.
4.png
4.png (8.76 KiB) Viewed 270 times
적당히 A를 여러번 입력한뒤, 출력하면 ebp+8까지의 공간을 확인할 수 있습니다.
5.png
5.png (249.54 KiB) Viewed 270 times
buffer ~ ebp+8(argv)까지의 거리를 구하면 0x34 == 52인걸 확인할 수 있습니다.그럼 적당히 페이로드를 짜서 실행해 보겠습니다.
6.png
6.png (77.3 KiB) Viewed 270 times
sh가 실행 되고 해당 권한으로 flag를 출력했습니다~

Post Reply

Who is online

Users browsing this forum: No registered users and 21 guests