您的位置:首页 > 其它

hgame-2018 CTFwp(杭电信安)week1

2018-03-04 13:41 876 查看
原题链接

由于开放时间短,不知道什么时候结束。我会将题目的大致内容以图片形式down下来。

web

1 Are you from Europe?



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动态,没有服务器请求。

2 special number



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位以上

json_decode

用于将json字符串,解密成对象或数组。

$lock是不知道的,但是由于用的是==,不对类型做比较,因此需要做的是绕过!!!

关于php弱类型,一篇很好的总结

<?php
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 没什么用,尽迷惑人。

3. can u find me?



意思明显,这题是关于robots协议的,robots协议是规定爬虫限制的。

查看robots协议,加上/robots.txt即可。



看到disallow,不被允许爬取的页面是/f1aaaaaaaag.php

但是我可以访问呀!



下面容易想到了: Burp修改请求的字段值



guest-> admin 即可。

知识点: robots协议,http请求

flag: hgame{78e01ee77a39ef4e}

4. tell me what you want



URL: http://123.206.203.108:10001/

BP改就行了,一步步来,一开始Burp改POST,发现一直不对,hin烦。后来用hackbar改就行了,抓包貌似没什么区别。。。

知识点: http请求

flag: hgame{For9e_hTTp_iS_N0T_HArd}

5.

我们不一样

描述

知识点: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,stringstr2 ) ,需要给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}

msic

白菜1

描述

白菜1,希望大家多多关注国漫

知识点:图片隐写lsb

URL http://p1kaloi2x.bkt.clouddn.com/flag.png



提示很清楚了,LSB隐写。看到PK,保存为zip,7-zip打开。即看到flag。

白菜2

描述

还是我老婆hhh

知识点:初识文件结构

URL http://p1kaloi2x.bkt.clouddn.com/misc2.jpg



由于是jpg,联系文件结构,容易想到图种。

pacp1

wireshark 打开, 搜索hgame,即得。

crypto

easy Caesar



vuoas{Hvs_ei8qy_pf7kb_1l_xIadg_cjSf_o_Zo9m_rCu}

凯撒加密,python脚本解密即可,注意数字又要进行移位。

flag: hgame{The_qu1ck_br0wn_4x_jUmps_ovEr_a_La2y_dOg}

Polybius



hgame{FDXDGDADDG_FXXFAAXFAG_GDFXFFXFFXADXFDA_GDAD}

棋盘密码,我是手解的。



flag: hgame{fritz_nebel_invented_it}

confusion



密文: –/.-./.-../-/-.-/-…./-.-/-..-/-./…-/–../-..-/–.-/.–/-…/…/-./.-/..—/..-./…/..-/..—/–./–./-…/…/.–/….-/…../-…/…/.-../.-/–../..-./..-/-…./…/…-/.—/-…/-./-../.-/–../…/.-./…./..-/-…./–.-/-…-/-…-/-…-/-…-

混合了很多种加密,但是不难看出:

第一个是莫尔斯电码;

解得MRLTK6KXNVZXQWBSNA2FSU2GGBSW45BSLAZFU6SVJBNDAZSRHU6Q;

由于数字只有2-6,容易猜测是base32;

解得:dW5yWmsxX2h4YSF0ent2X2ZzUHZ0fQ==

由于有大小写,推测是base64;

解得:unrZk1_hxa!tz{v_fsPvt}

容易想到栅栏密码。

转换为utnzr{Zvk_1f_shPxvat!}

简单的凯撒密码:

hgame{Mix_1s_fuCking!}

虽然不难,还是很想fuc*

Hill

希尔密码(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/

baby step



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CTF