攻防系列——上传漏洞利用之upload labs通关练习

说在最前面,因为我嫌麻烦,所以我的一句话基本都是写在"1.jpg"里面的,每做一道题,我就会在后台upload文件夹把刚才上传的文件删掉,这样,下一题我直接传同样文件(我实在懒得复制又新建)。所以大家可能看到的永远都是那个"1.jpg" "1.php" "2.jpg"等等,看得懂就行哈。

第1-10关:前端验证、文件类型验证、黑名单绕过

黑名单是规定不允许上传的文件,但是如果黑名单定义不完整的话是可以实现绕过的

ps:1-10为黑名单绕过,而且只是验证一次,这些关卡全部可以用".php. ."思路解出来。但是建议老实一关一关过,通过练习,掌握一些上传漏洞利用方法。

一、第一关:JS前端验证绕过

什么是webshell? 一些个webshell小知识请移步。打开WebShell_笨小孩@GF 知行合一的博客-优快云博客_webshell

按照界面的要求,直接传webshell肯定不行限定了要传图片。(当然,不可能正经上传图片的,图片无法执行,对获取网站权限没有任何帮助。必定是要上传一个可执行文件,不然就不叫webshell了。)

思路一:先来写一个一句话(随便写一个常规的一句话木马)php。然后改成允许上传的格式(通过查看源代码发现格式要求:jpg/png/gif。大佬说这是前端验证。前端验证有个技巧,就是开启代理,但是没有流量就直接进行了验证),通过burp抓包,改后缀后重新的上传。完成一句话的php webshell上传。

ok,写一个一句话木马。

根据前端规则,先把后缀改php 

 

设置代理, 打开burp,准备上传。(我是火狐浏览器) 

点击上传之后,咱们的burp就抓到包了。(提醒一下大家,配置uploadlabs的时候,要自己建upload文件夹,不然没有上传路径。另外,访问自己配置大靶场时,将127.0.0.1换成自己的IPV4网址,同时,burp设置的时候,在proxy-options要勾选127.0.0.1:8080,不然抓不到包)真的很狗,我配置靶场的时候80端口不能用,后来我换了8080端口,结果burp设置proxy-options的时候也是8080,又冲突了,我只好给靶场再换一个端口,真的会谢。

右键-send to repeater,改后缀为“.php”,然后点击“send”

 OK,有正常回显(右边response)。上传成功。正常回显。

 (从验证的角度自己看看自己的靶场upload文件夹是不是多了个文件了,哈哈就是上传成功了。当然真的渗透测试的时候不能这样看啦哈哈)

 上传到这里就完成啦,下一步如果要查看该网站的目录或者提权什么的,就是下一步的工作啦(用蚁剑连接,根据刚才的说一句话木马,连接密码是“a”)。

思路二:将浏览器js代码禁用掉(但是这种方法有缺陷,因为禁用了js代码,在实战中可能会让网站的一些正常功无法显示)

还记得刚刚的源代码吗?可以看到是js,所以想办法让他没办法正常执行就可以直接上传webshell,不必理会他所说的什么必须上传jpg、png、gif格式。

禁用办法: 右键---检查---调试器---设置---禁用JavaScript。(快捷方式:f12---f1)

注意看奥,直接上传的“.php”格式的可执行文件。

 回到upload文件夹验证下:ok,的确上传成功了,没有弹窗提示

思路三:将网站源码复制下来,放到本地,然后将js代码删除。(必须要掌握的办法)

右键---查看网站源代码---全部复制---创建一个记事本---将代码放进去---把记事本后缀名改为.html---用Notepad打开---找到js代码---删除

 如果我们打开,是有上传文件的界面,但是不知道要上传给谁

这时我们返回到原靶场,右键---检查---网络---上传图片。可以查看上传路径。

重新用Notepad打开我们刚才复制后编辑的html文件,修改action,在源代码中加一个提交的路径。 

 访问html-选择“1.php”-上传(这里我提醒一下,注意看上图,upload的是“1.php”,所以记得还是要选这个名字的文件,不然其他的传不上去,我也不知道为什么)

上传成功以后会跳转成正常的界面(之前点击自己编辑保存的html就是个很崴的拉跨界面,和原靶场界面有出入,但不知道为什么文件上传成功以后,就变正常了)。

咱们验证下,可以直接查看自己的靶场的upload文件夹,看看上传成功没。或者直接访问该文件的位置(就是action位置加/文件名),可以正常访问的话就没问题。

ps:事实上,该操作如果有firebug插件,应该可以直接在网页编辑调试,但是升级以后,火狐下架了该插件,我又不知道怎么直接使用devtools来尽心编辑调试,有知道的大佬,希望指点迷津。

二、第二关:也是上传webshell到服务器。

看了下源码,没有个所以然。(后来看了下别人的思路,别人的源代码是有相关的限制的,但是我的看不到,不知道为啥。)

 上传一个php看看。

ok,抓包看看

思路一:由于原网站要求上传图片格式的文件,所以,要修改content type为MIME格式

常见的格式如下:

图片格式 MIME
.gif image/gif
.png image/png
.jpg image/jpeg
.bmp image/bmp
.webp image/webp
.icon image/x-icon
其他 image/vnd.microsoft.icon

随便选一种就行,我选jpg。send,有回显,ok,上传成功。

 第三关:上传一个脚本文件到服务器,并能成功执行。

看下源代码,有很多过滤函数,还有禁止上传的类型。

代码中的第一个循环是判断你有没有点击上传按钮,如果有进入下一个循环。

file_exists判断的是声明的上传目录是否存在,如果存在就执行下面的上传验证。

trim函数是用来把获取过来的文件名中的空格给删除掉

deldot函数删除文件名末尾点防止多后缀名欺骗,比如说你上传1.jpg.png.php,他接受的是1.jpg但是他是以最后一个. 为准也就是说他最终上传上去的是1.php

strrchr函数是分割字符,作用是把.前面的东西删除掉只剩下后缀名(得到你文件的真实后缀)

strtlolwer函数把真实后缀名转为小写

str_ireplace函数是把::$DATA替换为空,最后再用trim函数进行空格过滤。

基本上能过滤的都过滤了,但是在禁止上传的脚本后缀那里可以想办法绕过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值