[极客大挑战 2019]HardSQL;[MRCTF2020]Ez_bypass;[网鼎杯 2020 青龙组]AreUSerialz
[极客大挑战 2019]HardSQL
测试发现空格被过滤了,可以使用括号绕过
还过滤了一些sql的字符,如union等
尝试使用报错注入就成功了
查库
查表
查字段
查字段内容,
这里限制了输出的位数,可以使用substr
,但是也被过滤了,故还可以使用left
,right
函数实现输出
[MRCTF2020]Ez_bypass
md5的强比较,可用数组绕过,弱比较转换类型后再比较,所以可用1234567a
,它会转换成1234567
后再比较
得到flag
[网鼎杯 2020 青龙组]AreUSerialz
str参数传递给is_valid
检查ascii码是否在32到125之间
function __destruct()
对象销毁时执行,
function __construct()
对象创建时执行
故这里执行function __destruct()
,op的强类型比较为2时,将op改为1,之后传给process
若op的弱类型比较等于2,就执行read
存在file_get_contents
,之后可用伪协议读取文件
payload:op=2时,强类型比较为false,弱类型比较为ture,故执行read,
<?php
class FileHandler {
protected $op= 2;
protected $filename= "php://filter/read=convert.base64-encode/resource=./flag.php";
protected $content;
}
$a=new FileHandler();
$b=serialize($a);
echo ($b);
得到,因为这里不是public
,会在参数前加\00*\00
,它没有在is_valid
函数规定的范围里,就没有绕过
故应该将
protected
改为public
,
因为PHP7.1+对类的属性类型不敏感
base64解密后得到flag