WEB
easycon
一窝蚂蚁大概有500-2000只,而梵蒂冈只有800人,如果这窝蚂蚁入侵梵蒂冈,他们要提着菜刀才能解决这群蚂蚁,但是你并不关心你只关心你自己
183.129.189.60:10021
御剑扫描出index.php
页面,访问提示eval post cmd
,
POST传参cmd=system("ls -al");
发现当前目录下有文件bbbbbbbbb.txt
:
回到页面访问,得到一串base64图片后缀字符串,加上base64头data:image/png;base64,
,在URL访问得到图片中显示的flag:
flag: GWHT{do_u_kn0w_c@idao}
BlackCat
眼睛瞪得像铜铃
183.129.189.60:10022
查看源码发现提示都说听听歌了!
,下载mp3文件查看16进制,发现最后有关键源码:
1 |
if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){ |
需传入三个参数Black-Cat-Sheriff
,One-ear
,White-cat-monitor
,用环境变量clandestine
的值作为key对White-cat-monitor
值进行sha256哈希运算,得到的结果再作为key用来对One-ear
值进行sha256哈希运算,结果与Black-Cat-Sheriff
相等则成功执行命令。
利用hash_hmac
函数传入数组返回false
的缺陷:
1 |
$hmac = hash_hmac('sha256', Array(), "SecretKey"); |
传入数组返回false
,再次运算时则无需key即可直接得到sha256哈希运算值。
通过修改One-ear
命令及对应的Black-Cat-Sheriff
值,最后拿到flag。
payload:
White-cat-monitor[]=&One-ear=;cat flag.php&Black-Cat-Sheriff=04b13fc0dff07413856e54695eb6a763878cd1934c503784fe6e24b7e8cdb1b6
flag: GWHT{y0u_mu3t_p@y_atTentiou_!0_lt}
参考:SPOT THE BUG CHALLENGE 2018 WARM-UP
easyphp
Easyphp
183.129.189.60:10023
题目逻辑:
访问时清除目录下除index.php
文件外的其他文件,且只能写一次;另外限制字符为a-z
和.
,只有index.php
文件解析,
考虑写入.htaccess文件,拆开关键字用\
换行以绕过正则过滤,利用
php_value auto_prepend_file .htaccess
让php文件包含.htaccess
文件,从而执行代码:
1 |
import requests |
flag: GWHT{easyApache}
MISC
com
老知识? nc ip port
183.129.189.60:10028
nc,选择[1] Sign in
得到多行多列数字,每行最后一个数字很大,易知为求解线性方程组。
调整好list格式,导出A和B矩阵:
1 |
s = '''352 971 218 64 892 633 999 122 123 792 727 822 719 16 780 261 264 317 721 957 517 1017 991 348 394 869 320 766 717 667 731 58 413 64 955 8506933 |
放到Sage下求解一把梭:
1 |
|
将list值输入交互得flag:
flag: GWHT{4b55c1d5fb6a0234fc252b19e510301a}
REVERSE
login
快乐签到!注:得到的 flag 需要 MD5 之后再做提交
183.129.189.60:10028
拖到IDA查看字符串发现很多Py开头的函数,肯定是python写的程序了。
python反编译,先用pyinstxtractor还原到pyc文件,再用uncompyle6还原到py文件。
开始在Python3.8环境下还原发现py文件有问题,根据提示重装至Python3.6环境,还原得到正常的login.py
源文件:
1 |
|
三步,1.两两字符异或,2.打乱顺序,3.生成线性方程组。
通过Sage解线性方程组,还原code
数组顺序,最后从后往前依次异或还原,md5哈希得flag。
-
格式化+Sage解方程组:
1
2
3
4
5
6
7
8
9
10
11
12s = '''(a1 * 88 + a2 * 67 + a3 * 65 - a4 * 5 + a5 * 43 + a6 * 89 + a7 * 25 + a8 * 13 - a9 * 36 + a10 * 15 + a11 * 11 + a12 * 47 - a13 * 60 + a14 * 29 == 22748) & (a1 * 89 + a2 * 7 + a3 * 12 - a4 * 25 + a5 * 41 + a6 * 23 + a7 * 20 - a8 * 66 + a9 * 31 + a10 * 8 + a11 * 2 - a12 * 41 - a13 * 39 + a14 * 17 == 7258) & (a1 * 28 + a2 * 35 + a3 * 16 - a4 * 65 + a5 * 53 + a6 * 39 + a7 * 27 + a8 * 15 - a9 * 33 + a10 * 13 + a11 * 101 + a12 * 90 - a13 * 34 + a14 * 23 == 26190) & (a1 * 23 + a2 * 34 + a3 * 35 - a4 * 59 + a5 * 49 + a6 * 81 + a7 * 25 + (a8 << 7) - a9 * 32 + a10 * 75 + a11 * 81 + a12 * 47 - a13 * 60 + a14 * 29 == 37136) & (a1 * 38 + a2 * 97 + a3 * 35 - a4 * 52 + a5 * 42 + a6 * 79 + a7 * 90 + a8 * 23 - a9 * 36 + a10 * 57 + a11 * 81 + a12 * 42 - a13 * 62 - a14 * 11 == 27915) & (a1 * 22 + a2 * 27 + a3 * 35 - a4 * 45 + a5 * 47 + a6 * 49 + a7 * 29 + a8 * 18 - a9 * 26 + a10 * 35 + a11 * 41 + a12 * 40 - a13 * 61 + a14 * 28 == 17298) & (a1 * 12 + a2 * 45 + a3 * 35 - a4 * 9 - a5 * 42 + a6 * 86 + a7 * 23 + a8 * 85 - a9 * 47 + a10 * 34 + a11 * 76 + a12 * 43 - a13 * 44 + a14 * 65 == 19875) & (a1 * 79 + a2 * 62 + a3 * 35 - a4 * 85 + a5 * 33 + a6 * 79 + a7 * 86 + a8 * 14 - a9 * 30 + a10 * 25 + a11 * 11 + a12 * 57 - a13 * 50 - a14 * 9 == 22784) & (a1 * 8 + a2 * 6 + a3 * 64 - a4 * 85 + a5 * 73 + a6 * 29 + a7 * 2 + a8 * 23 - a9 * 36 + a10 * 5 + a11 * 2 + a12 * 47 - a13 * 64 + a14 * 27 == 9710) & (a1 * 67 - a2 * 68 + a3 * 68 - a4 * 51 - a5 * 43 + a6 * 81 + a7 * 22 - a8 * 12 - a9 * 38 + a10 * 75 + a11 * 41 + a12 * 27 - a13 * 52 + a14 * 31 == 13376) & (a1 * 85 + a2 * 63 + a3 * 5 - a4 * 51 + a5 * 44 + a6 * 36 + a7 * 28 + a8 * 15 - a9 * 6 + a10 * 45 + a11 * 31 + a12 * 7 - a13 * 67 + a14 * 78 == 24065) & (a1 * 47 + a2 * 64 + a3 * 66 - a4 * 5 + a5 * 43 + a6 * 112 + a7 * 25 + a8 * 13 - a9 * 35 + a10 * 95 + a11 * 21 + a12 * 43 - a13 * 61 + a14 * 20 == 27687) & (a1 * 89 + a2 * 67 + a3 * 85 - a4 * 25 + a5 * 49 + a6 * 89 + a7 * 23 + a8 * 56 - a9 * 92 + a10 * 14 + a11 * 89 + a12 * 47 - a13 * 61 - a14 * 29 == 29250) & (a1 * 95 + a2 * 34 + a3 * 62 - a4 * 9 - a5 * 43 + a6 * 83 + a7 * 25 + a8 * 12 - a9 * 36 + a10 * 16 + a11 * 51 + a12 * 47 - a13 * 60 - a14 * 24 == 15317)'''.split('&')
A = []
B = []
for k in s:
t = k.strip().strip('(').strip(')').split('==')
exp = t[0].replace('a1 * ','').replace(' + a2 *',',').replace(' + a3 *',',').replace(' + a4 *',',').replace(' + a5 *',',').replace(' + a6 *',',').replace(' + a7 *',',').replace(' + a8 *',',').replace(' + a9 *',',').replace(' + a10 *',',').replace(' + a11 *',',').replace(' + a12 *',',').replace(' + a13 *',',').replace(' + a14 *',',').replace(' - a2 *',', -').replace(' - a3 *',', -').replace(' - a4 *',', -').replace(' - a5 *',', -').replace(' - a6 *',', -').replace(' - a7 *',', -').replace(' - a8 *',', -').replace(' - a9 *',', -').replace(' - a10 *',', -').replace(' - a11 *',', -').replace(' - a12 *',', -').replace(' - a13 *',', -').replace(' - a14 *',', -').replace(' + (a8 << 7)',', '+str(2**7))
A.append(eval('['+exp+']'))
B.append(int(t[1]))
print(A)
print(B) -
还原
code
数组顺序1
2
3
4
5
6ind = [2, 1, 0, 3, 4, 5, 6, 7, 9, 8, 10, 11, 12, 13]
out = [119, 24, 10, 7, 104, 43, 28, 91, 52, 108, 88, 74, 88, 33]
ori = [out[ind.index(i)] for i in range(14)]
print(ori) -
字符异或
1
2
3
4
5
6
7
8out = [10, 24, 119, 7, 104, 43, 28, 91, 108, 52, 88, 74, 88, 33]
flag = out[:]
for i in range(12,-1,-1):
flag[i] ^= flag[i+1]
print(''.join([chr(k) for k in flag]))
对input进行md5哈希得flag。
flag: GWHT{58964088b637e50d3a22b9510c1d1ef8}
Bytecode
了解一下Bytecode
按照Python字节码规则手工逆向,还原过程中可不断使用python -m dis code.py
对比是否正确。
还原出源码:
1 |
en=[3,37,72,9,6,132] |
三部分,1.简单爆破,可直接猜测出GWHT{
,2.数组异或,反推,3.线性方程组,Sage解。
连起来即flag。
-
数组异或
1
2
3
4
5
6
7
8
9
10
11
12
13en = [3,37,72,9,6,132]
output = [101,96,23,68,112,42,107,62,96,53,176,179,98,53,67,29,41,120,60,106,51,101,178,189,101,48]
ori = ''
k = 0
for i in range(13):
c = output[k]^en[i%6]
b = output[k+1]^en[i%6]
ori += chr(b)+chr(c)
k += 2
print(ori) -
Sage解方程组
1
2
3
4
5
6
7
8
9
A = Matrix([[3,2,5],[4,7,9],[1,8,2]])
Y1 = vector([1003,2013,1109])
Y2 = vector([671,1252,644])
print(A \ Y1)
print(A \ Y2)
flag: GWHT{cfa2b87b3f746a8f0ac5c5963faef73}
easyre
easyre
IDA打开,跟踪到main
函数,代码逻辑清晰,输入字符串通过三步加密处理得到密文:
encode_one
是base64编码函数,encode_two
是字符串分四块乱序函数,encode_three
是简单移位函数。
Python脚本:
1 |
s='EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG' |
flag: GWHT{672cc4778a38e80cb362987341133ea2}
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论