NSSCTF ezMath

第一次接触这种题记录一下,一道NSSCTF上的题,当时没做出来,拿来复现一下

本题考查:

sha256爆破、pwntools

打开环境,点进网址,出现下图

看到个sha256与XXXX之间的联系,需要求出XXXX字符,之间sha256爆破即可

import string
import hashlib
s = 'feba8fc64a8d48a17196e888f00d6d7d6f4d905d570d10132d21d7e86e8e3786'
chars = string.ascii_letters + string.digits  # 构造字符集
print (chars)
for i in chars:
    for j in chars:
        for k in chars:
            for n in chars:
                psw =  i + j + k + n + '2OC7RirUwzlRrPuq'
                sha256 = hashlib.sha256(psw.encode(encoding='utf-8')).hexdigest()
                if s ==sha256:
                    print(psw[:4])

用上面的代码爆破

 看着没什么思路了,想着用pwn的nc进行连接(这里我使用kali进行连接)

这里我因为是先爆破在用nc连接的,所xxxx的值不同,还需要连接后进行爆破(这一步可以省略,但是要先用nc连接后才进行爆破)

很显然出来了题目描述所说的数学题,但是要做100道才能得到flag,这里就需要使用pwntools与服务器进行交互,通过脚本运行计算,那么就得学习一下pwntools 。

学习完后,写代码(我没学太明白),就搜了一个脚本套了一下,只需改下地址和端口即可

from pwn import *
import string
from hashlib import sha256

def get_proof(last, shav):
    s = string.ascii_letters + string.digits
    for v1 in s:
        for v2 in s:
            for v3 in s:
                for v4 in s:
                    t = (v1 + v2 + v3 + v4).encode() + last
                    if sha256(t).hexdigest() == shav:
                        return (v1 + v2 + v3 + v4).encode()


context.log_level = 'debug'

p = remote('43.143.7.97', 28623) #环境地址,端口

# 爆破sha256

p.recvuntil(b'sha256(XXXX+')  #接收数据直到sha256(XXXX+出现
str1 = p.recvuntil(b')',drop=True) #从’sha256(XXXX+‘开始到’)‘出现
print(str1)

p.recvuntil(b'== ')
str2 = p.recvuntil(b'\n',drop=True)
print(str2)
found = get_proof(str1, str2.decode())
print(found)
p.sendlineafter(b'Plz Tell Me XXXX :', found)  #p.sendlineafter(some_string, payload) 接收到 some_string 后, 发送你的 payload,加个换行
for i in range(100):
	p.recvline(keepends=True)
	p.recvuntil(b' ',drop=True) #p.recvuntil(some_string) 接收到 some_string 为止
	s=p.recvuntil(b'= ',drop=True)
	#p.recvall()
	print(s)
	res=str(eval(s)).encode()
	p.sendlineafter(b"?", res)
	p.recvline() #p.recvline() 接收一行输出

p.recvall()

运行后即可得到flag

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值