随便做各种题(无规律)

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"文件相类似),用debugWINHEX,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: 拼图,图片拼接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值