y0u_bat
Plaid CTF - prodmanager 본문
1. 보호 기법
2. User After Free + Flag Leak
UAF를 이용해서 더블링크드리스트의 포인터를 조작하여, Print하는 부분의 주소를 flag주소로 변경하여, Flag를 leak하게 하면 된다.
flag_get 함수를 보면 flag.txt를 읽어와서 0x804c3e0 주소에 write하는것을 볼 수 있다.
Create_product함수에서는 상품을 생성하는데, 이름이랑, 가격을 받아서 malloc(76)한 곳에 sub_8048D54 함수내부에서 복사 해준다.
그리고 sub_8048DC8은 링크드리스트 설정하는 부분이다.
print 하기 위해서는 상품을 3개 만들고 product manager에 최소 3개를 add 해줘야지 그때부터 print 할 수 있다.
상품 3개 만들고 이함수로 그상품 3개를 추가 해주면 된다.
그리고 2번째 상품을 remove(free) 시켜준다.
그다음 create_profile 함수로 uaf해서 그자리에 다시 할당한다.
uaf 일어나서 free한 2번상품에 다시 할당 할수있고, write 또한 가능하다.
4번 메뉴를 통해서 manager 추가한 상품들을 print 할수있다. *v1이 price v1+6가 name
여기서 중요한거는 sub_80494A0함수인데, 여기서 링크드리스트를 설정하면서, 출력시킬 해당상품의 청크 주소를 리턴한다.
아까 uaf 하면서 write할때 링크드리스트의 포인터부분을 write 하여, 저 함수의 리턴값이 flag-24 의 주소가 나오게끔 만들어주어,
printf할때 v1+6 즉 *(v1+24) flag-24+24가 print 되므로 flag가 출력 될것이다.
Exploit.py
'CTF' 카테고리의 다른 글
SECCON 2016-tinypad - 300pt (0) | 2017.02.07 |
---|---|
Bitsctf Command_Line - 20pt (0) | 2017.02.05 |
Christmas - who is solo? (5) | 2017.01.12 |
. (0) | 2017.01.10 |
[Defcon 2014] Babyfirst heap (0) | 2017.01.09 |