攻防世界 web进阶区 ics-06
攻防世界 ics-06
涉及知识点:
解析:
进入题目的界面,一通乱点点出了唯一一个可以进入的界面。
观察url
http://111.198.29.45:41597/index.php?page=index
觉得page变量有问题,既然他可以为index(即文件名,那可不可以显示文件源码呢?)
于是构造payload
http://111.198.29.45:41597/index.php?page=php://filter/read=convert.base64-encode/resource=index.php
果然爆出了源码。放到解密网站中go一下。解出源码。
这里就要提到preg_replace()函数的漏洞了,在$pattern中包含/e时,$replacement会被当做php代码来使用。(正则匹配几次就会执行几次$replacement中的代码)
学习资料:http://www.xinyueseo.com/websecurity/158.html
那还有啥说的,burpsuite走起来。
扫出了目录,那就是一个个找了。最后发现s3chahahaDir有东西。
查看文件发现真的有flag。提交。完成!
另外:有两遍flag就是 因为 test test匹配了两次/test/ 所以以上的代码执行了两次(最好写两次,万一两次返回结果不一样呢,虽然不太可能,但试试总没错QWQ)
攻防世界 ics-07 (没有做出来,但好像是题目的问题,毕竟本地复现成功了,但是照着wp撸也没拿到flag。看个思路和知识点就好了。)
涉及知识点:
(1)代码审计(php的弱类型特点)
(2)linux下的文件生成特点
解析:
if (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9')
第一步的payload: ?id=1@9&submit&page=flag.php 没什么好说的。利用php的弱类型比较可以轻松的读取出admin用户(即id=1的用户)并满足以上条件。
使自己的session成为admin后,第二个点
<?php if ($_SESSION['admin']) { $con = $_POST['con']; $file = $_POST['file']; $filename = "backup/".$file; //假目录 if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){ die("Bad file extension"); }else{ chdir('uploaded'); //更改目录 $f = fopen($filename, 'w'); fwrite($f, $con); fclose($f); } } ?>
其他的点就不多说了,毕竟都标注了,重点linux下的文件
可以用../shell.php/.来绕过过滤。(原理的话大概是因为linux文件生成时会自动隐藏生成../和./)