1580, 3/79 회원가입  로그인  
   ssuckies
   http://www.ganseo.com
   format string을 위한 리턴어드레스 구하기.

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


그냥 질문이 왔길래 써봤습니다.
틀린부분있을지 모르나 공유차원에서...^^

Produced by ganseo
e-mail : postmaster@ganseo.com
homepage : http://www.ganseo.com


[포멧스트링을 위한 리턴어드레스 찾기]
1.main함수의 리턴어드레스 주소찾기.
2.printf의 .got 주소찾기.
3. .dtors의 주소찾기.

일단 이 이 강좌에는 많은 설명없이 실제 찾는 방법만 설명해 드리도록하겠습니다.

1.main함수의 리턴어드레스 주소찾기.
처음 메인 함수에 들어가게 되면 메모리 구조는 이렇게 됩니다.

------------------------------------- low
변수
------------------------------------- ebp
Saved frame pointer
-------------------------------------
retern address
------------------------------------- high

처음 메인함수가 들어가는 부분에 브레이크 포인트를 겁니다.
그런 다음 ebp의 주소를 알아봅니다.
(gdb) x/16 $ebp              <-- ebp를 16개 보여주는데..
0xbffff278:     0xbffff298      0x40038917      0x00000001      0xbffff2c4
0xbffff288:     0xbffff2cc      0x4001582c      0x00000001      0x080483b0
0xbffff298:     0x00000000      0x080483d1      0x08048458      0x00000001
0xbffff2a8:     0xbffff2c4      0x08048308      0x080484cc      0x4000c660
(gdb)
이런식으로 나타났다고 생각해 봅니다.
ebp는 0xbffff278입니다.
요즘 컴파일러에 따라 다르겠지만 보통은 이럴경우에 0xbffff27c에서 16바이트 단위로 +,-해줍니다.
0xbffff24c , 0xbffff25c , 0xbffff26c , 0xbffff27c , 0xbffff28c , 0xbffff29c , 0xbffff2ac , 0xbffff2bc
이중에 하나가 main함수의 리턴어드레스가 됩니다.

2.printf함수의 .got 주소찾기.
objdump를 이용해서 구할수 있습니다.
objdump -R ./recluse5 | grep printf
080495cc R_386_JUMP_SLOT printf

이것으로 printf의 .got 주소는 080495cc입니다.

gdb를 이용해서도 구할수 있습니다.
disass printf하셔서 구해보실수 있습니다.

3. .dtors의 주소찾기.
이것 역시 objdump를 이용해서 구할수 있습니다.
objdump -h ./recluse5 | grep .dtors
17 .dtors        00000008  080495a8  080495a8  000005a8  2**2
이것으로 .dtors의 주소는 080495a8입니다.
.dtors의 설명은 ganseo.com의 해킹 기초학문에 자료 있습니다.

main함수의 리턴어드레스를 구해보는게 좋으실것 같습니다.

  Hit : 9992     Date : 2004/02/08 08:22



    
sjh21a 이것으로 printf의 리턴어드레스 주소는 080495cc입니다. .got 영역아닌가요..? globl offset table..~ 간서님 좋은 문제 언제나감사하고 있습니다 ^^ 2004/02/12  
ssuckies 수정했습니다.^^ 감사합니다^^ 2004/02/12  
1540   [[초급/강좌]] 유닉스 주요 명령어[7]     소유
10/09 13811
1539   [[초급/강좌]] 유닉스 기본 정리[8]     소유
10/09 13791
1538     [re] 허접팁] 암호를 바꿔 해킹피해 줄이쟈 ㅋ ^^; 더 좋은방법[9]     xeon400
10/14 8854
1537   콘솔과 엑스윈도에서 마우스 사용하기[1]     소유
10/28 9501
1536   리눅스에서 한국통신 adsl 설정[10]     jgminam
11/06 10808
1535   gdb사용법_링크임다...[3]     esang72
01/10 8316
1534   리모트에서 명령어 실행시키기[1]     xiangyi
02/03 10039
  format string을 위한 리턴어드레스 구하기.[2]     ssuckies
02/08 9991
1532   그녀의 Vulnerabilities에 따른 Remote/local one night stand exploit.[2]     ssuckies
03/29 9399
1531   왜 C 이어야 하는가 ?[96]     소유
04/09 22983
1530   BOF 해결 무작정 따라하기 #1[7]     ssuckies
04/12 13720
1529   BOF 해결 무작정 따라하기 #2     ssuckies
04/12 9237
1528   커널버전 확인하기ㅋ[1]     괴도js
07/02 8589
1527   [C강좌] C언어의 기본개요     괴도js
07/02 10487
1526   C언어 기본구조[1]     괴도js
07/02 11974
1525   C강좌;;라 할것잇나?[1]     괴도js
07/03 10695
1524   2번째C강좌~![9]     괴도js
07/03 11201
1523   I. 리눅스 구조 및 일반 명령어.     괴도js
07/04 11986
1522   II. 일반명령어2.     괴도js
07/04 9660
1521   [Bash Shell] 정복하기[1]     괴도js
07/04 9522
[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