命令\代码执行漏洞与反序列化

一、命令与代码执行原理

网站在开发时对外部输入的参数未经严格过滤,并使用危险函数导致引入的参数被当作命令或代码执行。

二、系统命令与代码执行的函数

系统命令执行函数:

  • assert()
  • system()
  • passthru()
  • exec()
  • pcntl_exec()
  • shell_exec()
  • popen()
  • proc_open()
  • ``(反单引号)

代码执行函数:

  • eval()
  • assert()
  • call_user_func()
  • base64_decode()
  • gzinflate()
  • gzuncompress()
  • gzdecode()
  • str_rot()

三、命令执行测试方法

拼接命令:&  &&  |  || ;

例:ping 127.0.0.1 & ver

代码层面:

<?php
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){   // 检查是否提交了表单且 'ipaddress' 参数不为空
    $ip=$_POST['ipaddress'];  // 将 'ipaddress' 参数的值赋给变量 $ip


    if(stristr(php_uname('s'), 'windows')){  // 判断操作系统是否为 Windows
       
        $result.=shell_exec('ping '.$ip);  // 在 Windows 系统下执行的 ping 命令
    }else {
        $result.=shell_exec('ping -c 4 '.$ip);  // 在非 Windows 系统下执行指定次数的 ping 命令
    }

}
?>

例:开发使用eval()函数

代码层面:

<?php
if(isset($_POST['submit']) && $_POST['txt']!= null){ // 检查是否提交了表单且文本输入不为空
    if(@!eval($_POST['txt'])){  // 尝试执行用户输入的代码,若执行失败
        $html.="<p>你喜欢的字符还挺奇怪的!</p>"; // 输出提示信息
    }
} 
?>

四、命令执行漏洞经常存在的地方

  • 路由器、防火墙、自动化运维平台等一些硬件设备界面,它们通常在网络调试中会留有网络测试窗口。
  • 中间件、系统框架等已知漏洞,在百度上都可以搜到以往的命令执行漏洞。
  • 只要带参数的地方都可能出现命令执行漏洞。

五、struts2框架命令执行漏洞复现

1、怎么判断网站是否为struts2框架?

参考:红队第2篇:区分Spring与Struts2框架的几种新方法-腾讯云开发者社区-腾讯云 (tencent.com)

扩展名判断:.action  .do

报错判断:访问不存在的资源报错判断

抓包判断

2、struts全版本漏洞检测工具探测

工具链接:百度网盘 请输入提取码

六、反序列化漏洞

反序列化漏洞就是将一个对象转化为可以传输的字符串形式(将恶意代码构建的对象转化为字符串的形式),利用反序列化的函数(serialize()  序列化函数)(unserialize()  反序列化函数),转化为原有的对象形式进行注入攻击。

1、序列化漏洞的利用条件

序列化和反序列化的内容是用户可以控制,且后台不正当的使用了PHP中的魔法函数就会导致安全问题

  •         序列化内容用户可有控制
  •         后台使用了不正当的PHP魔法函数

2、常见的魔法函数

  • __construct()当一个对象创建时被调用
  • __destruct()当一个对象销毁时被调用
  • __sleep() 在对象在被序列化之前运行
  • __toString()当一个对象被当作一个字符串使用
  • __wakeup将在序列化之后立即被调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值