很综合的一道题,虽然比较简单,但是可以用来进行知识巩固,不多逼逼直接开始。
一、打开环境页面上只有一句话“Hack me”,可以扫一下目录,也可以直接去看robots.txt(经验)。
二、打开之后发现依旧什么都无,那就去看看数据包,有无隐藏信息,找到/fl4g.php
三、
1.第一层考察intval()函数——获取变量整数
说明:
intval(mixed $value
, int $base
= 10);
通过使用指定的进制 base
转换(默认是十进制),返回变量 value
的 int 数值。 intval() 不能用于 object,否则会产生 E_WARNING
错误并返回 1。
成功时返回 value
的 integer 值,失败时返回 0. 空的 array 返回 0,非空的 array返回1.
注意: 若base为0,则通过value检测转换进制。
如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex);否则,
如果字符串以 "0b" (或 "0B") 开头,使用 2 进制 (binary);否则,
如果字符串以 "0" 开始,使用 8 进制(octal);否则,
将使用 10 进制 (decimal)。
在本题中PHP版本为5.6.40,若传入value为“1e4”第一次会被识别为字符串,返回值为1,后+1时会被识别为数字,返回1e4+1。
2.第二层MD5弱比较,满足两侧返回值为0即可
0e215962017, 0e730083352, 0e807097110, 0e840922711
0e绕过:弱相等,原理是比较时截断,前保留后丢弃
数组绕过:MD5()处理数组时会报错并且返回NULL,但仍会执行
若对数组前几个有过滤可填填补其他内容占位,实际执行顺序为传参顺序
MD5碰撞:传输超长字符串
对于sql中万能密码ffifdyop,其经MD5后被sql转为ASCII执行解析出 or 语句,成为用真
3.过滤了空格和cat,RCE绕过
str_ireplace()函数会将输入的cat替换为“wctf2020”
RCE过滤绕过:
反斜线:即转义字符;ca\t,f\lag.php
空格绕过:
$IFS:在linux系统中执行换行(${IFS}、$IFS$(number))
{}:{cat,flag.php}用逗号连接,需要{}
%20,%09
条件苛刻(如过滤字母):对命令取反、异或操作
对无回显:?><=`/???/???%20 *;通配符,具体不赘述
对本题也可用其他命令替代cat:
tac:反向输出内容(不是文字反向)
head:查看前十行
tail:查看后十行
nl:显示文件内容并且在每行前加上行号
more:分页展示