原题链接
由于开放时间短,不知道什么时候结束。我会将题目的大致内容以图片形式down下来。
URL http://123.206.203.108:10001/European.html
一看题,就感觉想是用burp抓包做,来自欧洲,就想到改语言,accept-langue字段。
但是,我试了en,gk等等值,并没有什么卵用。而且发现动态调用是用js实现的也就是说,没有调用服务的数据。
于是想到可能是在js里设了坑。
查看源码:
发现猫腻eval, 于是换成alert ,查看函数内容:
function soHappy(){var buy=confirm("SSR!欧洲人,你愿意献祭你全部的 SSR 来获取 flag 吗?");
if(!$("#serv5").html()&&!$("#craft5").html()){alert("你根本不是欧洲人。");return}
var flag="";flag+="";flag+="";flag+="";flag+="hgame";flag+="{";flag+="T";flag+="h";
flag+="3";flag+="_";flag+="C";flag+="h";flag+="0";flag+="s";flag+="e";flag+="N";flag+="_";
flag+="0";flag+="n";flag+="E";flag+="!";flag+="}";if(buy){$("#serv5").remove();$("#craft5").remove();
alert("兑换成功。flag: "+flag)}else{alert("你失去了唯一的机会。")}}
相信大家的机智,都看到flag了。
flag: hgame{Th3_Ch0seN_0nE!}
知识点: js审计
反思: 这题容易被题目本身带到抓包http协议的道上,但是这是错的。本身网页只是js动态,没有服务器请求。
URL http://118.25.18.223:10001
进url,是一段php源码:
include_once("flag.php");
if(isset($_GET['key'])){
$pattern = '/^(?=.*[0-9].*)(?=.*[a-zA-Z].*).{7,}$/ ';
$key = $_GET['key'];
if(preg_match($pattern,$key)===0){
echo "格式错误";
}else{
$lock="******************";
$b = json_decode($key);
if($b==$lock)
echo $flag;
else
echo "this is no special number";
}
}
下面开始审计:
1. 读懂这段正则
$pattern = '/^(?=.*[0-9].*)(?=.*[a-zA-Z].*).{7,}$/ ';
(?=.[0-9].) 包含0-9任意字符
(?=.[a-zA-Z].) 包含a-zA-Z任意字符
{7,} 7位以上
var_dump("admin"==0); //true
var_dump("1admin"==1); //true
var_dump("admin1"==1) //false
var_dump("admin1"==0) //true
var_dump("0e123456"=="0e4456789"); //true
?> //上述代码可自行测试
因此,可以利用0==”string”,来绕过。
payload: key=0e1233248
flag: hgame{pHp_w34k_typing_s000_e4sy}
**知识点: **php弱类型,正则
反思: 我一开始,被json_decode 带跑了,试了各种
?key={“key”:0}
?key={“b”:0}
但是都不对,感觉这个json_decode 没什么用,尽迷惑人。
意思明显,这题是关于robots协议的,robots协议是规定爬虫限制的。
查看robots协议,加上/robots.txt即可。
看到disallow,不被允许爬取的页面是/f1aaaaaaaag.php
但是我可以访问呀!
下面容易想到了: Burp修改请求的字段值
guest-> admin 即可。
知识点: robots协议,http请求
flag: hgame{78e01ee77a39ef4e}
URL: http://123.206.203.108:10001/
BP改就行了,一步步来,一开始Burp改POST,发现一直不对,hin烦。后来用hackbar改就行了,抓包貌似没什么区别。。。
知识点: http请求
flag: hgame{For9e_hTTp_iS_N0T_HArd}
我们不一样
描述
知识点:PHP弱类型
URL http://118.25.18.223:10002/
基准分数 50
当前分数 50
完成人数 189
include_once("flag.php");
if(isset($_POST['str1'])&&isset($_POST['str2'])){
if ($_POST['str1']!=$_POST['str2']&&strcmp($_POST['str1'],$_POST['str2'])==0) {
echo "flag is:".$flag;
exit();
} else{
echo "Something wrong..";
}
}
这里考的是php弱类型,php中内置函数strcmp有不合理的地方:
strcmp()函数在PHP官方手册中的描述是int strcmp ( string str1,string str2 ) ,需要给strcmp()传递2个string类型的参数。如果str1小于str2,返回-1,相等返回0,否则返回1。strcmp函数比较字符串的本质是将两个变量转换为ascii,然后进行减法运算,然后根据运算结果来决定返回值。
如果传入给出strcmp()的参数是数字呢?
$array=[1,2,3];
var_dump(strcmp($array,'123')); //null,在某种意义上null也就是相当于false。
payload:str1[]=[1,2,3]&str2=123
知识点: php弱类型
flag: hgame{g3t_f14g_is_so0000_ez}
描述
白菜1,希望大家多多关注国漫
知识点:图片隐写lsb
URL http://p1kaloi2x.bkt.clouddn.com/flag.png
提示很清楚了,LSB隐写。看到PK,保存为zip,7-zip打开。即看到flag。
描述
还是我老婆hhh
知识点:初识文件结构
URL http://p1kaloi2x.bkt.clouddn.com/misc2.jpg
由于是jpg,联系文件结构,容易想到图种。
wireshark 打开, 搜索hgame,即得。
vuoas{Hvs_ei8qy_pf7kb_1l_xIadg_cjSf_o_Zo9m_rCu}
凯撒加密,python脚本解密即可,注意数字又要进行移位。
flag: hgame{The_qu1ck_br0wn_4x_jUmps_ovEr_a_La2y_dOg}
hgame{FDXDGDADDG_FXXFAAXFAG_GDFXFFXFFXADXFDA_GDAD}
棋盘密码,我是手解的。
flag: hgame{fritz_nebel_invented_it}
密文: –/.-./.-../-/-.-/-…./-.-/-..-/-./…-/–../-..-/–.-/.–/-…/…/-./.-/..—/..-./…/..-/..—/–./–./-…/…/.–/….-/…../-…/…/.-../.-/–../..-./..-/-…./…/…-/.—/-…/-./-../.-/–../…/.-./…./..-/-…./–.-/-…-/-…-/-…-/-…-
混合了很多种加密,但是不难看出:
第一个是莫尔斯电码;
解得MRLTK6KXNVZXQWBSNA2FSU2GGBSW45BSLAZFU6SVJBNDAZSRHU6Q;
由于数字只有2-6,容易猜测是base32;
解得:dW5yWmsxX2h4YSF0ent2X2ZzUHZ0fQ==
由于有大小写,推测是base64;
解得:unrZk1_hxa!tz{v_fsPvt}
容易想到栅栏密码。
转换为utnzr{Zvk_1f_shPxvat!}
简单的凯撒密码:
hgame{Mix_1s_fuCking!}
虽然不难,还是很想fuc*
希尔密码(Hill Cipher),是运用基本矩阵论原理的替换密码,每个字母当作26进制数字:A=0, B=1, C=2… 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果mod26。用作加密的矩阵(即密匙)必须是可逆的,否则就不可能译码。只有矩阵的行列式和26互质,才是可逆的。
https://www.cnblogs.com/xdjun/p/7472735.html
一步步计算,就可以了。
我找到了一个站,有更详细的介绍和脚本。
www.practicalcryptography.com/ciphers/hill-cipher/
pow(0x1111111111,flag,0x976693344d) = 0x7ac21f64ed
不会,查了很多资料才知道BSGGS算法。python脚本:
from math import ceil, sqrt
def bsgs(g, h, p):
N = ceil(sqrt(p - 1))
tbl = {pow(g, i, p):i for i in range(N)}
c = pow(g, N * (p - 2), p)
for j in range(N):
y = (h * pow(c, j, p)) % p
if y in tbl:
result=(j * N + tbl[y])
print(hex(result))
return None
print(bsgs(0x1111111111, 0x7ac21f64ed , 0x976693344d))
flag : x1337