前提:
本文中的以xshell命名的均为以密码为admin的一句话木马,而shell命名的则是由冰蝎工具生成的木马,由于upload-labs受apache和php的影响,需要多准备一些php的版本和apache环境,不然可能难以完成实验,若遇到问题可私信我,我会尽我所能帮助您。
若实验中遇到与我一样的问题(报错)可参考:upload-labs实验过程中遇到的问题-CSDN博客
pass-01:js前端验证
测试性的上传一个一句话木马,发现被拦截了,而且根据推测大概率是前端检测,于是我们就可以着手上传啦。
先上传一个由shell.php改后缀的shell.jpg文件,然后再通过bp抓包改变其后缀。
此时返回一个破裂的图片,我们就可以猜测是成功了,但我们不知道他路径,这里我们可以直接将图片拖拽到新标签页,然后就可以访问其文件了,当返回的内容为一片白页面,这大概率说明我们成功了。
启动我们的冰蝎,进行连接。
连接成功之后就可以进行,操作了,蚁剑略。
pass-02:后端验证(mine绕过)
正常上传一个shell.php,提示文件类型不正确,一般提示这个信息,猜测大概率是后端验证文件后缀名,但不知道是不是真,一般情况下我们也不知道它禁了哪些后缀,所以我们先尝试01的方法。
发现可以,那太没意思了,我们可以尝试换一种方法,直接上传php文件,因为是后端验证,主要是验证Content-type的值,所以我们改Content-type值试试。
发现上传成功,那我们就直接连接咯。
pass-03:过滤不全
日常上传一个shell.php,之后就不多说了,然后发现设置了黑名单,而且还告诉了我们,然后根据观察和我们的知识我们可以知道,这个黑名单太少了,过滤不全,因此我们是可以绕过的。
这里我们上次一个xshell.php,然后通过bp抓包,修改其后缀为php3.
然后我们就可以发现成功了,然后我们再启动蚁剑连接即可。
这里我尝试过冰蝎,但不知道为什么上传成功了,但却连接不了。同时这题也可能会出现上传成功后访问文件页面时会直接下载,这是因为有可能是apache配置文件没配置php3或者php版本不适配等问题。具体可自行上网搜索。
原理:php3之后能以php执行,我猜测是因为这个系统是apache+php的环境中,管理员为了兼容旧版本的php而写了允许php2-6的代码,而又没过滤干净,导致的,仅个人猜测,如有错误欢迎指正。
pass-04:黑名单不全(htacess/图片码绕过)
正常上传一个php,发现文件不允许上传!经过尝试发现之前的方法好像都不可以,于是我就想到上传htacess文件试试,然后发现成功了。
于是我们就可以构造一个.htaccess然后再上传我们的一句话木马。
然后我们就可以尝试去连接一下试试,发现成功了。
或者我们也可以使用另外一个方法:使用图片木马的方式。
先使用画图工具,随便画一幅图,越简单越好。
然后用记事本打开,再将我们的木马放在末尾。
保存,这样我们的图片木马就制作完成了。
于是就和之前一样上传,发现是可以的。
pass-05:.user.ini绕过
日常上传php文件,发现不行,于是就依次尝试上面的方法,都发现不行,连htacess都被禁了,于是我看了一下提示,提示存在readme.php文件。存在这个文件说明可以使用.user.Ini文本,user.ini是php的一种配置文件
创建一个.user.ini文本,然后在记事本上写上
auto_prepend_file=xshell.jpg
然后上传到服务器上,之后再上传我们的xshell.jpg。这样只要我们通过访问readme.php就能让user.ini执行我们的xshell.jpg里的代码。
pass-06:(大写绕过)
先上传php然后上面的方法都试过也不行,于是就查看了一下提示。
经过分析,可以知道采用了黑名单,而禁php时,禁了pHp没有禁全大写,于是我们可以去尝试一下使用.PHP
然后发现500状态码,这个之后测试了一下应该是apache的版本问题,换nginx时就可以正常访问。
然后就可以正常连接了。
使用冰蝎工具也是一样的,往后就不演示。
先重新重新一个别的加密木马。因为之前的那个aec貌似被屏蔽了,无法进行连接,所以我们要新建一个不一样的加密方式的php文件,然后改后缀,上传连接即可。
pass-07:(空格绕过)
这题的提示和上一题一样。
但是当我们上传.PHP时他会提示,此文件不允许上传,那么我们就可以猜测他应该是使用了大小写转换,那么我们怎么办呢?我们就尝试末尾加.不行,加空格没想到上传成功了,之后就可以连接了。
若出现上传错误,有可能是php版本问题,可以尝试更换一个低版本的php。
pass-08:(.绕过)
这题先还是和上一题一样先测试空格,发现不行
然后测试.发现成功了。
pass-09:(::$DATA绕过)
这关我们和上两题一样测试,发现都不行,于是我就想他们两个如果结合在一起是不是可以?没想到真行。
但是发现我们的文件名没有php了,进行连接果然不可以。
然后我们就可以尝试一下使用::$DATA, ::$DATA的作用是保留我们的后缀名。
然后就会弹出403,但没关系,我们连接一样是可以的。
pass-10:(.空格.绕过)
这题当后面加.时会弹与其他报错不一样的信息,于是就在想突破口应该就是.后面加东西了,就尝试了. .没想到成功了,上一题没成功这题成功了。
pass-11:双写绕过
直接上传php,发现成功了,但是后缀不见了。
那么就可以考虑可不可以使用双写绕过,发现是可以的。
之后就是连接了。
pass-12:(GET 的00截断)
当我们上传php时,显示只允许上传jpg,本来想进行常规的前后端修改绕过,但抓包发现了../upload,这就能联想到使用00截断。
上传成功,虽然当我们访问的图片的时候显示404,但不影响我们的连接,因为我们使用了00截断,所以php后面的内容是没有记录到服务器的,因此才会显示404.
pass-13:(POST的00截断)
上传php时和上一题一样,但是不一样的是这次的../upload不在url中了,而是独立了出来,那么就不能直接使用%00,而是要将其转化为url还的编码。
先构造好我们的%00语句,然后选择%00语句右键,根据图片选择URL-decode,这样转化后的%00就和我们上一题的一样了。
pass-14:(图片码+include.php执行)
这题,题目说了是直接上传图片码,图片码制作上面04题已给出,后面也有制作流程。
但是当我上传图片码时发现文件未知,上传失败,依据经验大概率知道是哪出现问题了。我们使用抓包在头文件处加上GIF89a,这样就能上传成功啦。
虽然上传成功了,但是他是没办法执行的,因为他返回的是一个gif图片文件,然后这里又有一个知识点,那就是php中的include包含文件代码。
根据题目的提示我们就可以知道存在一个include.php,于是就访问它,发现了一个可以传参数的file,然后就可以利用它执行的图片码了。
这里其实就已经完成了本题,但题目说要png和jpg文件也要完成访问。
那么就制作一个png图片码。
先使用系统自带的画图工具,简单的画一个图片,然后保存为png格式,之后使用010或者winhex工具在末尾添加一句话木马(如果使用记事本可能会破坏原文件的格式),然后就可以上传了。jpg也是一样的,就省略了。
pass-15:(图片码+include.php)
上传一个图片码。
和上一题一样:利用include.php去执行图片码。
pass-16:图片码类型
若遇到上传后一片空白可前往问题合集:
这题也是图片码的解决方法。
pass-17:图片码的二次渲染
这题一样是图片码的题,但是我们上传后虽然上传成功了,但是连接不了,看了提示说是二次渲染,将上传后的文件下载下来后发现一句话木马确实不见了,所以就只能使用二次渲染,因为二次渲染制作比较麻烦,所以我直接使用大佬的了,若需要可私信我。
pass-18:(利用时间差执行一句话木马)
这题提示直接就是代码审计。
可以知道如果上传的文件不是jpg,png和gif就会被删除,但是这里会存在一个代码的时间差,所以我们就可以利用其漏洞,在目标机是生成一个一句话木马。
然后上传,使用bp抓包,根据下面的指示走。
然后开始攻击,这样在我们的后台就可以看见会持续的上传和删除1.php。
然后就可以去尝试访问,当访问成功时,就会自动生成一个一句话木马,就可以连接了。
pass-19:代码审计(图片码)
这题还是需要代码审计。
我认为本质上就是一个白名单过滤,然后将上传的文件重命名,
但按18题的思路是没有实现,不知道为什么。
所以我就直接按最省事的,根据白名单肯定是可以上传图片码的,后续解决再回来修改。
pass-20:路径构造绕过
这题很明显就是可以在前端修改上传的文件名。
根据上面的测试,就可以尝试去在php后面加.能不能绕过,经过测试发现加/.是能绕过检测的。
pass-21:代码审计(白名单+mine绕过+构造数组路径绕过)
最后一题需要的是代码审计。
这里的白名单是jpg,png,gif,而且需要一个数组,只要我们的数组最后的文件名为三则中的一个就即可,但是第二个数据的下标不能为1,因为系统会减1导致覆盖了第一个数据。所以使用bp抓包,然后修改数据。
原始:
修改后:
这样我们就上传成功了。
总结:目前文件上传漏洞的这个靶场主要是运用,前端文件名绕过,mine后端文件名绕过,大小写绕过,空格绕过,图片码绕过(前提是要存在include.php文件),php与apache版本漏洞绕过,空格绕过,二次渲染等技术。
主要防范措施仍然是要加强白名单的校验,同时能重新生成一个让攻击者无法猜到的文件名。
持续更新中,请见谅。