UCAS三月月赛
未完待续......
0x01 misc_babyguess
1、知识点:asm.js、抓包分析
2、解题步骤
(1)查看源码发现js文件,分析js发现asm。
(2)抓包获得jquery.asm,解码得flag。
burp
0x02 web_babybypass
1、知识点:php代码审计、PHP掌握度
2、源码分析
<?php
error_reporting(0);
require_once __DIR__.'/flag.php';
$exam = 'return \''.sha1(time()).'\';';
if (!isset($_GET['flag'])) {
echo '<a href="./?flag='.$exam.'">This is a Hint?</a>';
}
else if (strlen($_GET['flag']) != strlen($exam)) {
echo 'Length error';
}
else if (preg_match('/`|"|\.|\\\\|\(|\)|\[|\]|_|<|>|flag|echo|print|require|include|die|exit/is', $_GET['flag'])) {
echo 'no no no';
}
else if (eval($_GET['flag']) === sha1($flag)) {
echo $flag;
}
else {
echo 'Baby bypass?';
}
echo '<hr>';
highlight_file(__FILE__);
(1)对flag输入长度进行限制:确保与http://124.16.75.162:31053/?flag=return 'cd318cf7ec60feda5edf2be53b7a547c99ace31a';输入长度一致。
(2)pre_match过滤了很多敏感字符,包括<>、()、echo等。
(3)sha1的相等问题。
3、解题步骤
结合上述分析,payload需绕过代码中所示字符同时绕过sha1的相等问题将flag进行输出。该题与Solveme.peng.kr平台的Check via eval题相似,但过滤更为严格,无法通过构造<?=$flag?>输出flag,即下述payload并不适用。
payload:http://checkviaeval.solveme.peng.kr/?flag=$a='alag';$a{0}='f';1111111111111111;?><?=${$a}?>
本题对尖括号也进行了过滤,做法与上述完全不同了。赛后看writeup发现此题需利用php的诸多特性来进行爆破获得flag,具体思路如下。
(1)异或操作:首先需要能够操作flag变量,但是过滤了flag关键词,因此需要想办法绕过,这里就可以使用异或操作得到flag关键词。如:'1T@P'^'W8!7'。
(2)绕过===的判断:可以通过将flag变量修改为数组的形式来绕过===的判断,由于_被过滤,可选的PHP自带数组可以是$GLOBALS。
(3)盲注:通过上述步骤会导致原有的flag变量被修改,无法获得flag的原始值,因此需要在payload中加入字符串逐位判断比对,以突出回显差异性从而能够通过逐位爆破的形式来获得flag。
payload:
$a=%26${'1T@P'^'W8!7'};$a{0}=='f'?$a=$GLOBALS:1;;;;;
0x03 web_injection
0x04 web_session
0x05 web_springboot
0x06 web_flask
1、知识点:SSTI注入、绕过
2、解题步骤
(1)发现漏洞点,进行测试。
(2)测试发现进行了相关过滤。