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