hgame_week1_wp
web
Cosmos 的博客
提到了版本管理工具,然后可能是源码泄露
用githack本来就想用git命令直接恢复原来版本,但是搞了半天什么都搞不出来,网上找了个linux下的图形化的GitKraken,里面就直接找一下就有了
接 头 霸 王
图片一开始没懂什么意思,最后懂了,笑死
按照要求添加
Referer: vidar.club
,表示从vidar.club来的按要求添加
x-forwarded-for: 127.0.0.1
或者x-forwarded-for: localhost
,表示来源是本地按照要求 修改
User-Agent: Cosmos
把GET改成POST就ok了
按照意思
if-unmodified-since: Fri, 01 Jan 2087 00:00:00 GMT
写wp的时候和我原来做的时候不太一样,不过差不多,就是疯狂修改请求头
Code World
直接访问的时候会302重定向到nex.php
我把get请求换成了post请求(我也不知道为什么要这样)
自己先这么做的,然后不成功
http://codeworld.hgame.day-day.work/index.php?a=5+5
上网查了半天知道‘+’在url里面其实是空格的意思
url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,
这时候可以将这些字符转化成服务器可以识别的字符,对应关系如下:
URL字符转义
URL 中+号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
#表示书签 %23
& URL 中指定的参数间的分隔符 %26
= URL 中指定参数的值 %3D重新构造url
http://codeworld.hgame.day-day.work/index.php?a=5%2B5
就ok了
🐔尼泰玫
可能的非预期解,感觉没有用到js的考点
随便来一盘,然后firefox看一下包,有个POST
直接改数字,然后POST提交会400
后面的数字应该是检验用的,所以会400?在开发者工具里面双击这个改过的请求
就有了神奇的一幕
一种用js的解法
调试器里面,我选改这个地方,下断点
随便再来一局自杀,到断点时,去控制台直接改数字
继续执行就会跳出来flag
Reverse
maze
刚到手时看不出来是个迷宫,放了两天有学习资料,稍微懂了一点
与wiki上不太一样的地方是这里的迷宫没有直接给出来
理解这个程序很重要。 我大概理解就是前两个判断是判断“人”还在迷宫里面,后面判断当前位置是不是不能踩的地方(如果是1就不能踩)。wasd控制,ws一次走64位,ad一次走4位,所以实际上一行应该是8个位置。
迷宫导出来
手动处理一下
得到迷宫,再算一下起始位置和终点,写出来就是flag了
Pwn
Hard_AAAAA
具体怎么搞的忘记了,只剩下这个了,基本栈溢出(我只会这种了)
One_Shot
检查,拖进ida
分析
- 读入flag文件并且存到flag(位于bss:00000000006010E0)
- name(bss:00000000006010C0),很凑巧的在flag的低一点的位置,所以正常情况下name地址到flag地址之前的值没有‘\x00’就可以在最后的时候一并输出
- 输入v4的值,下一行要求v4所指向的位置可写,所以直接随便指向name里面的任意位置理论上就ok了
试了之后发现不成功,根据输出结果推测应该是flag:bss:00000000006010E0这个位置是‘\x00’,所以直接截断了,所以我们需要把1写入这个地址
又是一个写完之后才知道题目的精髓
Crypto
InfantRSA
基础题,算就完事
Affine
加密代码
import gmpy2 from secret import A, B, flag assert flag.startswith('hgame{') and flag.endswith('}') TABLE = 'zxcvbnmasdfghjklqwertyuiop1234567890QWERTYUIOPASDFGHJKLZXCVBNM' MOD = len(TABLE) cipher = '' for b in flag: i = TABLE.find(b) if i == -1: cipher += b else: ii = (A*i + B) % MOD cipher += TABLE[ii] print(cipher) # A8I5z{xr1A_J7ha_vG_TpH410}
写了一小段c来爆破,凑合看吧
for(int a=1;a<=1000000;a++) for(int b=0;b<62;b++) if((12*a+b)%62==46) if((11*a+b)%62==33) if((7*a+b)%62==43) if((6*a+b)%62==30) if((18*a+b)%62==0) { printf("a=%d b=%d\n",a,b); return 0; }
- 数字扔回去,再写出解密代码
import gmpy2 TABLE = 'zxcvbnmasdfghjklqwertyuiop1234567890QWERTYUIOPASDFGHJKLZXCVBNM' MOD = len(TABLE) A=13 B=14 flag='A8I5z{xr1A_J7ha_vG_TpH410}' cipher = '' for b in flag: i = TABLE.find(b) if i == -1: cipher += b else: for j in range(0,63): if (j*MOD+i-B)%A == 0: yuan=((j*MOD+i-B)/A)%MOD cipher += TABLE[yuan] print(cipher) break # A8I5z{xr1A_J7ha_vG_TpH410}
Reorder
应该叫移位密码吧,难度不大
打代码就行了
Misc
欢迎参加HGame!
其实没看出是什么编码,截了一段去搜索,查到是base64
下面摩斯码解出来(我去的网站)
w3lc0me to 2020 hgam3
,没有下划线,全是小写试了好几次,最后大写加下划线交了
壁纸
- 常规题目,jpg分离出zip,提示去找这个这个图片的id,直接按图搜索搜不到,就直接去pixiv里面搜了,一般url最后的那个数字就是id,
76953815
解开压缩包 - 后来发现一言不合直接爆破其实更快,解开是不太正常的unicode
- sublime里面替换一下补上两个0(猜的)
克苏鲁神话
提示是培根密码
解出来后是这个
FLAGHIDDENINDOC
将Bacon.txt压缩成zip,两个Bacon.txt的CRC32是一样的
虽然我也不懂具体什么原理,但是有个操作叫明文攻击,用archpr可以解出来
- 网上推荐使用4.53版本,说是明文攻击速度比4.54快很多
- 打开里选择被加密的压缩文件,攻击方式选择明文
- 明文文件选择上面自己压缩的只有一个txt的zip(很多时候要这两个zip文件加密软件方式一类的一样才可以,所以题目后有hint用7zip) 、
- 点击开始,一般时间不会太长,成功后会让你保存文件
- 解压那个文件
得到一个加密得doc,用前面的培根的密码就可以进去了,然后去掉这个密码,保存下来,再拖进winhex,搜索hgame就有flag了
签到题ProPlus
Rdjxfwxjfimkn z,ts wntzi xtjrwm xsfjt jm ywt rtntwhf f y h jnsxf qjFjf jnb rg fiyykwtbsnkm tm xa jsdwqjfmkjy wlviHtqzqsGsffywjjyynf yssm xfjypnyihjn.
JRFVJYFZVRUAGMAI
Three fenses first, Five Caesar next. English sentense first, zip password next.
- 看不太懂什么意思,后来求大佬要的hint
- 先分成三份的栅栏密码,再凯撒移位5 方法没错的话上面会是一个英文句子,相同的方法下面就是zip密码
- 隐约记得提出来是个base64还是32的,用python解成png,扫描二维码
每日推荐
又是一个坑了我几天的题,实际过程非常艰辛,就直接说解法吧Capture1.pcapng
直接foremost出来发现有song.zip,那这个应该就是这个了wireshark里面搜索
找到一帧如2053,右键追踪TCP流
前面乱七八糟的东西去掉,后面不去理论上也可以,保存成
.zip
有备注6位数字,直接爆破,解出一个MP3,拖进audacity
切成频谱图