万能密码SQL注入原理.doc
文本预览下载声明
“万能密码”SQL注入基本原理
目录
引言: 3
项目研究原因: 4
项目进展情况: 4
结论: 9
引言:
如今,互联网上的攻击、入侵事件频发,攻击手段越来越多样,攻击工具也泛滥成灾,这其中尤其以注入攻击最为常见。因为这种攻击方式技术门槛低,攻击工具多。注入攻击利用网站页面的用户提交数据功能,恶意编造具有攻击破坏性质的特殊数据字符串,提交给网站执行。如果网站源代码设计不健壮,对提交的数据没有做严格的防范过滤,就很容易被利用,黑客可以以此为突破口,攻入网站服务器。而本次项目所研究的“万能密码”就是注入的一种方式,他通过在管理登陆界面输入能欺骗网站的代码伪装成以认证的管理人员从而非法获取管理员权限从而非法修改网站。
项目研究原因:
后台登录的“万能密码”是一个学长发现了某网站的这个漏洞从而告知我们小组的,我们小组对此产生了极大的兴趣:为何看似严谨的登录界面会有能通过一段代码就能登录、而且还能获得最高权限。所以我们决定这次的百团百题项目以此为研究方向。
项目进展情况:
我们上网查找了有关后台“万能密码”相关的资料发现一个严重的问题:
这个技术已经相对落后,很多网站不能从网页源码中分析出注入漏洞 的存在。所以我们就从网上找了一些老的网站源码案例拿来研究:
我们从百度百科的“注入漏洞”的词条中找到了相关存在漏洞的案例:
下面用“蚂蚁影院3.0”版注销用户(wantlogin.asp)中的一段源码来做一下介绍:(下划线选取为引用案例内容)
%
if request(userid1) then
set rst=server.createobject(adodb.recordset)
sql=select money,online from users where userid=request(userid1) and password=md5(request(pws))
rst.open sql,conn,1,3
if rst.eof and rst.bof then
response.writescriptalert(用户名或密码错误!);history.back();/Script
else
response.writescriptalert(恢复成功你现在可以登陆!);/Script
response.writescript Language=Javascriptlocation.href = index.asp;/script
rst.close
set rst=nothing
conn.close
set conn=nothing
end if
end if
%
我们能够很明显的看到这段代码:
sql=select money,online from users where userid=request(userid1) and password=md5(request(pws))
存在关键词:sql、并且在这个语句后面有逻辑运算符的话就代表了这个网站有被sql注入的可能。
很明显,这段源码中我们可以得知该界面有注入的可能,那到底该怎么实现呢?
从这段代码可看出,在网站中,一开始先判断userid1是否为空,如果不为空,则往下进行到:
进入SQL语句,开始验证帐号密码的匹配。我们按照证上的思维思考一下,如果我们没有这里的帐号密码,我们随便输一个,把帐号输成“zlq”,密码输成“123456”。
这时,网页提交的代码变成
select money,online from users where userid1=zlq and password=md5(123456)
如果是这样的话,网站肯定无法找到对应的帐号密码,就会出现大家遇到的,密码错误、找不到用户等情况。但是如果这样的话,把帐号改成:“zlq or 1=1 or 1=1”
此时提交代码变成:
select money,online from users where userid1=zlq or 1=1 or 1=1 and password=md5(123456),
因为“和”的运算级别比“或”高,所以先执行 1=1 and password=md5(123456),
得到值为0(假);
然后再执行1=1 or 0,得到的值为1(真);
接下来就进行
select money,online from users where userid1=zlq or 1;
整个语句变成了1(真)。
因为逻辑表达式为真,所以就会弹出“ 恢复成功你现在可以登陆!”
但是这只是注入漏洞的一个基本原理,现在已经不太适用,很多网站不能直
显示全部