RCE
Remote Command/Code Execution

漏洞形成条件
存在可控变量
存在可利用的漏洞函数
代码执行
1 |
|

命令执行
1 |
|

RCE漏洞产生相关函数
PHP代码执行函数:
eval()//把字符串作为PHP代码执行assert()//检查一个断言是否为 FALSE,可用来执行代码preg_replace()//执行一个正则表达式的搜索和替换call_user_func()//把第一个参数作为回调函数调用call_user_func_array()//调用回调函数,并把一个数组参数作为回调函数的参数array_map()//为数组的每个元素应用回调函数
PHP命令执行函数:
system()//执行外部程序,并且显示输出exec()//执行一个外部程序shell_exec()//通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回passthru()//执行外部程序并且显示原始输出pcntl_exec()//在当前进程空间执行指定程序popen()//打开进程文件指针proc_open()//执行一个命令,并且打开用来输入/输出的文件指针
Java命令执行
java.lang.Runtime.getRuntime(.exec(command)
Java代码执行
Java中没有类似php中eval 函数这种直接可以将字符串转化为代码执行的函数,
但是有反射机制,并且有各种基于反射机制的表达式引擎,如:OGNL、SpEL、MVEL等,这些都能造成代码执行漏洞。
python代码执行
exec(string)# Python代码的动态执行eval(string)# 返回表达式或代码对象的值execfile(string)# 从一个文件中读取和执行Python脚本input(string)#Python2.x 中 input() 相等于 eval(raw_input(prompt)) ,用来获取控制台的输入compile(string)# 将源字符串编译为可执行对象
python命令执行
system()#执行系统指令popen()#popen()方法用于从一个命令打开一个管道subprocess.call #执行由参数提供的命令spawn #执行命令
一句话WebShell后门原理代码执行
PHP一句话
1 |
|
caidao原理:将写好的功能数据包,在图形化界面通过一句话木马去触发
靶场
黑盒功能点命令执行-应用功能
wp
访问靶场所给地址

ping 127.0.0.1结果

用管道符|去执行其他命令ping 127.0.0.1|ls,有弹窗报错

继续上一步操作,多了一个关闭提示框的选项,猜测这里进行了IP格式的前端验证

右键查看源码果然有js的验证

用burpsuite抓包就可以要过前端验证

ls命令查看当前目录文件,找到key

直接cat<key_148351137230146.php没有回显,应该是过滤了空格

过滤了空格。我们需要将空格用其他字符替代一下,这里有两种方法<和${IFS}


另外还有两个点
一是读文件还可以用tac

另一个是除了用管道符,还可以用;(分号)

白盒代码及命令执行-代码分析
wp
访问把场所给地址

1 | //源码 |
将源代码放在本地做功能测试
注意要把首尾的&替换成””,并用echo输出,得到加密内容

1 | //这里的考点 |
这里是通过$_REQUEST传参,可以接收cookie,get,post的值
我们这里采用get传参

cat<key

右键查看源码,得到key值

echo ``测试
1 |
|
黑盒层RCE漏洞检测-公开漏洞
wp
访问把场所给地址

随便输入登录信息

Google搜索公开的exp,找到复现文章,利用burp抓包,放到Repeater里,根据搜索的文章改参数
修改POST的路径和值

根据题目说key在根目录下,于是利用ls /,将改过的数据包发送,找到key

再用cat</key.txt即可,注意是/目录下

参考
https://blog.csdn.net/LRedAnt/article/details/103701507




