Art_of_shellcode
发表于|更新于|PWN
|浏览量:
很有用的网址
https://www.exploit-db.com/shellcodes
https://v3rdant.cn/Pwn.The-Art-of-Shellcode/
PWN:手动编写 x64 基于syscall 的 shell code(TODO)_x64 syscall pwn-CSDN博客
文章作者: Zechariah
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Zechariahの博客!
相关推荐

2025-02-06
ELF文件保护机制
Linux ELF文件的保护主要有四种:Canary、NX、PIE、RELRO 1.CanaryStackCanary表示栈的报警保护。在函数返回值之前添加的一串随机数(不超过机器字长)(也叫做cookie),末位为/x00(提供了覆盖最后一字节输出泄露Canary的可能),如果出现缓冲区溢出攻击,覆盖内容覆盖到Canary处,就会改变原本该处的数值,当程序执行到此处时,会检查Canary值是否跟开始的值一样,如果不一样,程序会崩溃,从而达到保护返回地址的目的。 //GCC用法gcc -o test test.c // 默认情况下,不开启Canary保护gcc -fno-stack-protector -o test test.c //禁用栈保护gcc -fstack-protector -o test test.c //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码gcc -fstack-protector-all -o test test.c //启用堆栈保护,为所有函数插入保护代码-fno-stack-protector /-fstack-prote...

2025-02-14
C语言函数原型整理
system当system函数执行的时候会利用到rdi里的参数 writewrite(1,write_got,8)是把write_got地址指向内存的内容的前8个字节写入到标准输出流中。ssize_t write(int fd, const void *buf, size_t count)参数说明:fd:文件描述符,表示要写入数据的文件或设备。文件描述符是一个整数,通常是由open系统调用返回的。例如,0表示标准输入(stdin),1表示标准输出(stdout),2表示标准错误(stderr)。buf:指向要写入数据的缓冲区的指针。这个指针可以是任何类型的数据,因为它是void类型的。count:要写入的字节数。函数会尝试从buf中写入count个字节的数据。返回值:正整数:表示成功写入的字节数,可能会小于count(例如,由于磁盘已满等原因)。0:表示没有写入任何数据。-1:表示发生错误,并设置`errno`来提供进一步的错误信息。 readssize_t read(int fd,void*buf,size_t count)参数说明:fd:是文件描述符buf:...

2025-02-16
AWD学习
AWD流程 改init_hosts.py中的ip格式和port 改submit_flag.py中的提交方式和token 改round_wait_time patch 写exp 批量攻击 扫描IPimport requestsimport threading li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m') def check_ip(i): try: url = f'http://192-168-1-{i}.awd.bugku.cn/' #* response = requests.get(url, timeout=0.5) if response.status_code == 200: li('[+] &...

2025-04-08
NPC_final出题小记(通过fmt进行RSA-CRT Fault Injection)
前言 本题源码改自于2022 Samsung的SecureRunner 本题是一道二进制分析和密码学相结合的题,笔者认为出这种题还是很有趣的。 本题暂已托管至西安电子科技大学CTF终端供大家练习复现 链接:NPC²CTF 2025 - 西电 CTF 终端 其余用途均需通过 关于笔者 中的邮箱征得笔者同意 题目编写源码源码会开源到我的github仓库 解题步骤题目描述小睦的大脑里只有签名正确的命令才能执行,可小睦睡着了,Mortis 太 fw 了不知道私钥。 看来只能和 Mortis 把脑内小剧场破坏的乱七八糟才能拿 flag 了 (简单 Crypto + 签到 PWN = 也许还行的大粪 CRYpwnTO)(需要一点基础的二进制分析能力) 为了降低难度,把这题的密码考点(RSA-CRT Fault Injection)单独编了一个题(即task.zip中的just_a_hint.py)作为提示 靶机连接 连上靶机后忽略没什么用的剧情,结合文字信息和对各种选项的尝试,可以提炼出以下要点 选项1可以获取RSA公钥 选项2可以执行命令,但同时需要输入命令和这条命令正确的si...

2025-02-18
PWN入门-整数溢出
基本数据类型再说整数溢出之前,我们首先的先来说一下C语言中的整型的数据分类。按数据类型分类主要分三类:短整型(short)、整型(int)、长整型(long)按符号分类:有符号、无符号并且每种数据类型都有自己的大小范围整形: #include <stdio.h>int main(){ unsigned short int a = 1; unsigned short int b = 65537; if(a == b){ printf("Int overflow successfully!\n"); } return 0;} 编译gcc -g test.c -o test运行一下程序输出Int overflow successfully!unsigned short int的范围是0~65535,对变量b的赋值超过了这个范围,因此hex的数据最高位被截断,从而变成了0x0001=1 示例XCTF攻防世界int_overflow - 吾爱破解 - 52pojie.cn只...

2025-02-03
PWN入门-栈溢出
缓冲区溢出之栈溢出(strcpy)预备知识缓冲区溢出简单介绍缓冲区溢出:简单的说,缓冲区溢出就是超长的数据向小缓冲区复制,导致数据超出了小缓冲区,导致缓冲区其他的数据遭到破坏,这就是缓冲区溢出。而栈溢出是缓冲区溢出的一种,也是最常见的。只不过栈溢出发生在栈,堆溢出发生在堆,其实都是一样的。 栈的简单介绍栈是一种计算机系统中的数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来),是一种特殊的线性表。栈的操作常用的有进栈(PUSH),出栈(POP),还有常用的标识栈顶和栈底。 进栈(PUSH):将一个数据放入栈里叫进栈(PUSH) 出栈(POP):将一个数据从栈里取出叫出栈(POP) 栈顶:常用寄存器ESP,ESP是栈指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。 栈底:常用寄存器EBP,EBP是基址指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。实例分析 源代码: #include<stdio.h>#include<...
公告
只要将线索与线索两点连线,就能“圆满小红花”解决!