目录
[BJDCTF 2020]easy_md5
ffifdyop
[SWPUCTF 2021 新生赛]crypto8
[HNCTF 2022 Week1]Interesting_include
php://filter协议
[GDOUCTF 2023]泄露的伪装
[BJDCTF 2020]easy_md5
尝试输入一个1,发现输入的内容会通过get传递但是没有其他回显
观察一下响应头,可以看到Hint,即后端处理的SQL语句:
select * from 'admin' where password=md5($pass,true)
//md5函数(string,raw)用法:
string:字符串,必选参数
raw:可选参数,通过post传递
True //原始16字符二进制数
False //默认32字符十六进制数
什么是hint?
hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式。
ffifdyop
nssctf web_[nctf 2018]签到题-CSDN博客
sql查询语句目的是 passdword=传递的值
在sql语句中 or 左右一边为true则语句都为true(或逻辑)
这也是or 1 = 1 的由来,所以在这里要尝试构造带or的参数
or 对应的16进制:276f7227
ffifdyop字符串被 md5 哈希了之后会变成276f7227 36c95d99e921722cf9ed621c
字符串前几位刚好是 ‘ or ‘6,并且 Mysql 又会把 hex 转成 ascii 解释,因此拼接之后的形式是
select * from ‘admin’ where password=''or' 6xxxxx'
//xxxxx指代任意字符
此处raw参数是True,意为返回原始16字符二进制格式。
将ffifdyop传入,得到新环境
查看源代码,发现GET传参a!=b,但是它们的MD5值相等,且此处为(==)弱比较类型
原理见[SWPUCTF 2021 新生赛]jicao、easy_md5-CSDN博客
(1)用数组绕过
(2)用科学计数法0e绕过
又见一个新环境,POST传参了param1!=param2
但是它们的MD5值相等,且此处为(===)强比较类型,使用数组绕过
[SWPUCTF 2021 新生赛]crypto8
下载附件,查看资料知其为UUencode编码
[HNCTF 2022 Week1]Interesting_include
POST传参filter,包含在flag.php文件里
正则过滤了 flag ,但是没有flag又会返回错误
php://filter协议
于是使用php://filter协议,读取源代码并进行base64编码输出。
php://filter/convert.base64-encode/resource=文件路径
构造payload:
?filter=php://filter/convert.base64-encode/resource=flag.php
base64解码得到flag
[GDOUCTF 2023]泄露的伪装
使用dirsearch扫描,发现状态码为200的/www.rar目录,url下载压缩包
访问路径/orzorz.php得到新环境,GET传参cxk
error_reporting(0);
:这行代码设置错误报告级别为0,意味着在运行时不会显示任何错误信息。通常用于生产环境中,以防止敏感信息泄露给用户。
file_get_contents($cxk)
函数:读取$cxk
变量中指定的 URL 或文件的内容。这就需要传入一个文件,如果文件内容等于
"ctrl"
,则返回flag
利用date://协议构造payload:
?cxk=data://text/plain,ctrl