Buuctf Web(17-20)
17、BackupFile
题目名称叫备份文件,直接用dirsearch扫描:py -3.9 http://2677258c-1c01-46a9-9f37-cef51bea8534.node4.buuoj.cn:81/ -e php
响应成功的
访问/index.php.bak文件,下载下来了
查看文件,如果key=123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3,输出flag
如果直接构造payload:/?key=123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3
显示只要数字
==是弱相等,所以当key=123时,就会输出flag
构造payload:/?key=123
得到flag
1 | flag{7e29466e-c1e3-4679-8eda-80c196664fe2} |
18、Easy Calc
查看源代码,没看到啥
抓包,发现一个calc.php文件
查看该文件,有一个黑名单
1 | 知识点: |
查看源码,$(“#content”).val()相当于 document.getElementById(“content”).value;
PHP的字符串解析特性
尝试一下/calc.php?num=phpinfo()
1 | PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。 |
加个空格
由于“/”被过滤了,所以我们可以使用chr(47)来进行表示,进行目录读取:calc.php? num=1;var_dump(scandir(chr(47)))
构造:/flagg——chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)
payload:calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
得到flag
1 | flag{21d2d1ed-ae60-4490-a8b0-0f712482f7cd} |
19、BuyFlag
查看源代码,发现有两个php文件链接,点击一个查看
点击右边的菜单,有PAYFLAG,点击查看
出现这段话
查看源代码,用POST的方式传参,money=100000000,password=404,但是password不能为数字,所以password等于404+任意字符
前面提示必须是cuit的学生,所以修改cookie里的user=0
为user=1
修改uesr=0为user=1,页面变了,提示输入password
post传参,password=404a&money=100000000,提示数字太长
尝试次方 1e9,得到flag
1 | flag{2eaf1e59-0556-4816-b343-80a3466e934e} |
20、Easy MD5
查看源代码,找不到有用的信息,抓包
看到有一个提示:Hint: select * from 'admin' where password=md5($pass,true)
1 | md5(string,raw) |
输入ffifdyop
提交
查看源代码
用get传参,满足a!=b且md5(a)=md5(b)
md5加密后的值开头为0E,则说明它们的值相等
payload:/levels91.php?a=s878926199a&b=s155964671a
包含flag.php文件
用post传参,满足param1!=param2且md5(param1)=md5(param2)
这里用php数组绕过,由于哈希函数无法处理php数组,在遇到数组时返回false,我们就可以利用false==false成立使条件成立。
param1[]=1¶m2[]=2
得到flag
1 | flag{5699128f-b8b5-4580-9e90-8ab95639eb15} |