[MAR DASCTF明御攻防赛]enjoyit_1

news/2024/12/6 18:31:10/

00 查看附件信息

C#、32bit
在这里插入图片描述
运行发现茶什么的,输入个1发现有回显,考虑分析代码在这里插入图片描述

01 分析代码

将其拖入 dnSpy 32bit,右键进入入口点
在这里插入图片描述
主要代码 a:

using System;
using System.Text;
using System.Threading;// Token: 0x02000003 RID: 3
internal class a
{// Token: 0x06000004 RID: 4 RVA: 0x0000209C File Offset: 0x0000029Cprivate static void a(string[] A_0){string text = "";byte[] a_ = new byte[26];new byte[26];byte[] array = new byte[8];byte[] array2 = new byte[]{2,5,4,13,3,84,11,4,87,3,86,3,80,7,83,3,0,4,83,94,7,84,4,0,1,83,3,84,6,83,5,80};uint[] array3 = new uint[]{288U,369U};b b = new b();Console.WriteLine("Welcome to my room, and please enjoy some tea by write what you want in this machine:");string text2 = Console.ReadLine();   if (!b.b(text2))    //判断每位字符的ASCII 码是否小于"_"或大于"z" (_`[a-z]){Thread.Sleep(1000000);}if (b.c(text2) != "yQXHyBvN3g/81gv51QXG1QTBxRr/yvXK1hC=")    //将输入的字符进行base64变表加密{Console.WriteLine("Oops");Thread.Sleep(1000000);    //睡眠....100w s}Console.WriteLine("And,wait a second!");for (int i = 0; i < 100000; i++)    //睡眠....n秒{Thread.Sleep(1000);Console.WriteLine(i + 1);}a_ = Encoding.Default.GetBytes(text2);b.b(ref array3, a_);    //进行加密,看的脑袋大,考虑到可以直接照搬,就没分析Console.WriteLine("Here is your tea, and flag!");text += array3[0].ToString("x2");    //这里没看懂,没学过c#的我痛哭,呜呜呜text += array3[1].ToString("x2");    //看懂了 ToString("x2") 转字符串,十六进制,小写,两位,连起来就不会了。现安的C#环境,也没整明白,我是笨比array = Encoding.Default.GetBytes(text);Console.Write("flag{");for (int j = 0; j < 32; j++)    //蜜汁算法{byte[] array4 = array2;int num = j;array4[num] ^= array[j % array.Length];}Console.Write(Encoding.Default.GetString(array2));Console.Write("}");Console.ReadKey();}
}

主要代码 b:

	第一次验证输入内容及base64变表加密(换表加密):
