bugku game1
是一个盖房子的游戏,浅玩一下,按照逻辑走必输,查看页面源代码,就会发现一串不一样的字符串(看了别的wp是通过F12,或者抓包)
按照它给的公式,url+/score.php?score=6000[自己想给的分数,大一点好] &ip=39.130.55.154&sign=[sign的前缀zM][6000的base64编码]NjAwMA==
114.67.175.224:15972/score.php?score=6000&ip=39.130.55.154&sign=zMNjAwMA==
即可得到flag
bugku 猜
用百度识图去识别照片,即可得到她的信息
bugku ping
下载之后解压,发现里面有一个pcap文档,pcap文件是wireshark配置脚本文件,于是想到用wireshark(网络流量分析工具)去打开,每一行流量分析里的最后一个字母,依次去看便会发现规律f l a g {,即可得到flag
bugku宽带信息泄露
下载之后解压得到一个bin的压缩文件,刚开始时,不太知道该怎么做,看了wp,说是宽带信息泄露跟路由器配置文件有点关联,这个时候便认识到了一个新工具RouterPassView(查看路由器配置文件)
bin文件:二进制文件,其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件,只是表明它是binary格式。比如虚拟光驱文件常用".bin"作为后缀,但并不意味着所有的bin文件都是虚拟光驱文件。一般来讲是机器代码,汇编语言编译后的结果(磁盘 *** 作系统下汇编语言编译后与".com"文件相类似),用debug、WINHEX,U_EDIT等软件可以打开(通常不一定能看得懂是些什么除非学习过汇编语言)。这类 所有的文件,无论文件扩展名是什么,一律分为两种格式".text"和".binary"。
把.bin文件拖到工具里,直接搜username即可得到flag
bugku 富强民主
核心价值观编码解码即可
bugku 闪得好快
下载之后,便发现好多张二维码图片在不断变化,第一时间想到了stegsolve(图片隐写工具),用Frame Browser功能依次扫18张二维码图片,得到的字母连在一起即可
bugku 赛博朋克
想解压,结果发现被加密了,使用010editor去查看看是伪加密还是真加密,个人觉得这篇博客写的很好BugkuCTF—赛博朋克记录关于ZIP文件文件头协议和LSB隐写_今天也要美美哒的博客-CSDN博客_bugku 赛博朋克
压缩源文件数据区,以50 4B 03 04开头
压缩源文件目录区,以50 4B 01 02开头
09 00为加密,将它改为无加密00 00,就可以得到.txt
把文本文档再次用010editor查看,发现有png熟悉的字样,将文件后缀改为.png
便可得到一张图片,使用Stegsolve查看,点Analyse,Date Extract,点击常规参数,Preview
攻防世界 幂数加密
认识到了云影密码,二进制幂数加密只有0,1,2,3,4,5是没有8的,看了wp了解到是云影密码,用0做分隔,刚好提示说flag为8位大写字母,刚好0有7个,每段相加后,0~26对应A~Z。
攻防世界 混合编码
看到一串大小写字母、数字,等号,第一时间就想到base64解码,使用base64解码得到一串
发现是一堆由划分的数字,立马想到ASCII对照表,发现这之中的数字不都是大于等于97小于等于119,所以应该不是flag,想到Unicode解码,又回到base64编码形式,于是使用base64解码,再对照ASCII得到flag
攻防世界 easychallenge
下载之后得到pyc文件,想到了python反编译,使用kali安装python的反编译库uncompyle反编译
pyc文件就是由Python文件经过编译后所生成的文件,py文件编译成pyc文件后加载速度更快而且提高了代码的安全性。pyc的内容与python的版本相关,不同版本编译的pyc文件不一样
待安装成功后,输入命令:uncompyle6 ‘/root/crypto11.pyc’ 输出python代码
import base64
def encode1(ans):
s = ''
for i in ans:
x = ord(i) ^ 36
x = x + 25
s += chr(x)
return s
def encode2(ans):
s = ''
for i in ans:
x = ord(i) + 36
x = x ^ 36
s += chr(x)
return s
def encode3(ans):
return base64.b32encode(ans)
flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:
print 'correct'
else:
print 'wrong'
再根据相反编译,给它弄一个解密
import base64
def decode1(ans):
s = ''
for i in ans:
x = ord(i) - 25
x = x ^ 36
s += chr(x)
return s
def decode2(ans):
s = ''
for i in ans:
x = i ^ 36
x = x - 36
s += chr(x)
return s
def decode3(ans):
return base64.b32decode(ans)
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
flag=decode1(decode2(decode3(final)))
print(flag)
攻防世界 easy_ecc
这题是自己写代码,不会写,也没看懂,于是套用大佬的代码做出来,直接运行,输入相应值
import collections
import random
EllipticCurve = collections.namedtuple('EllipticCurve', 'name p a b g n h')
curve = EllipticCurve(
'secp256k1',
# Field characteristic.
p=int(input('p=')),
# Curve coefficients.
a=int(input('a=')),
b=int(input('b=')),
# Base point.
g=(int(input('Gx=')),
int(input('Gy='))),
# Subgroup order.
n=int(input('k=')),
# Subgroup cofactor.
h=1,
)
# Modular arithmetic ##########################################################
def inverse_mod(k, p):
"""Returns the inverse of k modulo p.
This function returns the only integer x such that (x * k) % p == 1.
k must be non-zero and p must be a prime.
"""
if k == 0:
raise ZeroDivisionError('division by zero')
if k < 0:
# k ** -1 = p - (-k) ** -1 (mod p)
return p - inverse_mod(-k, p)
# Extended Euclidean algorithm.
s, old_s = 0, 1
t, old_t = 1, 0
r, old_r = p, k
while r != 0:
quotient = old_r // r
old_r, r = r, old_r - quotient * r
old_s, s = s, old_s - quotient * s
old_t, t = t, old_t - quotient * t
gcd, x, y = old_r, old_s, old_t
assert gcd == 1
assert (k * x) % p == 1
return x % p
# Functions that work on curve points #########################################
def is_on_curve(point):
"""Returns True if the given point lies on the elliptic curve."""
if point is None:
# None represents the point at infinity.
return True
x, y = point
return (y * y - x * x * x - curve.a * x - curve.b) % curve.p == 0
def point_neg(point):
"""Returns -point."""
assert is_on_curve(point)
if point is None:
# -0 = 0
return None
x, y = point
result = (x, -y % curve.p)
assert is_on_curve(result)
return result
def point_add(point1, point2):
"""Returns the result of point1 + point2 according to the group law."""
assert is_on_curve(point1)
assert is_on_curve(point2)
if point1 is None:
# 0 + point2 = point2
return point2
if point2 is None:
# point1 + 0 = point1
return point1
x1, y1 = point1
x2, y2 = point2
if x1 == x2 and y1 != y2:
# point1 + (-point1) = 0
return None
if x1 == x2:
# This is the case point1 == point2.
m = (3 * x1 * x1 + curve.a) * inverse_mod(2 * y1, curve.p)
else:
# This is the case point1 != point2.
m = (y1 - y2) * inverse_mod(x1 - x2, curve.p)
x3 = m * m - x1 - x2
y3 = y1 + m * (x3 - x1)
result = (x3 % curve.p,
-y3 % curve.p)
assert is_on_curve(result)
return result
def scalar_mult(k, point):
"""Returns k * point computed using the double and point_add algorithm."""
assert is_on_curve(point)
if k < 0:
# k * point = -k * (-point)
return scalar_mult(-k, point_neg(point))
result = None
addend = point
while k:
if k & 1:
# Add.
result = point_add(result, addend)
# Double.
addend = point_add(addend, addend)
k >>= 1
assert is_on_curve(result)
return result
# Keypair generation and ECDHE ################################################
def make_keypair():
"""Generates a random private-public key pair."""
private_key = curve.n
public_key = scalar_mult(private_key, curve.g)
return private_key, public_key
private_key, public_key = make_keypair()
print("private key:", hex(private_key))
print("public key: (0x{:x}, 0x{:x})".format(*public_key))
注意一定要将得到的公钥k坐标去掉开头的0x,因为是x+y,所以要将十六进制数转换为十进制数再进行相加
攻防世界 give_you_flag
一看到这种动态图片,并且其中还有二维码,想到了Stegsolve,但是速度太快,得到的并不是真正二维码
发现三边都缺了一个角,一般二维码的角都长这样,使用ps加上去一下即可
File Format: 文件格式,这个主要是查看图片的具体信息
Data Extract: 数据抽取,图片中隐藏数据的抽取
Frame Browser: 帧浏览器,主要是对GIF之类的动图进行分解,动图变成一张张图片,便于查看
Image Combiner: 拼图,图片拼接
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)