1-RCE代码及命令执行漏洞
RCE
- remote code/command execute:远程代码/命令执行漏洞
- 在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用 代码或命令执行函数去处理
- 比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞
- 同样调用系统命令处理,将造成命令执行漏洞
- 即RCE漏洞是两个漏洞:
- 代码执行漏洞 # 针对后端语言!
- 命令执行漏洞 # 针对系统!
代码执行
脚本
- PHP
- Java
- Python
产生
- web源码
- thinkphp
- eyoucms
- wordpress
- 中间件平台
- Tomcat
- apeche struts2
- redis
- 其他环境
- php-cgi
- jenkins-cl
- java RMI
监测
- 白盒:代码审计
- 黑盒:漏扫工具、公开漏洞、手工看参数及功能点
- 参数上加脚本代码探测脚本类型,同时可以看能否执行
防御
- 敏感函数禁用
- 变量过滤或固定
- waf产品
命令执行
系统
- windows、linux
- 不同操作系统的指令/命令是不一样的
产生
- web源码
- nexus
- webmin
- elasticsearch
- 中间件平台
- weblogic
- apeche
- 其他环境
- postgresql
- samba
- supervisord
监测
- 白盒:代码审计
- 黑盒:漏扫工具、公开漏洞、手工看应用功能点决定
防御
- 敏感函数禁用
- 变量过滤或固定
- waf产品
漏洞形成条件
- 可控变量、漏洞函数
- 看网站功能:如果网站拓展功能多,比如查询接口,其他服务什么的,可能会有RCE
php示例
eval()函数
- eval是evaluate的简称
- 这个函数的作用就是把一段字符串当作PHP语句来执行,一般情况下不建议使用,容易被黑客利用
- 利用:
- eval(phpinfo()😉
- eval(echo 123;)
- 写入后门文件
system()函数
- 执行外部程序并且输出资料,用来执行指令,并输出结果
- 利用:
- system(ipconfig) windows
- system(ifconfig) linux
- system(dir) windows
- system(ls) linux(windows不识别ls命令)
快速判断操作系统
- 抓数据包(ubuntu是linux系统)
- ping看ttl
管道符
- linux:|
linux:pwd显示当前工作目录
cat<filename ?输出重定向,可以代替空格
eval(echo $_REQUEST[a]
),?如果去掉echo和反引号就会编程代码执行,有就是命令执行,反引号就是把echo的输入当作命令执行,反引号内的字符串,会被解析成os命令,回尝试将其中的内容作为shell命令执行,并将其输出信息返回,win和linux都能用,不过代码写的不一样