NEEPU Sec 2023公开赛Reverse题目复现

news/2024/5/19 20:53:22 标签: Reverse, Neepu Sec 公开赛, CTF, 经验分享

文章目录

  • 一.Base
  • 二.How to use python
    • 1.程序逻辑分析
    • 2.爆破flag[11]~flag[14]
    • 3.爆破sha1
    • 4.sha256掩码爆破
  • 三.IKUN检查器
    • 1.查看程序信息
    • 2.分析程序逻辑
    • 3.button1_conClick函数
    • 4.check1函数
    • 5.check2函数
    • 6.check3函数
    • 7.check4函数
    • 8.check5函数
  • 四.junk code
    • 1.使用32位动态调试工具调试
    • 2.使用CheatEngine

一.Base

题目逻辑
1.接受输入字符串
2.encode1加密
3.encode2加密
4.将加密后的flag进行比对判断
在这里插入图片描述
encode1是个凯撒加密,位移为3
在这里插入图片描述
encode2是base64
在这里插入图片描述
解密:
先base64解密后凯撒得到welcometotheworldofctf

二.How to use python

1.程序逻辑分析

import base64
import hashlib
import sys

def abort():
    print("Wrong flag!")
    sys.exit(1)
print("Please input the flag:")
flag = input()

if len(flag) != 29:
    abort()
if flag[:5] != 'Neepu':
    abort()
if flag[16]!='a' or flag[17]!='_':
    abort()
if flag[22]!=flag[17]:
    abort()
if flag[28:] != '}':
    abort()
if base64.b64encode(flag[-4:].encode()) != b'X2t1fQ==': 
#_ku} 从倒数第四个字符开始切片,包括倒数第四个字符 base64解码即可
    abort()
if flag[-2:-15:-3].encode().hex() != '75316c745f':  
#u1lt_ 倒数第二个到倒数第15个,每隔3个取一次 十六进制转字符串即可
    abort()
if sum(ord(x) * 10000 ** i for i, x in enumerate(flag[11:15][::-1])) !=110009500490115:
#下标11到14共4个字符爆破得到n_1s
    abort()
if hashlib.md5(flag[9:3:-2].encode('utf-8')).hexdigest()!='db46a959e0f94c0a8977411ab69df11a':
#hy{ 下标九到三 查md5在线网站或者爆破都可以
    abort()
if hashlib.sha1((flag[6]+flag[8]+flag[10]).encode()).hexdigest()!= 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d':
#Pt0 sha1爆破
    abort()
if hashlib.sha256(flag.encode()).hexdigest() != 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892':
#sha256爆破
    abort()

print("You are right!")

2.爆破flag[11]~flag[14]

for a in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
    for b in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
        for c in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
            for d in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                str=a+b+c+d
                if(sum(ord(x)*10000**i for i,x in enumerate(str[::-1]))==110009500490115):
                    print(str)#n_1s

3.爆破sha1

md5在线解密网站:https://www.bejson.com/enc/md5dsc/自行解密
sha1爆破

hashcat -a 3 -m 100 dcb7ec019a90e41f85181ec9f1da642a8ced1b2d ?a?a?a

在这里插入图片描述

4.sha256掩码爆破

最后组合到的掩码Neepu{Pyth0n_1s_a_t?a?al?a?a1_ku}

hashcat -a 3 -m 1400 a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892 Neepu{Pyth0n_1s_a_t?a?al?a?a1_ku}

或者使用爆破脚本

import hashlib

    string='Neepu{Pyth0n_1s_a_t??l??1_ku}'
    for a in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
        for b in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
            for c in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                for d in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                    string_try = string.replace('?', a, 1).replace('?', b, 1).replace('?', c, 1).replace('?', d, 1)
                    hash_object = hashlib.sha256(string_try.encode())
                    hex_dig = hash_object.hexdigest()
                    if(hex_dig=='a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892'):
                        print(string_try)
                        

三.IKUN检查器

1.查看程序信息

可以发现是C#编写的,使用dnSpy分析
dnSpy项目地址:https://github.com/dnSpy/dnSpy
在这里插入图片描述

2.分析程序逻辑

​将程序用dnSpy打开后,点击From1,可以找到check1~check5函数
在这里插入图片描述
在这里插入图片描述
tips:可以使用上方的搜索功能搜索关键字符串从而定位
在这里插入图片描述
在这里插入图片描述

3.button1_conClick函数

