ctf--web刷题记录 ACTF2020back up file 、极客大挑战2019php、secret file
-
backup file指的是备份文件,一般备份文件的后缀有“.git” 、“.svn”、“ .swp” “.~”、“.bak”、“.bash_history”、“.bkf”
根据题目的hint,随便访问一个index.php.bak,下载得到备份文件
-
此处为弱比较,要求just num,所以传入key=123,得到flag
-
dirsearch备份文件爆破
-
php反序列化函数漏洞绕过
-
__sleep() 序列化函数调用时自动执行的函数,可以限定要序列化的属性
__wakeup()//反序列化时优先调用执行的函数 -
private声明的字段类型
-
先试了几个备份文件名都没有用,于是用dirsearch爆破,找到www.zip
-
访问/www.zip,得到文件,解压,得到index.php flag.php class.php打开flag.php,哈哈被骗辣
-
看index.php,调用了class.php,且需要用get方式传递经过反序列化之后的select。
再看class.php,select需要满足usename=admin&password=100
-
查了一圈资料,发现class.php里用到的_wakeup函数在反序列化时会优先执行,覆盖掉之前输入的username和password。解决办法就是写脚本重新构造序列化(脚本是上网找的,我还是太菜了)
<?php
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
}
$a = new Name('admin', 100);//重新构造序列化
var_dump(serialize($a));
?>
输出的结果
-
此处为了绕过_wakeup函数,要把’2‘改成一个大于真实类型数的值,但改了之后上传还是没有反应
-
又查了一圈资料,发现是因为private声明的字段前面都有/0前缀,不能直接复制 字段前加上%00后上传成功,得到flag
极客2019secret file
-
php://filter伪协议
-
先随便访问个flag.php,发现什么都没有
-
从头开始,在源码里一步一步找到文件夹,访问,直到action.php的时候出了问题,访问之后立即跳转成end.php了
-
抓包,在action.php这里发现有个secr3t.php,访问查看源码,发现让我们传入file
-
-
这里用到php伪协议php://filter,把flag.php的源码通过base64编码之后读取
?file传入php://filter/convert.base64-encode/resource=flag.php
-
解码,得到源码
-