Mommy, what is Use After Free bug?
ssh uaf@pwnable.kr -p2222 (pw:guest)
use after free문제이다
use after free는
file:///C:/Users/Home/Downloads/USE_AFTER_FREE.pdf
cd80님의 문서를 보고 공부했다.
cd80님의 문서는 읽을때마다 정말 좋은것 같다
class Human에 give_shell()이라는 함수가 있는데
m,w를 free(delete)->reuse(data덮어쓰기)->introduce주소를 give_shell()주소로 덮어쓰기->introduce호출
하면 될 것 같다.
일단 틀은 잡았는데 어떻게 메모리를 들여다 볼지 막막했다.
gdb를 돌ㄹ보아야겠다
(푸는중)
스위치문을 찾았다
1번 옵션 -> introduce()를 콜하는 case 1이 있는 곳(0x400fcd~0x401000(2번시작주소))을 읽어보면
[rbp-38]에 m
[rbp-0x30]에 w가 있을 것 같다.
여기 주소를 한번 따라가 봐야겠다.
m의 주소는 0x01494040
w의 주소는 0x01494090
이라고 생각하고 들어가봤다
두 구조체를 발견했다
나이와 이름을 발견했다.
그렇다면 덮어써야할 함수는 어디있을까?
위의 case1에서 어셈블리를 해석해보면
call rdx라는 함수를 호출하는데
rdx는 00401570+0x08안의 값이 들어간다
따라가니 <_ZTV3MAN+24>가 있었고 0x004015f0이 있었다.
이게 introduce()의 주소인 것 같다.
그렇다면 getshell()의 주솟값은 어디있을까?ㅠㅠ
일단 3번으로 구조체를 delete한후 2번 옵션으로 AAAA라는 값이 있는 파일을 read해서 data에 넣은후
다시 저 메모리를 방문해 보았따.
아까 introduce()주소와 관련된 곳에 AAAA가 덮어써졋다
user after free 취약점에 의해 발생한 현상이다
(그 밑에 AAAA는 바로 전에 실수로 delete를 안하고 read했더니 들어갔던 값이다... 실수 ㅎㅎ)
그렇다면 우리가 해야할 일은
getshell()로 보내는 값을 찾아서 그 주소값을 파일 내용에 넣은다음
돌리면 getshell()을 실행시킬 수 있다.
아 getshell()어떻게 찾지하다가
human woman man과 관련된 함수 테이블을 찾아봤따
case1에서 호출하는 것은 0x0040117a의 주소였다
따라가보니
get_shell()은 human의 private성분이었음으로
아무튼
zt15human의 주솟값을 하나씩 넣어봤다
오 진짜 introduce가 있었다
0x0040117a엔 뭐가있나 해서 들어가보니
와
shell함수다
ㅠㅠㅠㅠㅠ
human에 있는 40117a의 주소에서 0x08을 뺀 주소를 보면
0x00401588을 넣어보자
ㅠㅠㅠ
풀이가 너무 정신 없었던 것 같지만 잘 봐주면 좋겠다
풀이를 쓰는건 힘들지만 풀이를 쓰고 나면 머리속에 더 정리가 더 잘 되는 느낌이라
기분이 좋은것 같당
'war game > pwnable.kr' 카테고리의 다른 글
pwnable.kr memcpy 10pt (1) | 2016.10.12 |
---|---|
pwnable.kr codemap 10pt (0) | 2016.10.12 |
pwnable.kr cmd2 9pt (0) | 2016.10.12 |
pwnable.kr cmd1 1pt (0) | 2016.10.11 |
pwnable.kr lotto 2pt (0) | 2016.10.11 |