using System;// Token: 0x02000004 RID: 4
internal class b
{// Token: 0x06000006 RID: 6 RVA: 0x00002234 File Offset: 0x00000434public bool b(string A_0){for (int i = 0; i < A_0.Length; i++){if (A_0[i] < '_' || A_0[i] > 'z'){Console.WriteLine("Sorry,we don't have this tea");return false;}}return true;}// Token: 0x06000007 RID: 7 RVA: 0x00002278 File Offset: 0x00000478public string c(string A_0){string text = "";int num = A_0.Length / 3;int i;for (i = 0; i < num; i++){byte index = Convert.ToByte((int)('?' & A_0[i * 3] >> 2));byte index2 = Convert.ToByte((int)((int)(A_0[i * 3] & '\u0003') << 4 | A_0[1 + i * 3] >> 4));byte index3 = Convert.ToByte((int)((int)(A_0[1 + i * 3] & '\u000f') << 2 | A_0[2 + i * 3] >> 6));byte index4 = Convert.ToByte((int)(A_0[2 + i * 3] & '?'));text += this.a[(int)index].ToString();text += this.a[(int)index2].ToString();text += this.a[(int)index3].ToString();text += this.a[(int)index4].ToString();}if (i * 3 < A_0.Length){byte index = Convert.ToByte((int)('?' & A_0[i * 3] >> 2));byte index2;byte index3;byte index4;if (i * 3 + 1 < A_0.Length){index2 = Convert.ToByte((int)((int)(A_0[i * 3] & '\u0003') << 4 | A_0[i * 3 + 1] >> 4));index3 = Convert.ToByte((int)((int)(A_0[i * 3 + 1] & '\u000f') << 2));index4 = 64;}else{index2 = Convert.ToByte((int)((int)(A_0[i * 3] & '\u0003') << 4));index3 = 64;index4 = 64;}text += this.a[(int)index].ToString();text += this.a[(int)index2].ToString();text += this.a[(int)index3].ToString();text += this.a[(int)index4].ToString();}return text;}// Token: 0x06000008 RID: 8 RVA: 0x00002488 File Offset: 0x00000688public void b(byte[] A_0){string text = "";for (int i = 0; i < A_0.Length; i++){text += A_0[i].ToString("x2");}Console.WriteLine(text);}// Token: 0x06000009 RID: 9 RVA: 0x000024C8 File Offset: 0x000006C8public void b(ref uint[] A_0, byte[] A_1){uint num = 2654435464U;uint num2 = A_0[0];uint num3 = A_0[1];uint num4 = 0U;for (int i = 0; i < 32; i++){num2 += ((num3 << 4 ^ num3 >> 5) + num3 ^ num4 + (uint)A_1[(int)(num4 & 3U)]);num4 += num;num3 += ((num2 << 4 ^ num2 >> 5) + num2 ^ num4 + (uint)A_1[(int)(num4 >> 11 & 3U)]);}A_0[0] = num2;A_0[1] = num3;}// Token: 0x0600000A RID: 10 RVA: 0x00002534 File Offset: 0x00000734public void c(ref uint[] A_0, byte[] A_1){uint num = 2654435769U;uint num2 = A_0[0];uint num3 = A_0[1];uint num4 = num * 32U;for (int i = 0; i < 32; i++){num3 -= ((num2 << 4 ^ num2 >> 5) + num2 ^ num4 + (uint)A_1[(int)(num4 >> 11 & 3U)]);num4 -= num;num2 -= ((num3 << 4 ^ num3 >> 5) + num3 ^ num4 + (uint)A_1[(int)(num4 & 3U)]);}A_0[0] = num2;A_0[1] = num3;}// Token: 0x04000003 RID: 3public string a = "abcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXYZ=";    //变表
}

re.py:

使用注释上边的代码可以得到一串蜜汁字符串 'combustible_oolong_tea_plz?' 可以看到最后带一个 "?",
在第一轮输入验证限制了输入,其中没有 '?',所以正确输入应该是 'combustible_oolong_tea_plz'
import base64
enc = 'yQXHyBvN3g/81gv51QXG1QTBxRr/yvXK1hC='    #输入数据
intab =  'abcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJKLMNOPQRSTUVWXY='     #变表
outtab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'    #一般表
transtab = str.maketrans(intab,outtab)enc = enc.translate(transtab)
print(base64.b64decode(enc).decode())#上边是base64变表解密,下边是模拟算法没模拟明白
"""
A_0="combustible_oolong_tea_plz"
A_00=list(A_0)
j=0
k=[]
for i in A_00:k.append(ord(i))
print(k)
array3=[288,369]
num=2654435464
num2=array3[0]
num3=array3[1]
num4=0for i in range(32):num2 += ((num3 << 4 ^ num3 >> 5) + num3 ^ num4 + k[(num4 & 3)])num4 += numnum3 += ((num2 << 4 ^ num2 >> 5) + num2 ^ num4 + k[(num4 >> 11 & 3)])s0=num2
s1=num3
s0str=str(s0)
for i in range(len(s0str)):print(i)break
print(len(s0str))
st0=hex(s0)
st1=hex(s1)print(s0)
print(s1)
print(st0)
print(st1)
"""

03 使用 dnSpy 修改代码

