文件上传漏洞原理与实战——upload-labs靶场
Pass-01 前端校验
![image-20220706164802834](https://i-blog.csdnimg.cn/blog_migrate/0bc2fa1aa98ee164ca4283e9df585d73.png)
题目让上传一个webshell到服务器,先上传一个正常图片1.png看看
![image-20220706165015410](https://i-blog.csdnimg.cn/blog_migrate/75c2ff82e82106a2ed2111959e9be83f.png)
可以正常上传,在上传一个a.php试一试
![image-20220706165208000](https://i-blog.csdnimg.cn/blog_migrate/ae8a05acc4e5e26d67c7feda2bce6820.png)
可以看到弹窗提醒只能上传jpg,png,gif类型的文件,不能直接上传a.php。
![image-20220706165335440](https://i-blog.csdnimg.cn/blog_migrate/a4f14c80bbe548ed91b4831156e0c969.png)
a.php文件是一个一句话木马。
弹窗应该是前端js写的一个弹窗,我们可以绕过。F12打开开发者模式。
选择上传功能点区域,查看网页源代码,删除return checkFile()函数,就可以上传了。
![image-20220706165921972](https://i-blog.csdnimg.cn/blog_migrate/54534f91e611bfbd1a2906e3946321e2.png)
上传成功:
因为我们上传的不是正常的图片,所以显示的是裂开的图片。
右击复制图片链接,在新标签页中打开。
![image-20220706170244398](https://i-blog.csdnimg.cn/blog_migrate/ee0aa949a258712138ddab3214341b34.png)
测试时先看看phpinfo能否执行,如果能显示说明这个木马是没有问题的,再用蚁剑去连接。不要上传完就急着用蚁剑去连接。
![image-20220706170347625](https://i-blog.csdnimg.cn/blog_migrate/2c8b7a1074cf5a89bac96b8908d9aec8.png)
**echo “
”;**表示的是格式化输出,能够使看出来方便很多。
![image-20220706170848124](https://i-blog.csdnimg.cn/blog_migrate/7a3391fe2b906ee66783529b6c31063a.png)
可以在F12设置里禁用JavaScript
源代码:前端js校验
Pass-02 MIME类型检测绕过
![image-20220706171735953](https://i-blog.csdnimg.cn/blog_migrate/c41b062affcfb920d130f11392a5032c.png)
先看源代码
采用burp来抓包
抓包后改为允许的文件类型。因为检测的不是我们的后缀,所以我们需要把type改掉
将type修改为jpeg,png或者gif都可以,记得image/jpeg和冒号中间有一个空格要保留
然后放掉包,上传成功
![image-20220706173709943](https://i-blog.csdnimg.cn/blog_migrate/5aee4453dcc85c29d2aa75a2a251c193.png)
剩余步骤与01相同,右击复制图片路径,在新页面打开然后查看phpinfo和ipconfig。然后可以用蚁剑去连接。
Pass-03 黑名单
一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些非法的字符或者字符串,当数据包中含有符合该数组或列表的字符串时,即认定该数据包是非法的。
![image-20220706174546187](https://i-blog.csdnimg.cn/blog_migrate/4ac57e335d599f3db970e4ecca4f96b7.png)
无法直接上传:
![image-20220706190246298](https://i-blog.csdnimg.cn/blog_migrate/c928aa6df570396ba4797aa29d8ddb08.png)
我们可以用**.phtml和.php3**文件上传
![image-20220706191154817](https://i-blog.csdnimg.cn/blog_migrate/2ce2da199af92320abf30a0cf2a17b90.png)
也可以用burp去进行拦截,并修改后缀
想要.php3和.phtml文件生效必须修改phpstudy配置文件,在httpd-conf文件中
![image-20220706193640941](https://i-blog.csdnimg.cn/blog_migrate/fa9500116793e7730277e62e5540fb37.png)
添加后缀名,并且将开头的#删除。
在Windows的时候如果文件名 +“:: D A T A ” 会 把 : : DATA”会把:: DATA”会把::DATA之后的数据当初文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名
例如:“phpinfo.php:: D A T A ” W i n d o w s 会 自 动 去 掉 末 尾 的 : : DATA”Windows会自动去掉末尾的:: DATA”Windows会自动去掉末尾的::DATA变成“phpinfo.php”
![image-20220706194404137](https://i-blog.csdnimg.cn/blog_migrate/da43929686a1f124f45baf507cff4801.png)
上传失败这是因为源代码中有去除::$DATA的操作
我们可以通过双写来解决这个问题
上传成功:
![image-20220706194814711](https://i-blog.csdnimg.cn/blog_migrate/2608268aa2dd87371086a67009d1e5a8.png)
::$DATA
:: D : : D:: D::DATAATA
源代码的意思是碰到:: D A T A 就 将 他 变 成 空 , 我 们 按 照 第 二 个 将 他 双 写 后 , 他 会 查 找 : : DATA就将他变成空,我们按照第二个将他双写后,他会查找:: DATA就将他变成空,我们按照第二个将他双写后,他会查找::DATA,并将其变为空之后还会剩下一个::$DATA,这样就可以绕过。
复制链接进入后,url里有:: D A T A , 所 以 还 是 被 禁 止 访 问 的 , 这 时 我 们 可 以 将 : : DATA,所以还是被禁止访问的,这时我们可以将:: DATA,所以还是被禁止访问的,这时我们可以将::DATA删除
我们就又可以进行连接了。
Pass-04 htaccess文件绕过黑名单
第四关将黑名单加多了。
Apache的.htaccess是一个配置文件,用来控制所在目录的访问权限以及解析设置。
在配置文件中将AllowOverride的none改为all,保存后重启phpstudy就可以了。
![image-20220706201144529](https://i-blog.csdnimg.cn/blog_migrate/205ee3e37f039a35faf0dc3e2c0dede1.png)
必须用.htaccess不能用1.htaccess之类的,无法解析。
通过命令行修改文件名,将1.htaccess
修改为.htaccess
ren 1.htaccess .htaccess
不能直接把.htaccess放在网站根目录下,否则会报错
先上传.htaccess文件,再上传shell.txt(一句话木马)
![image-20220706203128923](https://i-blog.csdnimg.cn/blog_migrate/63e054d528399e9ef07a7da36c3a7534.png)
然后继续上传shell.txt
![image-20220706203218958](https://i-blog.csdnimg.cn/blog_migrate/446c70bbe0948482264a95b556017be8.png)
上传完成,右击复制图片连接,并打开,连接成功。
![image-20220706203324817](https://i-blog.csdnimg.cn/blog_migrate/0d9e7f10173f28a8423d2a0f24f1a6bb.png)
“zoom:50%;” />
上传完成,右击复制图片连接,并打开,连接成功。
![image-20220706203324817](https://i-blog.csdnimg.cn/blog_migrate/0d9e7f10173f28a8423d2a0f24f1a6bb.png)
后缀为htaccess
的文件,其中文件内容为SetHandler application/x-httpd-php
,意思是把所有文件都解析为php
文件来执行。