今晚拿下PHP反序列化的一系列操作
在CTF中反序列化类型的题目还是比较常见的,之前有学习过简单的反序列化,以及简单pop链的构造。这次学习内容为php内置的原生类的反序列化以及一点进阶知识。
在题目给的的代码中找不到可利用的类时,这个时候考虑使用php中的一些原生类有些类不一定能够进行反序列化,php中使用了zend_class_unserialize_deny来禁止一些类的反序列化。
原生类常见的用法是用来进行XSS、SSRF、反序列化、或者XXE,今天就来好好总结一下。在CTF中常使用到的原生类有这几类1、Error2、Exception3、SoapClient4、DirectoryIterator5、SimpleXMLElement下面针对这几个类来进行总结。
soap是webServer的三要素之一(SOAP、WSDL、UDDI),WSDL用来描述如何访问具体的接口,UUDI用来管理、分发、查询webServer,SOAP是连接web服务和客户端的接口,SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。所以它的使用条件为:1.需要有soap扩展,需要手动开启该扩展。2.需要调用一个不存在的方法触发其__call()函数。3.仅限于http/https协议
类摘要:PHP手册
注意这个__call()方法public __call(string $name, array $args): mixed该方法被触发的时候,它可以发送HTTP或HTTPS请求。使用这个类时,php中的scapClient类可以创建soap数据报文,与wsdl接口进行交互。用法如下:
测试
kali开启监听nc -lvp 4444,执行该文件。【注意开启soap模块】
kali中就会返回监听到的内容
这道题目就是利用的PHP原生类进行反序列化来实现SSRF,因为在这里是没有给出可利用的类,所以就需要使用原生类。在解答此题的过程中,还需要利用到CRLF。CRLF是回车 + 换行(\\r\\n)的简称,进行url编码后是%0a%0d%0a%0d这道题的思路就是先利用ssrf访问flag.php然后post一个数据 toke=ctfshow和请求头X-Forwarded-For 就能把flag写到flag.txt中了。用到SoapClient类了。这个类中有个__call魔术方法,触发时会调用SoapClient类的构造方法。
使用get传入vip的参数即可。然后访问flag.txt就可以得到flag了。此处无报错,即是成功。
Error类是php的一个内置类,用于自动自定义一个Error,在php7的环境下可能会造成一个xss漏洞,因为它内置有一个 __toString() 的方法,常用于PHP 反序列化中。
另一种,Exception 内置类,与上述类似,只是换了一个类,将Error换成了Exception
其它与上述相同。
使用条件:open参数可控。
在同目录下创建一个test.php。然后执行上面的代码,就会发现test.php已经被删除了。
前提:需要有sqlite3扩展,且不是默认开启,需要手动开启
示例:
SimpleXMLElement暂无示例。
学习不止,脚步不停!欲想学安全,必先了解一番,我这里整理了300PDF文档,包括网络安全学习视频、全套工具包、渗透测试、技术文档、应急响应等,需要的关注我,私信回复“资料”获取!!
PHP反序列化的一些原生类的基础知识暂时学习到这里,后面关于PHP反序列化的还有phar反序列化,session反序列化。慢慢来吧。
Nginx+keepalived 实现高可用,防盗链及动静分离配置详解
作者:小不点啊
来源:www.cnblogs.com/leeSmall/p/9356535.html
一、Nginx Rewrite 规则
Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好,提高收录量及排名等。
语法:
rewrite <regex> <replacement> [flag]关键字 || 正则 || 替代内容 || flag标记
Rewrite规则的flag标记主要有以下几种:
- last :相当于Apache里的(L)标记,表示完成rewrite;
- break:本条规则匹配完成后,终止匹配,不再匹配后面的规则
- redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址
- permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址
last和break用来实现URL重写,浏览器地址栏URL地址不变
a) 例如用户访问www.dbspread.com,想直接跳转到网站下面的某个页面,www.dbspread.com/new.index.html如何来实现呢?我们可以使用Nginx Rewrite 来实现这个需求,具体如下:在server中加入如下语句即可:
效果图如下:
正则表达式说明:
b)例如多个域名跳转到同一个域名,nginx rewrite规则写法如下:
格式:
rewrite <regex> <replacement> [flag];关键字 || 正则 || 替代内容 || flag标记
说明:
- rewrite为固定关键字,表示开始进行rewrite匹配规则、
- regex部分是 ^/(.*) ,这是一个正则表达式,匹配完整的域名和后面的路径地址
- replacement部分是http://www.dbspread.com/$1,$1是取自regex部分( )里的内容。匹配成功后跳转到的URL。
- flag部分 permanent表示永久301重定向标记,即跳转到新的 http://www.dbspread.com/$1 地址上
比如http://www.dbspread.com/download/av123.rmvb 这个视频下载地址被其他网站引用,比如在www.test.com的index.html引用download/av123.rmvb就叫盗链,我们要禁止这种引用就叫做防盗链
在nginx的nginx.conf的server里面配置如下代码
三、Nginx 动静分离
Nginx动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。
1). WEB项目开发时要注意,将静态资源尽量放在一个static文件夹2). 将static静态资源文件夹放到Nginx可以取到的位置3). 页面要建立全局变量路径,方便修改路径4). 修改nginx.conf的location, 匹配静态资源请求
4.4 在nginx的nginx.conf中server节点新增静态资源分离的配置
对于Nginx基础配置,推荐之前的:后端实践:Nginx日志配置(超详细)
4.5 访问页面查看效果
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件
管理LVS负载均衡软件实现LVS集群节点的健康检查作为系统网络服务的高可用性(failover)
Keepalived高可用服务之间的故障切换转移,是通过 VRRP 来实现的。在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
说明:keepalived的主从切换和redis的主从切换是不一样的,keepalived的主节点挂了以后,从节点变为主节点,之前的主节点恢复以后继续做主节点。redis的主节点挂了以后,重新恢复以后变为从节点
说明:
虚拟ip(VIP):192.168.152.200,对外提供服务的ip,也可称作浮动ip192.168.152.130:nginx + keepalived master 主192.168.152.129:nginx + keepalived backup 从192.168.152.129:tomcat-8080192.168.152.129:tomcat-8081
环境准备:
centos6、jdk
虚拟ip(VIP):192.168.152.200,对外提供服务的ip,也可称作浮动ip192.168.152.130:nginx + keepalived master 主192.168.152.129:nginx + keepalived backup 从192.168.152.129:tomcat-8080192.168.152.129:tomcat-8081
nginx和tomcat的环境准备请查看我的前一篇关于nginx的文章
5.1 安装keepalived的步骤:
注:192.168.152.129(keepalived从节点) 与 192.168.152.130(keepalived主节点)先安装好nginx + keepalived
下载压缩包:
wget www.keepalived.org/software/keepalived-1.3.5.tar.gz
解压缩:
tar -zxvf keepalived-1.3.5.tar.gz
进入解压缩以后的文件目录:
cd keepalived-1.3.5
编译安装:./configure –prefix=/usr/local/keepalived系统提示警告 *** WARNING – this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.yum -y install libnl libnl-devel再次执行./configure –prefix=/usr/local/keepalived系统提示错误 configure: error: libnfnetlink headers missingyum install -y libnfnetlink-devel再次执行./configure –prefix=/usr/local/keepalived
make && make install
到此keepalived安装完成,但是接下来还有最关键的一步,如果这一步没有做后面启动keepalived的时候会报找不到配置文件的错误
Configuration file \’/etc/keepalived/keepalived.conf\’ is not a regular non-executable file
安装完成后,进入安装目录的etc目录下,将keepalived相应的配置文件拷贝到系统相应的目录当中。keepalived启动时会从/etc/keepalived目录下查找keepalived.conf配置文件
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
5.3 修改keepalived从节点192.168.152.129的/etc/keepalived/keepalived.conf配置文件
5.4 检查nginx是否启动的shell脚本
/usr/local/src/check_nginx_pid.sh
5.5 192.168.152.130(keepalived主节点)和 192.168.152.129(keepalived从节点)的nginx的配置文件nginx.conf
到这一步环境准备已完成,相关的配置也修改完成,下面我们来查看效果
5.6 配置hosts域名映射
注意:这里192.168.152.200 是keepalived里面virtual_ipaddress配置的虚拟ip
到这一步环境准备已完成,相关的配置也修改完成,下面我们来查看效果
5.7 分别启动192.168.152.129的两个tomcat
5.8 分别启动192.168.152.130(keepalived主节点)和
192.168.152.129(keepalived从节点)的keepalived的
启动命令:
可以看到keepalived和nginx都启动了
在浏览器输入www.dpspread.com域名访问
可以看到从节点变为主节点了
在浏览器输入地址www.dpspread.com访问,可以看到访问正常
可以看到主节点重新启动以后变为主节点了
之前变为主节点的从节点又变回从节点了
群晖NAS安装MySQL数据库及phpMyAdmin实现远程管理本地数据库
本文主要介绍如何在群晖NAS安装MySQL与数据库管理软件phpMyAdmin,并结合cpolar内网穿透工具配置公网地址,实现异地远程访问本地部署的phpMyAdmin详细流程。
群晖安装MySQL具有高效、安全、可靠、灵活等优势,可以为用户提供一个优秀的数据管理和分析环境。同时具有良好的硬件性能和稳定性,可以保障MySQL数据库的高效运行和数据安全.
而phpMyAdmin是用 PHP 脚本写的 MySQL 数据库的管理软件,可以使用 Web 图形模式直接管理 MySQL 数据库。可以用来创建、修改、删除数据库和数据表;导入和导出整个数据库;还可以完成许多其他的 MySQL 系统管理任务。
在群晖套件中心,我们搜索mariadb,出来搜索结果后点击安装
安装过程中,会提示设置密码,需设置密码
设置完成后,点击完成,开始安装
安装完成后,我们打开配置界面,开启TCP/IP连接,勾选后点击应用
上面我们安装了数据库后,需要修改数据表中的root用户的访问方式,使我们可以远程访问,所以我们需要安装phpMyAdmin来修改相关参数.
运行它我们需要安装PHP7.4版本环境,所以我们在套件中心搜索php 7.4 然后安装.
安装完成后,再次在套件中心中搜索phpMyAdmin,然后点击安装
安装完成后我们在\”已安装\”的套件列表中找到phpMyAdmin,打开
输入数据库用户名root 和我们上面安装数据库的时候设置的密码,登录
登录后点击mysql数据库
找到user表
双击修改表中Host字段下面的localhost值
改为%,表示不限制ip访问,这样修改后就可以远程mysql了
然后在群晖套件中心中找到安装的mariadb,停止,然后重新启动,让我们修改的配置生效
打开数据库连接工具,输入群晖的局域网ip地址,输入数据库用户名和密码,点击测试连接,出现successful!表示成功!
cpolar群晖套件下载地址:https://www.cpolar.com/synology-cpolar-suite,下载相应版本的套件
打开套件中心,点击右上角的手动安装按钮。
选择我们本地下载好的cpolar安装包。
点击下一步按钮
点击同意按钮
之后,一路点击下一步按钮安装完成即可。
在外部浏览器,我们通过群晖的局域网ip地址加9200端口,cpolar的Web管理界面,默认端口为9200,输入cpolar邮箱账号与密码进行登录
登录成功后,点击左侧仪表盘的隧道管理——创建隧道:
- 隧道名称:可自定义,注意不要与已有的隧道名称重复
- 协议:tcp
- 本地地址:3306
- 端口类型:临时随机TCP端口
- 地区:选择China VIP
点击创建
然后打开在线隧道列表,查看tcp协议的mysql公网连接地址.
接下来我们使用公网地址连接,打开mysql连接工具,输入公网地址和对应的公网端口,同时输入用户名和密码,点击测试连接,出现连接成功表示ok.
要注意的是,以上步骤使用的是随机临时tcp端口地址,所生成的公网地址为随机临时地址,该公网地址24小时内会随机变化。我们接下来为其配置固定的TCP端口地址,该地址不会变化,设置后将无需每天重复修改地址。
cpolar官网: https://www.cpolar.com
登录cpolar官网,点击左侧的预留,找到保留的tcp地址,我们来为MySQL保留一个固定tcp地址:
地区:选择China 描述:即备注,可自定义 点击保留
地址保留成功后,系统会生成相应的固定公网地址,将其复制下来
进入cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到我们上面创建的tcp隧道,点击右侧的编辑
修改隧道信息,将保留成功的固定tcp地址配置到隧道中
- 端口类型:修改为固定tcp端口
- 预留的tcp地址:填写官网保留成功的地址,
点击更新
隧道更新成功后,点击左侧仪表盘的状态——在线隧道列表,可以看到公网地址已经更新成为了固定tcp地址。
上面我们固定了mysql连接地址,现在我们使用固定的公网地址连接测试,打开mysql连接工具,输入公网地址和对应的公网端口,同时输入用户名和密码,点击测试连接,出现 successful! 表示ok,这样一个在群晖NAS的远程固定的mysql连接地址就设置好了.
同理,如果我们要实现远程访问phpMyAdmin的web页面对本地数据库进行管理,也可以为它配置公网地址:
首先,回到cpolar的Web管理界面(群晖的局域网ip地址加9200端口)
点击左侧仪表盘的隧道管理——创建隧道:
- 隧道名称:可自定义,注意不要与已有的隧道名称重复(本例使用的是 phpmad)
- 协议:http
- 本地地址:80
- 域名类型:随机域名
- 地区:选择China VIP
点击创建
隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网地址,然后复制地址
打开浏览器,使用上面任意一个 公网地址/phpmyadmin 如: https://476b7e33.r21.vip.cpolar.cn/phpmyadmin
然后访问,即可看到登录界面:
使用cpolar内网穿透生成的公网地址,成功实现了远程访问phpmyadmin的web页面对本地数据库进行管理。
由于以上使用cpolar所创建的隧道使用的是随机公网地址,24小时内会随机变化,不利于长期远程访问。因此我们可以为其配置二级子域名,该地址为固定地址,不会随机变化。
注意需要将cpolar套餐升级至基础套餐或以上,且每个套餐对应的带宽不一样。
登录cpolar官网,点击左侧的预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称:(本例使用的是 myphpmad 大家可以自定义)
保留成功后复制保留的二级子域名地址 myphpmad
回到cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的phpmad隧道,点击右侧的编辑:
修改隧道信息,将保留成功的二级子域名配置到隧道中
- 域名类型:选择二级子域名
- Sub Domain:填写保留成功的二级子域名 myphpmad
点击更新
更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了保留过的二级子域名名称,将其复制下来:
然后使用固定https地址+/phpmyadmin打开浏览器访问,同样访问成功,且域名不会发生变化:
https://myphpmad.vip.cpolar.cn/phpmyadmin/
以上就是如何在群晖NAS安装MySQL与数据库管理工具phpMyAdmin,并使用cpolar内网穿透工具为其分别配置固定公网TCP地址与http地址,实现随时随地远程连接本地局域网内MySQL与使用phpMyAdmin管理数据库的全部流程。感谢您的观看,有任何问题欢迎留言交流。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。