这是强网杯拟态防御线下赛遇到的web题目,本来是不打算分享Writeup的,但是由于问的人很多,于是这里分享给大家。
ez_upload这题算是非常经典的堆叠black trick的题目,算是比较典型的ctf式题目(虽然现在大家都很抵制这样的题目),这里主要是分享Writeup以及我们队在完成题目时的思考流程。
ez_upload 思考流程
最开始我先描述一下题目逻辑。
1、login.php,登陆页面,只获取了username,没有任何限制,username会在转义后进入session。
2、index.php,页面输出了username,ip(可以被xff覆盖),以及上传文件列表(不完整,只有10位)。
3、upload.php,上传文件,要求必须上传php,但是又过滤很多,没办法绕过限制。
在拿到题目后,我们可以得到以下信息:
1、登陆无任何限制,只输入用户名,但单引号、双引号、反斜杠会被转义。aaa' => aaa\'
1)hint提到数据库中username的长度为25
2、登陆后,index.php获取ip,这个ip可以被xff覆盖,而且是每次都会获取。
1)xff受到waf限制,形似。
$ip = get_ip_from_xff();
echo $ip;
waf($ip);
但这里只拦截包括单引号、反斜杠
3、上传文件,要求必须上传php,但会被waf拦截。
1)代码形似:
waf($_FILES);
所以和ip那里触发不一致
2)看上去对php的验证在前,在最早的测试中,只有在触发waf的情况下才能被认为是php(猜测)
\n.....
这里的判断看