티스토리 뷰
최초작성일 2014 - 12 - 12
최종수정일 2015 - 10 - 22
root@Kali ~/s/exploits# checksec --file ./nuclear RELRO STACK CANARY NX PIE RPATH RUNPATH Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH
메모리 릭하는건 cd80님 문서 보면 모두 나와있음 - http://cd80.tistory.com/44
원래 system함수 구해서 cmd를 넣어서 실행시켰었는데 nc로 전송값 받는게 귀찮아서
mprotect로 쉘코드 실행권한 주고 실행시킴
->
#include <sys/mman.h> int mprotect(void *addr, size_t len, int prot);
예전에 알았었는데 다시 깨달은건 addr부분이 무조건 0x1000의 배수가 되어야 한다는 점이다. len이 그런줄 알고
len만 주구장창 바꾸다가 시간을 많이 썻다.
* 설명이 부정확할 수도 있습니다.
그리고 원래 이 바이너리 처럼 SOCKET을 쓰는 바이너리는 그냥 execve("/bin/sh", ...) 해버리면
바이너리 실행시켜주는 곳에서 쉘이 따지고(아마 서버) 공격자 입장에서는 flag를 가져올 수 없다.
왜냐하면 execve로 실행시켜주면 stdin, stdout으로 입,출력이 되기 때문인데, 여기서 dup2함수를 이용해서
stdin, stdout모두 SOCKET FD로 돌려주면 공격자가 flag를 가져올 수 있다.
dup() - http://forum.falinux.com/zbxe/index.php?document_srl=520935&mid=C_LIB
| ||||||
|
dup2() - http://forum.falinux.com/zbxe/index.php?document_srl=520937&mid=C_LIB
| |||||||||
|
일단 쉘코드의 주소는 http://shell-storm.org/shellcode/files/shellcode-881.php 인데,
그대로 가져다 쓰면 dup을 4에다 해주는게 아니라 2인가? 에다 해줘서 SOCKET FD를 받지 못함
dup(2)를 실행하는걸 dup(4)로 바꿔주고 'dec %eax'를 없애주니 정상작동 했음.
똑같이 SOCKET FD가 4번일때 사용하고 싶으면 2번째 바이트 0x04로 바꾸고 9번째 바이트 삭제하면 됨
BUG_BOUNTIES_b3COM3_GrEAT
'Pwnable > CTF' 카테고리의 다른 글
Volga CTF 2014 [exploit 100] (0) | 2015.01.28 |
---|---|
CSAW 2012 [Challenge1] (0) | 2015.01.23 |
CodeGate 2014 [ Angry Doreamon ] (2) | 2015.01.14 |
NullCon 2014 [Exploitation 100] (0) | 2015.01.13 |
Plaid CTF 2013 [ropasaurusrex] (0) | 2014.12.13 |