第七天作业
一、文件上传漏洞
1.文件上传防御手段及绕过手段
防御方法
1.检查文件上传路径 ( 避免 0x00 截断、 IIS6.0 文件夹解析漏洞、目录遍历 )
2.文件扩展名检测 ( 避免服务器以非图片的文件格式解析文件 ),验证文件扩展名 通常有两种方式 : 黑名单和白名单 .
3.文件 MIME验证 ( 比如 GIF 图片 MIME为 image/gif,CSS 文件的 MIME为 text/css 等 ) 3. 文件内容检测 ( 避免图片中插入 webshell)
4.图片二次渲染 ( 最变态的上传漏洞防御方式 , 基本上完全避免了文件上传漏洞 )
5.文件重命名 ( 如随机字符串或时间戳等方式 , 防止攻击者得到 webshell 的路径 )
6.隐藏上传路径
绕过手段
1.前端JS检测绕过:攻击者可以通过禁用浏览器的JavaScript或使用Burp Suite等工具拦截并修改请求来绕过前端JS检测
2.Content-Type检测绕过:通过修改HTTP请求中的Content-Type字段,使其符合服务器允许的类型,从而绕过检测
3.黑名单绕过:使用黑名单中未列出的文件扩展名,如php3、php5、phtml等,或者利用服务器的解析漏洞来绕过黑名单限制
4..htaccess文件绕过:上传一个.htaccess文件,配置服务器将特定类型的文件(如图片文件)作为PHP文件解析,然后上传一个包含恶意代码的图片文件
5.大小写绕过:在Windows系统中,文件名不区分大小写,因此可以通过修改文件扩展名的大小写来绕过检测
6.空格、点、特殊字符绕过:在文件名中添加空格、点或特殊字符(如::$DATA在Windows中)来绕过文件类型检测
7.0x00截断绕过:在文件名中插入0x00字节,可以截断文件路径,从而绕过文件类型检测。这种方法需要特定的PHP版本和magic_quotes_gpc配置
8.文件头检测绕过:通过添加合法的文件头(如GIF89a)来伪装文件类型,从而绕过基于文件内容的检测
9.WAF绕过:利用WAF的规则漏洞,如边界字符串变异、引号变换、垃圾数据溢出等方法来绕过WAF的检测
2.常用一句话木马
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。在渗透过程中,渗透人员会上传一句话木马(简称Webshell)到目前web服务目录继而提权获取系统权限。
常用一句话木马:
<?php @eval($_POST['pass']);?>
<?php system($_GET['cmd']);?>
<%eval request ("pass")%>
<%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%>
3.三种webshell管理工具的使用方法
3.1 antsword(蚁剑)
该处通过使用一句话木马进行演示,以pikachu靶场作为攻击目标。
首先我们需要先制作一个一句话木马文件内容如下,通常需要结合文件上传漏洞,上传至目标web后台。
接下来打开蚁剑,右键空白处选择添加数据。
在url地址处填写一句话木马的上传地址,连接密码处输入一句话木马中设置的密码,点击测试连接,可以看到连接成功提示,点击添加。
双击我们添加好的数据可以看到,我们成功连接到了webshell。
抓取网络数据包进行流量分析:
3.2 godzilla(哥斯拉)
启用哥斯拉
利用哥斯拉,点击管理-生成,生成木马文件gsl.php,并通过文件上传漏洞等上传至网站后台
点击目标-添加,配置burp suite代理,并尝试连接木马文件获取webshell
双击我们添加的记录,即可进入到webshell,可以进行命令执行,文件管理等多项操作
通过burp suite可以抓取到通过哥斯拉连接到木马文件的流量数据包
3.3 behinder(冰蝎)
在命令行中输入命令java -jar Behinder.jar打开冰蝎
点击传输协议,选择加解密协议名称,该加解密协议用来对木马文件进行加解密,点击生成服务端会生成木马文件并通过文件上传漏洞等上传至网站后台,服务端会先对木马文件先进行解密再连接。
点击代理,设置代理服务器为burp suite
双击我们添加的记录即可进入pikachu靶场的webshell
通过burp suite可以对连接木马文件的流量进行抓包,可以进行流量特征分析。
4.文件上传无回显如何查找webshell地址
1.检查服务器日志:通过查看HTTP请求日志,特别是在上传文件失败或成功的记录中,可能会发现可疑的URL或文件路径。这些日志通常会记录客户端的请求信息,包括上传文件的路径和名称,从而帮助定位webshell的位置。
2.异常检测:有些webshell在运行时会抛出错误或异常,通过监控网站的服务器错误页面,可以寻找异常报告。这些异常信息可能会包含webshell的文件路径或相关信息。
3.使用网络数据分析工具:通过Wireshark等网络数据分析工具,可以捕获上传webshell的IP地址和相关请求信息。这些工具可以帮助你追踪到webshell的具体位置。
4.利用历史HTTP请求:如果上传的webshell文件名或路径在之前的HTTP请求中出现过,可以通过搜索历史请求来找到webshell的完整路径。
5.利用文件扫描工具:如findWebshell等基于python开发的webshell检测工具,可以扫描服务器上的文件,识别并定位webshell文件。
6.网站安全检测服务:利用百度安全指数、百度云观测等提供的网站安全检测服务,可以对网站进行全面的安全检测,包括webshell的检测和定位。
二、upload-labs靶场
1.第六关
strrchr() 函数(在php中)查找字符在指定字符串中从右面开始的第一次出现的位置,如果成功,返回该字符以及其后面的字符,如果失败,则返回 NULL。
str_ireplace() 函数使用一个字符串替换字符串中的另一些字符。
首先查看页面源代码,发现代码中有删除文件名末尾的点的代码和收尾去空的代码,由于这些代码只验证一次,于是可以通过在文件名末尾加两个点和一个空格进行绕过。
将生成的木马文件进行上传,由于不能直接在文件名后面添加点和空格,于是使用burp suite进行抓包,对文件名进行修改如下
可见上传成功
2.第七关
分析源代码,发现源代码中没有进行收尾去空,则尝试在文件名后加空格
通过burp suite进行抓包,修改文件的后缀,在后面添加空格再进行上传,可以发现上传成功。
3.第八关
分析源代码,发现没有对文件名末尾的点进行删除的代码,于是尝试在文件名末尾添加点进行上传。
打开burp suite,抓取上传文件的包,修改文件名,在文件名后面添加点,可以发现上传成功。
4.第九关
查看源代码,发现没有去除字符串::$DATA。
在window的时候如果文件名+"::$DATA"
会把::$DATA
之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA
之前的文件名,他的目的就是不检查后缀名。
例如:"phpinfo.php::$DATA"
Windows会自动去掉末尾的::$DATA
变成"phpinfo.php"
抓取上传的数据包,尝试在文件名后添加::$DATA,可以发现上传成功。
5.第十关
查看第十关源代码,发现过滤规则与第六关一样,则采用相同的上传方式。
抓取上传数据包,修改文件名,添加点-空格-点,上传成功。