ret주소를 무조건 strcpy로 덮어야한다. 그것 말고는 다른 조건은 없는것 같다.
우선 strcpy의 주소를 알아보자.
0x8048410이다. 그리고 ret주소 다음 4바이트를 A로 초기화한다.
strcpy의 인자값은 2개이므로 buf + sfp (A *44) + strcpy + BBBB + CCCC + DDDD값을 줘보자.
buf + sfp (A *44) + strcpy + BBBB + CCCC + DDDD 값을 줬는데 BBBB(42424242)값이 보이질 않는데 이는 위에서 AAAA로 덮어씌어지기 때문이다.
덮어씌어진 부분의 주소는 0xbffffa30이다.
CCCC, DDDD는 strcpy의 인자들인데, CCCC에 strcpy가 끝난 후 ret주소의 주소를, DDDD에는 쉘코드 시작 주소의 주소를 넣어주면 strcpy로 인해 strcpy가 끝난 후 ret주소가 쉘코드 실행주소로 덮어질 것이다.
그러면 쉘코드 실행주소를 DDDD 뒤에 4바이트 추가해준후, DDDD는 그 위치 즉 0xbffffa3c를 가리키게 하면 될 것이다.
정리하면 buf + sfp + strcpy + Dummy(strcpy's ret) + argv1(dummy주소) + argv2(shellcode주소) + shellcode가 된다.
역시 카피본과 root에선 쉘이 따지지만 원본에선 따지지않는다 음..
다음 단계로 넘어가보자.
20. xavius -> death_knight (0) | 2020.05.03 |
---|---|
19. nightmare -> xavius (0) | 2020.03.11 |
17. zombie_assassin -> succubus (0) | 2020.03.11 |
16. assassin -> zombie_assassin (0) | 2020.03.11 |
15. giant -> assassin (0) | 2020.03.11 |
댓글 영역