HanJeouk의 개인공부 블로그

#LOB 문제를 풀 때는 bash2 명령어를 꼭 입력해야한다. LOB는 더미가 없다.


코드를 보면

길다.


이전과는 다르게 에그헌터라는 환경변수를 비워주는 코드가 적용되어있고

argv[1][47]이 \xbf가 아니라면 stack is still your friend라는 문구가 나오게 되어있다.

환경변수에 쉘 코드를 넣는 풀이는 이제 안 된다.

그래서 argv[2]를 이용하여 문제를 풀기로 했다.

argv[2]의 주소를 알아야한다. argv[2]의 주소는 ebp 기준 8byte+argv[1]의 길이라고 한다.

그러니 ebp의 주소를 알아야한다. ebp 주소는 gdb 명령어를 이용하여 알아낼 수 있다.

지금부터 알아내보자.



strcpy 부분에 break를 걸고 stack is still your friend 문구가 뜨지않게 하기 위하여 48바이트 때는 \xbf를 채우고 

그 뒤에는 nop와 쉘코드를 넣었다.


ebp 주소를 알아냈다. 이제 이 주소에 56파이트를 더하면 argv[2]의 주소가 나올 것 같다. 56은 16진수로 \x38이니 더하면



argv[2]의 주소가 나왔다. 이제 페이로드를 작성할 수 있겠다.


페이로드는 [버퍼 크기+sfp] + argv[2] 주소 + argv[2]에 들어갈 nop * 50 + shellcode + nop *50 으로 했다.






'Wargame > Load Of Buffer overflow' 카테고리의 다른 글

LOB 6번 wolfman  (0) 2017.05.11
LOB 5번 orc  (0) 2017.05.10
LOB 3번 cobolt  (0) 2017.05.02
LOB 2번 gremlin  (0) 2017.05.02
LOB 1번 gate  (0) 2017.05.02