网络对抗原理实验2-SQL注入实验

一.  实验目的

尝试实践基础的sql注入,并利用抓包工具及日志文件了解注入攻击的原理。

实验环境:Vmware虚拟机,Ubuntu64位镜像

二.  安装部署

2.1 安装部署sql

在ubuntu终端输入:

sudo apt update

sudo apt install mysql-server

2.2 创建表

2.3 插入示例数据

id选择了自动排序

2.4 安装Nginx 和 PHP-FPM

sudo apt install nginx php-fpm php-mysql

编辑 Nginx 配置文件 /etc/nginx/sites-available/default:添加首页的index.php

sudo systemctl restart nginx

重启nginx服务

添加index.php,先写入测试代码,检查是否正常运行。由于我们使用的不是ip地址而是sock,将使用socket协议运行,我们直接在浏览器打开localhost/index.php即可。

2.5 安装sqlmap与OWASP ZAP

Sqlmap:

git clone https://github.com/sqlmapproject/sqlmap.git

sudo apt install python2[sqlmap需要python环境]

sudo apt-get update

pip install --upgrade pip

cd sqlmap

python2 sqlmap.py -hh

有正常的回应说明安装成功。

安装ZAP:sudo snap install zaproxy --classic

在浏览器中配置和ZAP一致的代理:

然后从ZAP导入证书到火狐浏览器上:

如果火狐点击证书无响应,可能是因为该文件无权限使用,需要使用chown命令将文件的使用权从root转移到当前用户。

导入后观察ZAP界面是否有抓包记录

可以发现ZAP能抓到外网的包,但无法抓到本地的包,经搜索是firefox默认不允许抓本地包,进行修改:

配置完毕,可以开始实验。

三.SQL注入实验

3.1 编写带SQL注入漏洞的php文件

源代码见附件,介绍以下主要功能:

3.2 各个功能的展示&SQL注入效果:

功能一:展示姓名和分数 (show):根据学号查询学生姓名和分数。

这里是源码片段,我们输入的$id可以是1’ OR ‘1’=‘1,

则“……WHERE id = ‘1’ OR ‘1’= ‘1’”

注入成功

功能二:展示学生是否存在(exists):查询学号是否存在于数据库。

可以在后面接续命令,恶意插入数据或删除表格

功能三:在两段随机内容之间展示查询结果 (random_message):查询结果是否存在并显示在两段随机内容之间。

输入的id为6,提示不存在,而在布尔盲注入后,提示学生存在。

功能四:展示条件表达式结果 (condition_check):检查学生分数是否大于60并显示在两段随机内容之间。

同样可以布尔盲注入。

功能五:展示固定内容 (fixed_result):无论查询结果如何,始终展示固定内容。

可以使用延时输出注入:网页成功在五秒后才响应。

功能六:更新分数 (update_score):根据学号更新学生分数。

这里需要传递score以及id

将id=1的学生分数更新为100

这个功能留待sqlmap挖掘漏洞

3.3 sqlmap分析

我们使用sqlmap进行漏洞扫描

Sqlmap -u “URL”

使用sqlmap的时候需要注意URL需要使用双引号括起来,否则实际执行会丢失参数,后经网络查询,多参数需要使用引号

这是第一个接口的扫描结果:

尝试使用其扫描出的UNION注入漏洞:

在命令行后添加--dbs 可以扫描出含有的数据库,SQLINJECTION为本次创建的数据库。

之后的sqlmap扫描我们结合抓包工具分析,然而这里遇到了一个问题,就是它会自动跳过扫描,直接给出第一次分析的漏洞。

于是我们找到它的目录,删除其缓存文件

根据源码分析,第二到第五个接口结构大致相同,漏洞也大致相同,我们归为一组;

第六个接口归为一组;

以第四个接口为例,记得添加 --proxy "http://127.0.0.8:8082"(我的设置),否则ZAP无法捕获

sqlmap的扫描过程是按照顺序扫描每个变量可能含有的漏洞,尝试各种可能成功注入的UNION表达式,或是sleep注入等,显然在action上它扫描不出漏洞,则扫描id可能有的漏洞:

之后开始尝试布尔注入

反馈的结果:

进入下一步:

扫描结果:选择y

之后的扫描没有结果,总的结果为:

我们使用这两种注入方法:

均成功。我们来扫描第六个:

先扫描score:

扫描出:

允许其拓展扫描范围,会开始检查参量是否会展现假阳性:

3.4 SQL后台观察

打开mysql,输入SET GLOBAL general_log = 'ON';开启查询日志。

然后尝试收集到的所有注入,观察原理。

尝试我们在接口1里收集到的注入方法:

1.布尔注入:

正常访问:

布尔注入:

2.时间延迟:

  • 输入内容:

    日志命令:

    解析:命令中AND (SELECT 9336 FROM (SELECT SLEEP(5)) AS XPdF)

    这个子查询会执行 SLEEP(5),让查询延迟5秒,然后返回 9336。外层查询检查这个返回值是否等于 9336。这里的 XPdF 是必须的,因为每个子查询需要一个别名,但语法严格来说是不对的。

3.UNION注入

  • 它的原理是基于盲注,会导致结果多出一行错误结果

    四.实验感悟

    通过这次实验,我进一步理解了sql注入的原理,过程以及影响;同时在不断的尝试和网络搜索中对于网络抓包工具,数据库操作语言, linux终端语言等有了更多了解。

  • 26
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值