REC代码及命令执行代码全解
在Web应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。
代码执行
代码执行的危害
执行脚本代码 脚本能干嘛 它就能干嘛
案例(PHP环境)
假设对方存在这样的一个代码执行漏洞 就可以用代码去攻击它
通过evel去上传一个webshell,然后去控制它
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
当evel换成system后,就能够执行系统命令,而操作命令取决于操作系统
执行系统命令(当前系统为windows)
漏洞形成条件
代码层面
-
可控变量
通过参数值改变值
-
漏洞函数
使用的那一个函数对变量进行操作,例如evel()与system() ,他们产生的漏洞一个是代码执行,一个是系统命令
漏洞检测
白盒测试
- 代码审计
黑盒测试
-
扫描工具
-
公开漏洞
-
手工看参数值及功能点
判断他的数据与功能是否相同
案例(墨者靶场)
墨者靶场黑盒功能点命令执行-应用功能
打开之后 出现界面
当我输入127.0.0.1
出现结果
这个网站的功能 类似于系统的ping命令,这个地方就有可能出现命令执行漏洞
当我们知道存在漏洞的可能性之后,有一下几个步骤
-
分析是什么操作系统
-
操作系统不一样,系统命令不一样,通过抓包获取操作系统类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91Ajnb3Z-1629175278798)(D:\Desktop\小迪说安全\image-20210817111349142.png)]
-
-
当确定操作系统之后,手工进行测试
-
我们开始进行管道服务(一条命令执行多条命令)
-
利用burp进行抓包
-
获取到目录
-
读取key文件,获取key
-
总结
根据功能去判断它可能存在这样的漏洞
墨者靶场白盒代码及命令执行-代码分析
-
查看源码
-
在网上找一个线上环境,运行一下这个环境即可
-
获取key
墨者靶场黑盒层RCE漏洞检测-公开漏洞
Webmin是目前功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器 访问Webmin的各种管理功能并完成相应的管理动作。
-
网站搜索webmin漏洞
-
复现漏洞即可 https://www.cnblogs.com/whoami101/p/11465877.html
javaweb-Struts2框架类RCE漏洞-漏洞层面
通过响应信息查看情况
搜索漏洞复现即可
防御
-
敏感函数禁用(php为例)
- system 执行外部程序并显示输出
- exec 执行一一个外部程序
- shell_exec 通过hel环境执行命令,并将完整的输出以字符串的方式返回
- passthru 执行外部命令并显示原始输出
- pcntl_exec 在当前进程空间执行指定程序
-
变量过滤或固定
-
WAF产品
例)
-
system 执行外部程序并显示输出
-
exec 执行一一个外部程序
-
shell_exec 通过hel环境执行命令,并将完整的输出以字符串的方式返回
-
passthru 执行外部命令并显示原始输出
-
pcntl_exec 在当前进程空间执行指定程序
-
变量过滤或固定
-
WAF产品