ezhttp
因为是一道http的题,前端代码没有什么有效信息,但提示说密码在某个地方,我们用robots建立一个robots.txt文件来看有哪个文件可以访问
补充知识:http请求中via字段表示从哪个网址的服务器代理而来,user-agent表示浏览器,refer表示从哪个网址过来,host头X-Forwarded-For,Client-Ip后加127.0.0.1可让后端认为是本地访问,
warm up
补充知识:在 PHP 中,extract()
函数用于将数组中的键值对转换为变量和值。它的作用是将数组中的键作为变量名,对应的值作为变量的值,从而在当前的符号表中创建变量。
例如,如果我们有一个数组 $data = ['name' => 'Alice', 'age' => 25];
,使用 extract($data);
之后,就会在当前符号表中创建两个变量 $name
和 $age
,分别对应数组中的值。
需要注意的是,extract()
函数可能会导致命名冲突或者覆盖已有的变量,因此在使用时需要谨慎考虑。
首先很明显是一个代码审计的问题,我们第一关要做md5绕过相关知识(在此关中extract()函数用于将传进去的参数,作为变量储存起来,使其之后可以随意使用)
首先两个参数要加密前不相同加密后相同,我们此时可以用0e绕过,随便选两个加密后都是0
e开头的字符串
val1=240610708&val2=QNKCDZO
第二个要使加密前后字符串相同,找加密前是0e开头,加密后同样是0e开头的字符串
md5=0e215962017
发现那个加密后也是0e开头的于是我们就用上一次的
最终构建出payload
?val1=240610708&val2=QNKCDZO&md5=0e215962017&XY=0e215962017&XYCTF=0e215962017
获得第二关的文件
利用preg_replace()的漏洞进行命令执行
最终payload ?a=/test/e&b=system(cat /flag)&c=test