【RCE集合】RCE漏洞的原理、出现地方、相关命令、函数解析、利用详细的过程
【RCE集合】RCE漏洞的原理、出现地方、相关命令、函数解析、利用详细的过程
目录
4.2.3、“||” commandA || commandB
4.2.4、“&&” commandA && commandB
一、介绍:
利用RCE漏洞,有两种执行方式,向后台服务器远程注入操作系统命令(即远程命令执行RemoteCommand Exec)或者远程代码执行(Remote Code Exec),顾名思义就是远程执行,通过上述的远程注入后,从而执行系统命令,进而控制后台系统。
二、原理:
我在软件工程等课程中都有看到,为满足用户远程执行等功能(如路由器、防火墙、入侵检测等设备的web管理界面上ping操作的web界面),在设计的时候都会设置提供给用户的接口。如果对用户的输入没有做严格的安全控制,这些接口可能会被攻击者利用提交远程执行命令或代码,进一步控制了整个后台系统。
三、漏洞出现
3.1、代码执行:
3.1.1、脚本:
PHP、java、python
3.1.2、产生:
web源码:thinkphp、eyoucms、WordPress
中间件平台:Tomcat、Apache Struts2、Redis
其他环境:PHP-CGI、Jenkins-CI、Java RMI
3.2、命令执行:
3.2.1、系统:
Linux、windows
3.2.2、产生:
web源码:Nexus、Webmin、ElasticSearch
中间件平台:weblogic、Apache
其他环境:postgresql、samba、supervisord
四、命令:
4.1、执行系统命令的函数(PHP中)
4.1.1、system()
执行shell命令,向dos发送一条指令,如system("pause")可以实现冻结屏幕,便于观察程序的执行结果;system("CLS")可以实现清屏操作;而调用color函数可以改变控制台的前景色和背景。
int system(const char *command)
4.1.2、passthru()
只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上
4.1.3、exec()
在PHP中,执行一个外部程序, exec() 执行 command 参数所指定的命令。
语法: exec(string $command, array &$output = ?, int &$return_var = ?): string
4.1.4、shell_exec()
是PHP中的一个内置函数,用于通过shell执行命令并以字符串的形式返回完整的输出
4.1.5、popen()
通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。pclose() 函数关闭标准 I/O 流,等待命令执行结束,然后返回 shell 的终止状态。如果 shell 不能被执行,则 pclose() 返回的终止状态与 shell 已执行 exit 一样
语法:
FILE * popen ( const char * command , const char * type );
int pclose ( FILE * stream );
4.1.6、proc_open()
执行一个命令,并且打开用来输入/输出的文件指针
类似 popen() 函数, 但是 proc_open() 提供了更加强大的控制程序执行的能力。
语法:resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )
4.1.7、pcntl_exec()
在当前进程空间执行指定程序
语法:void pcntl_exec ( string $path [, array $args [, array $envs ]] )
4.2Windows系统命令拼接
4.2.1、“|”:commandA | commandB
管道符,A命令的标准输出,作为B命令的标准输入
4.2.2、“&” commandA & commandB
先运行输出命令A,然后运行输出命令B
4.2.3、“||” commandA || commandB
先运行输出命令A,如果失败则运行输出命令B
4.2.4、“&&” commandA && commandB
如果运行输出命令A成功,则继续运行输出命令B
(命令A未执行成功,则命令B不执行)
(迟来的祝愿:愿远方只有快乐,挺帅一小伙子的,和我差不多帅,嘻嘻嘻)
五、利用过程:
5.1、pikachu(RCE-exec"ping")
5.1.1、 分析:
可以看见给用户提供了一个ping操作的web界面
当输入目标网址后,点击提交,服务器后台会对输入的地址进行了ping测试,并返回了测试结果
www.iqiyi.com
www.iqiyi.com|dir
大多数操作系统(包括DOS及Windows)中dir命令基本上会列出目录中的文件及子目录的名称,也可以列出其文件大小,创建时间等相关信息,并且列出所在的磁盘、可用空间等信息。dir命令也可以寻找其文件名称符合特定条件的文件。
Linux中ls 命令显示当前目录的内容
127.0.0.1 & ipconfig
111 & whoamI
得到设备名,以及用户名
5.1.2、漏洞利用:
查看权限
Linux下的话使用 ls -al // a表示全部的包括u,g和o,l表示列出相关信息
windows下 attrib 1.txt // 查看当前目录下1.txt的属性,包括读写操作属性
如果当前目录有写入权限,就写入木马
反之,没有写入权限,再进行反弹测试
如果失败,寻找一个可写入可执行的文件(777),并利用RCE漏洞编写一个bash反弹脚本
再进行监听、并利用RCE漏洞执行脚本
5.2、 pikachu(RCE-exec"evel")
5.2.1、 分析:
要输入普通字符串,没什么大用(尝试试试php函数)
再尝试输入一个php函数,看能不能被执行
phpinfo();
没有对用户的输入做严格的过滤,导致被当做PHP脚本执行了,产生了漏洞
5.2.2、漏洞利用:
查看数据包,可以知道表单的参数是txt
我试的时候,直接复制粘贴过去会报错
连接失败改错
我再尝试把这个URL编码的大写都改为了小写,然后就成功了
(再次查看值的时候自己变了大写)
利用system()函数, 或者shell_exec()函数,再写反弹脚本
也可直接写在服务器上后,在执行命令下载脚本(wegt)
- 点赞
- 收藏
- 关注作者
评论(0)