可以看到做了对flag的判断,分别截取flag的不同部分并调用不同的check函数最后将加密结果拼接起来并输出结果
在这里插入图片描述

4.check1函数

md5加密,解密得到1998-8-2
在这里插入图片描述

5.check2函数

check2是sha1
在这里插入图片描述

很奇怪参考wp:Neepu Re Writeup里说sha1也是md5,而且真的能解密出来jinitaimei
查了一下也没看出个所以然,如果有大佬知道请告诉我

在这里插入图片描述

6.check3函数

给了个’-’
在这里插入图片描述
注意是两个字符串所以有两个’-’
在这里插入图片描述
在这里插入图片描述

7.check4函数

AES加密
text是密文,bytes是密钥,并且可以看到Mode是ECB,PaddingMode是PKCS7
在这里插入图片描述
可以使用密码学工具箱解出xiaoheizishiba
在这里插入图片描述

8.check5函数

sha256,也就是把上面得到的结果拼接起来进行hash(也可以运行程序通过验证得到flag)
拼接结果:1998-8-2-jinitaimei-xiaoheizishiba
sha256:b8688fc33b5786095dc70a34ad14b9623905185663fa26dcc75d3b6b1f69999e
flag:Neepu{b8688fc33b5786095dc70a34ad14b9623905185663fa26dcc75d3b6b1f69999e}
在这里插入图片描述

四.junk code

程序貌似会给flag,但是输出速度非常之慢

1.使用32位动态调试工具调试

可以使用32位debug工具调试
打开之后按f9运行程序,然后右键查找字符串
在这里插入图片描述
可以直接找到flagNeepu{it-1s-not-junk-code-1u-1u-the-qq-bin-mat}

在这里插入图片描述

2.使用CheatEngine

附加进程,选择搜索字符串并搜索Neepu{
在这里插入图片描述

然后对该地址右键并选择浏览相关内存区域
在这里插入图片描述
然后就可以看到flag
Neepu{it-1s-not-junk-code-1u-1u-the-qq-bin-mat}
在这里插入图片描述
五.奇怪的ELF
晚点继续复现…


http://www.niftyadmin.cn/n/348245.html

相关文章

vTESTstudio概述

vTESTstudio支持的测试用例编写方式 项目层级结构 从用例编写到测试执行及生成报告的整个流程 vTESTsutido 开发,CANoe执行测试 界面简介 CANoe 创建的测试用例用Test Modules执行,vTESTstudio 创建的测试用例用Test Units执行 先在vTESTstudio里创建pr…

网络安全是一个好专业吗

前言 网络安全作为一个专业领域,在当今数字时代正变得越发重要和关键。无论是企业还是个人,面对着越来越频繁的网络威胁和攻击,网络安全领域的专业人员扮演着至关重要的角色。那么,从一个资深网安工程师的角度来看,网…

通过Docker安装PostgreSQL12+Postgis3

下载PostgreSQL镜像: docker pull postgres:12.4 启动: docker run --name postgres \--restartalways \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v /data/postgresql:/var/lib/postgresql/data \-d postgres:12.4 查看PostgreSQL容器&#xff1a…

好用又便宜的平替苹果笔有哪些?平价的平板触控笔推荐

苹果的Pencil在最近一直都受到市场的追捧,而苹果原装的那款电容笔,除了性能好,还有就是价格贵了点。当然,你也可以使用这款Apple Pencil,但是,如果你不愿意花费太多的钱,可以选择一个平替的电容…

LeetCode:26. 删除有序数组中的重复项

26. 删除有序数组中的重复项 1)题目2)代码3)结果 1)题目 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应…

香港VPS服务器如何屏蔽指定访客ip?

​  如果你是一个香港VPS服务器的管理员,你可能会遇到一些不良用户或者恶意攻击者,这些人会尝试通过不断的访问和攻击你的网站来破坏你的网站的运行。如何保护你的网站,你需要使用一些方法来屏蔽这些指定的访客IP。 首先,你需要…

springboot项目使用redis、springSecurity、jwt实现单点登录的小demo

1、jwt原理 JWT(JSON Web Token)是一种用于身份验证和授权的开放标准(RFC 7519)。它是一种轻量级的令牌格式,用于在网络应用间传输声明(claims)。JWT使用JSON对象来编码声明,并使用…

第03章 流程控制语句

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。 程序设计中规定的三种流程结构,即: 顺序结构 程序从上到下逐行地执行,中间没有任何判断和跳转。 分支结构 根据条件&#xff0…