安全实验(持续更新)

安全基础

iptables端口复用

第一种方式(ICMP遥控开关)

缺点:如果目标在内网,我们无法直接ping到它

实验环境
kali(客户端),centos(服务端)
centos配置
1.创建端口复用链
在这里插入图片描述

创建完成后查看是否创建成功,确保自定义链已经成功创建(如下图)
在这里插入图片描述

2.创建端口复用规则,将流量转发至22端口
在这里插入图片描述
3.开启开关
如果接收到一个长为1139的ICMP包,则将来源IP添加到名为test的列表中
在这里插入图片描述
4.关闭开关
如果接收到一个长为1140的ICMP包,则将来源IP从test列表中去掉
在这里插入图片描述
5.配置转链规则
如果发现SYN包的来源IP处于test列表中,将跳转到PRE-TEST链进行处理,有效时间为3600秒
在这里插入图片描述
最后确认是否全部创建完成
在这里插入图片描述
kali配置
1.开启复用
向目标发送一个长度为1111的ICMP数据包(加上包头28,实际总长度为1139)
在这里插入图片描述
这里是ping成功的,尝试用ssh登录

在这里插入图片描述
这里可以看出之前的配置能够将80端口的流量转发到22端口,返回centos发现建立了两次稳定的TCP链接
在这里插入图片描述
这里有两次稳定链接因为在做测试,如果现实中出现这样的请款会不会有什么问题?安全实验思考(持续更新)
测试80端口是否还可以访问
这里我们发现已经无法访问web了
在这里插入图片描述
我们再去centos上查看iptables,发现收到1139字节包,并且22端口有流量
在这里插入图片描述
开启复用成功!!!
2.关闭复用
向目标发送一个长度为1112的ICMP数据包(加上包头28,实际总长度为1140)
在这里插入图片描述

这里是ping成功的,尝试用ssh登录
在这里插入图片描述
此时已经登录不上了,为确保准确,我们查看iptables发现收到1140的包
在这里插入图片描述
关闭复用也完满成功!!!

第二种方式(TCP数据包关键字)

优点:不怕目标在内网
实验环境
kali(客户端),centos(服务端)
centos配置
1.创建端口复用链
在这里插入图片描述
创建完成后查看是否创建成功,确保自定义链已经成功创建(如下图)
在这里插入图片描述
2.创建端口复用规则,将流量转发至22端口
在这里插入图片描述
3.开启开关
iptables -A INPUT -p tcp -m string --string 'zhimakaimen' --algo bm -m recent --set --name letmein --rsource -j ACCEPT
4.关闭开关
在这里插入图片描述
5.配置转链规则
如果发现SYN包的来源IP处于test列表中,将跳转到PRE-TEST链进行处理,有效时间为3600秒
在这里插入图片描述
kali配置
1.开启复用
开启后本机到目标 80 端口的流量将转发至目标的 SSH,80 将无法再被本机访问:
在这里插入图片描述
在这里插入图片描述
2.关闭复用
关闭后,80 恢复正常:
在这里插入图片描述
在这里插入图片描述

SSLH共享端口

实验环境
kali(服务端)centos(客户端)
1.kali安装SSLH
在这里插入图片描述
2.配置ngenx
在这里插入图片描述
修改服务端口为443
在这里插入图片描述

重启服务
在这里插入图片描述

3.配置SSLH
在这里插入图片描述

SSLH 在所有可用接口上侦听端口 443(例如:0.0.0.0:443)

在这里插入图片描述

–user sslh:要求在这个特定的用户身份下运行。
–listen 0.0.0.0:443:SSLH 监听于所有可用接口的 443端口。
–sshs 127.0.0.1:22 : 将 SSH 流量路由到本地的 22 端口。
–ssl 127.0.0.1:443 : 将HTTPS/SSL 流量路由到本地的 443 端口。

重启SSLH服务
在这里插入图片描述
4.测试
查看SSLH守护程序是否在监听443端口
在这里插入图片描述

这里可以看见centos成功通过443端口连接上了kali
在这里插入图片描述
https也可以成功访问
在这里插入图片描述

实验成功!!!

Nginx Host绕过

Nginx 环境搭建

1、nginx基础配置
创建一个demo.conf ,在配置文件中包含一下

[root@192~ protected]# cat /usr/local/nginx/conf/nginx.conf 
http {
    include /usr/local/nginx/conf/demo.conf;
    }
[root@192~ protected]# cat /usr/local/nginx/conf/demo.conf 
# 2023.mhz.pw
server {
    listen 80;     
    server_name 2023.mhz.pw;  
    root /usr/local/nginx/html/mhz/web;
    index index.html index.php;

    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;
        }
}
#重启nginx服务
[root@192~ protected]# cd /usr/local/nginx/sbin/
[root@192~ sbin]# ./nginx -s reload

2、添加hosts文件

192.168.123.128 2023.mhz.pw

3、上传pwnhub文件
在这里插入图片描述

4.给mhz文件权限,给tmp 权限

[root@192~ sbin]#chmod -R 777 mhz/
[root@192~ mhz]# cd protected/
[root@192~ mhz]# mkdir tmp
[root@192~ mhz]# chmod 777 tmp/

5、建库建表

create databases security;
use security;
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

DROP TABLE IF EXISTS `flags`;
CREATE TABLE `flags` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `flag` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(256) NOT NULL,
  `password` varchar(32) NOT NULL,
  `email` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4;

SET FOREIGN_KEY_CHECKS = 1;

6、测试
在这里插入图片描述
成功进入登陆界面
输入用户名和密码查看MySQL数据库结构

mysql> use security;
Database Test
mysql> show tables;
+--------------------+
| Tables_in_security |
+--------------------+
| flags              |
| users              |
+--------------------+
2 rows in set (0.00 sec)

mysql> select * from flags;
Empty set (0.00 sec)

mysql> show columns from flags;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| flag  | varchar(256)     | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> show columns from users;
+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(256)     | NO   | UNI | NULL    |                |
| password | varchar(32)      | NO   |     | NULL    |                |
| email    | varchar(256)     | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql> insert into flags (flag) values ('莫尼热');
Query OK, 1 row affected (0.00 sec)

mysql> select * from flags;
+----+-----------------------+
| id | flag                  |
+----+-----------------------+
|  2 | 莫尼热    |
+----+-----------------------+
1 row in set (0.00 sec)

mysql> select * from users;
+----+----------+----------------------------------+-------------------+
| id | username | password                         | email             |
+----+----------+----------------------------------+-------------------+
| 15 | 123      | 1a2s3d4f5g6h7j8k9lq              | 2893604790@qq.com |
+----+----------+----------------------------------+-------------------+
1 row in set (0.00 sec)

mysql>

第一种处理方法

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

第二种处理方法

当我们传入两个Host头的时候,Nginx将以第一个为准,而PHP-FPM将以第二个为准。也就是说,如果我传入:Host: 2023.mhz.pw或者Host: xxx’"@example.comNginx将认为Host2023.mhz.pw,并交给目标Server块处理;但PHP中使用$_SERVER[‘HTTP_HOST’]取到的值却是xxx’“@example.com。这样也可以绕过:
在这里插入图片描述

第三种处理方法

我们在发送https数据包的时候,SNI中指定的域名将会被nginx作为Server Name,而无需和HTTP报文中的Host头保持一致。我们可以直接使用Burpsuite来测试这个trick,比如我在后端编写PHP代码echo $_SERVER[‘HTTP_HOST’]。正常访问是会显示此时的Host头
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值