因为接下来有印度 sleep,根本动不了,所以考虑修改代码
右键弹出下图窗口,因为编辑类和编辑方法都会报错,但是我们要修改数字,特征十分明显,所以我们选择编辑 IL指令
在这里插入图片描述
按照下图进行更改,均单击更改为1,确定在这里插入图片描述
在这里插入图片描述
文件 -> 全部保存,保存到新文件,打开新文件,输入上边得到的 ‘combustible_oolong_tea_plz’ 得到 flag在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/604105.html

相关文章

Cobalt Strike 的安装与简单使用

一、什么是Cobalt Strike Cobalt Strike 是一个为对手模拟和红队行动而设计的平台&#xff0c;主要用于执行有目标的攻击和模拟高级威胁者的后渗透行动。 二、如何使用 Cobalt Strike 分为服务器端和客户端&#xff08;在同一压缩文件中&#xff0c;只是运行的文件不同&…

DC1靶机渗透测试

Vuln hub 渗透测试实战 Vulnhub是一个开放的安全靶场&#xff0c;我们可以使用它所提供的环境进行渗透测试实战。 DC所有环境下载地址&#xff1a;https://www.vulnhub.com/series/dc,199/ 环境搭建&#xff1a; 1.下载 OVA&#xff08;Open Virtualization Appliance&…

DC2靶机渗透测试

文章目录目标&#xff1a;收集 5 个 flag一、信息收集1.主机发现2.端口扫描二、漏洞挖掘1.访问靶机 80 端口&#xff0c;查看其使用了什么 cms2.目录扫描3.扫描用户名4.生成字典5.爆破密码6.使用账号密码登陆&#xff0c;在登陆 Jerry 时发现 flag27.使用 ssh1.使用 jerry 登陆…

DC3靶机渗透测试

文章目录环境版本&#xff1a;开幕雷击&#xff1a;解决方法&#xff1a;一、信息收集1.主机发现2.端口扫描二、漏洞挖掘1.访问 ip2.目录扫描及版本扫描3.搜索 joomla 框架对应版本漏洞&#xff0c;并打印详细信息4.使用 SQLmap 对 joomla 的数据库进行攻击5.使用 john 对密码 …

DC4靶机渗透测试

文章目录环境版本&#xff1a;一、信息收集1.主机发现2.端口扫描二、漏洞挖掘1.访问目标 ip&#xff0c;查看内容2.使用 BP 进行爆破密码3.使用密码登陆4.使用 BP 查看执行命令流量包5.替换命令来使用 nc 建立连接7.使用 nc 将靶机文件传输到攻击机8.使用 hydra 爆破 ssh 密码9…

DC5靶机渗透测试

文章目录环境版本&#xff1a;一、信息收集1.主机发现2.端口扫描二、漏洞发现1.访问靶机 web 服务2.尝试利用文件包含漏洞3.尝试将恶意文件写入日志4.利用文件包含访问日志并进行利用三、提权1.查看可以 root 权限使用的命令2.漏洞搜索3.查找 exp&#xff0c;并查看内容4.使用 …

DC6靶机渗透测试

环境版本&#xff1a; VMware pro 16Kali 2021.1(虚拟机)DC-6(虚拟机) 一、信息收集 1.主机发现 arp-scan -l2.端口扫描 nmap -A -p- 192.168.2.170发现开启了 22 端口&#xff1a;ssh服务 80 端口&#xff1a;http服务&#xff0c;wordpress框架 域名&#xff1a;wordy&a…

DC7靶机渗透测试

文章目录环境版本&#xff1a;一、信息收集1.主机发现2.端口扫描二、漏洞扫描/利用1.访问靶机 web 服务2.信息收集3.ssh 连接4.查看文件权限5.查看文件内容7.利用框架漏洞8.安装 PHP 插件10.漏洞利用总结&#xff1a;环境版本&#xff1a; VMware pro 16Kali 2021.1(虚拟机)DC…