y0u_bat
[Pwnable.kr] ascii_easy - 33pt 풀이 본문
[Pwnable.kr] ascii_easy - 33pt 풀이
ulimit이 힌트네여.
자 0x80000000부터 4098바이트만큼 메모리 맵핑해줍니다
저 mmap의 리턴값은 0x80000000 입니다.
여기서 뒤에보면 do while문 나오는데 v6은 0x18F보다 작아서 IF문은 패스
v3 = (v7+v6) 인데 v7는 아까 mmap의 리턴값이고 v6은 0이므로 v3은 0x80000000 입니다.
*v3 = getchar(); 로 v3의 주소로 문자열을 입력받네여, 즉 0x80000000 주소에 입력 할 수 있습니다.
is_ascii 함수가 32~127까지 16진수만 입력가능하게 해줍니다.
마지막 메인의 리턴보면 vuln으로 되어있는데 여기서 취약점이 일어납니다.
dest라는 부분을 buffer 라고 생각합시다
ebp-a8 이므로
버퍼는 168바이트네여, 0x80000000 부분은 저희가 입력가능한 부분이니
172바이트만큼 그냥 덮고 그뒤에 ret을 조작해서 eip를 컨트롤 하면 될거같네여.
그냥 break걸고 a 172개 마지막에 b 4개 넣어보았습니다
정상적으로 eip가 42424242로 나오는걸 볼 수 있습니다.
info reg 해서 보면 eip가 42424242로 변한걸 볼 수 있네요.
이제 rtl로 하기위해 시스템 주소를 구하는데
alsr이 걸려있어서 주소가 다르게 나옵니다.
여기서 alsr를 풀 수 있는 명령어가 있는데요.
ulimit -s unlimited으로 alsr 를 풀 수 있습니다.
그리고 이렇게 시스템주소를 구할 수 있습니다.
/bin/sh를 코딩해서 구할려고 하는데 환경상 안된다고 하네여,
gdb에서 find &system, +999999, "/bin/sh" 쳐서 /bin/sh 주소를 구할 수 있습니다.
이제 그 구한거 토대로 공격하면 플래그가 출력 됩니다.
클리어
'System > [Pwnable.kr]' 카테고리의 다른 글
[Pwnable.kr] shellshock - 1pt 풀이 (0) | 2015.07.30 |
---|---|
[Pwnable.kr] input - 4pt 풀이 (0) | 2015.07.30 |
[Pwnable.kr] cmd1 - 1pt 풀이 (0) | 2015.07.25 |
[Pwnable.kr] lotto - 2pt 풀이 (0) | 2015.07.25 |
[Pwnable.kr] blackjack - 1pt 풀이 (0) | 2015.07.25 |