BUUCTF刷题笔记2


1.rsa

首先下载好文件后将pub.key文件后缀改成txt
在这里插入图片描述
然后百度查到公尺解析
在这里插入图片描述
分解N的网站,得到p,q
在这里插入图片描述
再用工具RSA Tool2 by Te!就能获取到 d=81176168860169991027846870170527607562179635470395365333547868786951080991441

最后上脚本求flag:

import rsa

e= 65537
n= 86934482296048119190666062003494800588905656017203025617216654058378322103517
p= 285960468890451637935629440372639283459
q= 304008741604601924494328155975272418463
d= 81176168860169991027846870170527607562179635470395365333547868786951080991441

key = rsa.PrivateKey(n,e,d,q,p)        

with open("C:\\Users\\MIKEWYW\\Desktop\\flagenc.txt","rb") as f: 

   f = f.read()
   print(rsa.decrypt(f,key))  

最后flag为flag{decrypt_256}

2.[FlareOn4]login

下载好附件后打开是一个网页,需要输入flag,F12查看源代码
在这里插入图片描述

找到主要的部分

document.getElementById("prompt").onclick = function () {
                var flag = document.getElementById("flag").value;
                var rotFlag = flag.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);});
                if ("PyvragFvqrYbtvafNerRnfl@syner-ba.pbz" == rotFlag) {
                    alert("Correct flag!");
                } else {
                    alert("Incorrect flag, rot again");
                }
            }

看到关键的一条加密:

String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);

分开成三部分进行分析:
1:设res1 = c <= “Z” ? 90 : 122
每次传入一个字母,看看是大写还是小写,并且对应z的ascii码。
2:设res2 = c.charCodeAt(0) + 13
将当前字符的ascii值加13
3: res1 >= res2 ? res2 : res2 - 26
最后看看加完的值是不是大于当前的Z,如果是的话就减26,否则输出+13后的结果,也就是res2
那么就可以反过来了。-13之后小于当前字符对应的A的时候,就+26,否则就直接-13

脚本:

enc = 'PyvragFvqrYbtvafNerRnfl@syner-ba.pbz'
flag = ''
for i in enc:
    if ord(i) >= 65 and ord(i) <= 90:
        if ord(i) - 13 < 65 :
            flag += chr(ord(i) + 13)
        else:
            flag += chr(ord(i) - 13)
    elif ord(i) >= 97 and ord(i) <= 122:
        if ord(i) - 13 < 97 :
            flag += chr(ord(i) + 13)
        else:
            flag += chr(ord(i) - 13)
    else:
        flag += i

print(flag)

最后flag为flag{ClientSideLoginsAreEasy@flare-on.com}

3.CrackRTF

首先下载好查壳
在这里插入图片描述
无壳

F5反编译找到主函数
在这里插入图片描述
分析主函数
在这里插入图片描述
可知密码长度为6位
其中这个atoi这个函数
在这里插入图片描述
看大佬的wp是将字符串转化成整形的,并且转化为整形后的数要大于100000
在这里插入图片描述
这个就是将@DBApp连接到6位密码之后
然后进入sub_40100A函数
在这里插入图片描述
进行哈希加密
代码中的0x8004是标识符
在这里插入图片描述
并且是sha1的加密算法
所以我们可以用python中的hashlib模块把前六位密码爆破出来(100001-999999)

脚本如下

import hashlib
string='@DBApp'
for i in range(100000,999999):
    flag=str(i)+string
    x = hashlib.sha1(flag.encode("utf8"))
    y = x.hexdigest()
    if "6e32d0943418c2c33385bc35a1470250dd8923a9" == y:
            print(flag)
            break

爆破最终为123321@DBApp
然后继续第二部分

第二部分也是6位,后面部分太难,自己实力太菜

4.[WUSTCTF2020]level1

首先查壳
在这里插入图片描述
无壳

找到主函数,F5反编译查看伪代码
在这里插入图片描述
将输出的数字存在了另一个文件中,output中就是最后输出的数字

a = [198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000]

for i in range(19):
    if ((i+1) & 1):
        print(chr(a[i] >> (i+1)),end="")
    else:
        print (chr(a[i] // (i+1)),end="")

输出得到ctf2020{d9-dE6-20c},改成flag
最终flag为flag{d9-dE6-20c}

5.[GUET-CTF2019]re

查壳
在这里插入图片描述
需要脱壳
在这里插入图片描述
找到主函数后
在这里插入图片描述
打开sub_4009AE函数
在这里插入图片描述
其中缺少a1[6]的值

以及a1[17]和a1[16]需要换一下位置

当a1[0]-a1[31],满足上面函数中的条件就得到最终flag,否则返回0

脚本如下:

a = []`
a.append(166163712 // 1629056)
a.append(731332800 // 6771600)
a.append(357245568 // 3682944)
a.append(1074393000 // 10431000)
a.append(489211344 // 3977328)
a.append(518971936 // 5138336)
a.append(406741500 // 7532250)
a.append(294236496 // 5551632)
a.append(177305856 // 3409728)
a.append(650683500 // 13013670)
a.append(298351053 // 6088797)
a.append(386348487 // 7884663)
a.append(438258597 // 8944053)
a.append(249527520 // 5198490)
a.append(445362764 // 4544518)
a.append(981182160 // 10115280)
a.append(174988800 // 3645600)
a.append(493042704 // 9667504)
a.append(257493600 // 5364450)
a.append(767478780 // 13464540)
a.append(312840624 // 5488432)
a.append(1404511500 // 14479500)
a.append(316139670 // 6451830)
a.append(619005024 // 6252576)
a.append(372641472 // 7763364)
a.append(373693320 // 7327320)
a.append(498266640 // 8741520)
a.append(452465676 // 8871876)
a.append(208422720 // 4086720)
a.append(515592000 // 9374400)
a.append(719890500 // 5759124)

flag = ""
for x in a:
    flag = flag + chr(x)
print(flag)

但是还缺少a1[6]的值,需要我们爆破,也可以一个一个的试,最终a1[6]的值是1

所以最后的flag为

flag{e165421110ba03099a1c039337}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值