2025.1.17——三、SQLi regexp正则表达式|

devtools/2025/1/19 18:37:20/

题目来源:buuctf [NCTF2019]SQLi1

目录

一、打开靶机,整理信息

二、解题思路

step 1:正常注入

step 2:弄清关键字黑名单

1.目录扫描

2.bp爆破

step 3:根据过滤名单构造payload

step 4:regexp正则注入

三、小结


一、打开靶机,整理信息

        很典型的sql注入类型题目,并且是字符型注入

二、解题思路

step 1:正常注入

        尝试注入发现都显示hacker!!!说明被过滤了

step 2:弄清关键字黑名单

1.目录扫描

(dirmap安装失败,还在研究)看其他wp得到robots.txt中藏着hint.txt,即过滤字符的表

        得到两个信息:①用户名是admin,只要密码对了,就能拿到flag了;②关键字基本上都被过滤掉了,所以万能密码、时间盲注、联合注入、order by等语句都没用,并且大小写也无法绕过

2.bp爆破

        得知基本上都被过滤了,只有regexp和 \ 幸存。所以/**/可替换空格,末尾多出来的  '可以用%00截断。

step 3:根据过滤名单构造payload

        由题可得sql语句:select * from users where username='①' and passwd='②'

        我们传参位置为①和②,利用转义字符 \ 将①后面的单引号闭合掉,然后再传passwd参数,即select * from users where username='\' and passwd='②'

step 4:regexp正则注入

regexp正则注入

REGEXP注入与LIKE注入学习笔记-CSDN博客

        所以核心语句在②上,用regexp查询passwd^匹配字符串开头,%00截断后面内容,但不能在输入框提交,会被url编码然后拦截的,在bp中提交尝试用payload1:||/**/passwd/**/regexp/**/"^a";%00,发现响应里有welcome.php

        感觉接近了

        可以从第一个字符猜测password值,知道welcom.php出现在响应报文中,可以使用脚本:每周一题(四) | Wei's blog 脚本见链接(我自己还写不出来脚本)

        得到password:you_will_never_know7788990

        在输入框输入任意用户名和password即可得到flag

三、小结

        好痛苦的一道题,也有可能是在痛苦时间段做的。

1.目录扫描是web题目中常用手段,常用工具有dirsearch、dirmap

2.过滤的关键字可以用字典爆破,也可以寻找hint.txt,被过滤的关键字代表一些注入姿势的禁止,可以绕过,也可以换其他方式注入

3.regexp正则注入是新知识点

4.python脚本很重要,不得不会

5.题目一般不会给没用的信息,比如本题提示则为字符型注入


http://www.ppmy.cn/devtools/151883.html

相关文章

LeetCode面试题 08.03魔术索引

探索魔术索引:算法与实现 在算法的奇妙世界里,我们常常会遇到一些独特的问题,“魔术索引” 问题便是其中之一。它不仅考验我们对数组操作的理解,还要求我们运用巧妙的逻辑来找出满足特定条件的索引。 一、问题阐述 给定一个有序…

python——句柄

一、概念 句柄指的是操作系统为了标识和访问对象而提供的一个标识符,在操作系统中,每个对象都有一个唯一的句柄,通过句柄可以访问对象的属性和方法。例如文件、进程、窗口等都有句柄。在编程中,可以通过句柄来操作这些对象&#x…

Ubuntu22.04系统切换内核版本

Ubuntu系统切换内核版本 1 更换镜像源2 查询可更换的内核版本3 安装合适版本内核4 切换内核版本5 验证内核是否更换成功 1 更换镜像源 使用鱼香ROS脚本来更换镜像源 wget http://fishros.com/install -O fishros && . fishros2 查询可更换的内核版本 sudo apt updat…

【Vue】vue3 video 保存视频进度,每次进入加载上次的视频进度

使用 localStorage 存储每个视频的播放进度在组件加载时恢复上次的播放进度在视频播放过程中实时保存进度在组件卸载前保存最终进度使用 timeupdate 事件来监听视频播放进度的变化 在模板中为视频元素添加事件监听&#xff1a; <videoloopautoplaycontrols:id"video_…

SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输

前言 大家好&#xff0c;我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术&#xff0c;以保证图表的实时渲染&#xff0c;当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE&#xff1f; SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …

Android CustomTextField

在 Compose 中开发用户界面时&#xff0c;需要处理输入框和键盘的交互&#xff0c;例如在键盘弹出时调整布局位置&#xff0c;避免遮挡重要内容。本篇博客将通过一个完整的示例展示如何实现这一功能。 功能概述 本例实现了一个简单的输入框。当输入框获得焦点或输入文字时&…

【Qt】04-Lambda表达式

前言一、概念引入二、使用方法2.1 基本用法代码示例2.2 捕获外部变量2.3 参数列表 三、完整代码mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 总结 前言 一、概念引入 Lambda表达式&#xff08;Lambda Expressions&#xff09;是C11标准引入的一种匿名函数对象&…

vector和string类库中的迭代器

关于标准库类型vector&#xff1a;定义和初始化vector对象的方式有哪些 默认初始化&#xff1a;创建一个空的 vector std::vector<int> v1;初始化指定数量的相同默认值元素&#xff1a; std::vector<int> v2(5); // 包含 5 个默认值为 0 的整数初始化指定数量的指…