PWN入门到入狱-Integer
PWN入门到入狱-Integer关于整数的异常情况主要有三种:
溢出
只有有符号数才会发生溢出。有符号数最高位表示符号,在两正或两负相加时,有可能改变符号位的值,产生溢出
溢出标志 OF 可检测有符号数的溢出
回绕
无符号数 0-1 时会变成最大的数,如 1 字节的无符号数会变为 255,而 255+1 会变成最小数 0。
进位标志 CF 可检测无符号数的回绕
截断
将一个较大宽度的数存入一个宽度小的操作数中,高位发生截断
有符号整数溢出
上溢出
1234int i;i = INT_MAX; // 2 147 483 647i++;printf("i = %d\n", i); // i = -2 147 483 648
下溢出
123i = INT_MIN; // -2 147 483 648i--;printf("i = %d\n", i); // i = 2 147 483 647
无符号数回绕涉及无符号数的计算永远不会溢出,因为不能用结果为无符号整数表示的结果值被该类型可以表示的最大值加 1 之和取模减(reduced modulo)。因为回绕, ...
PWN入门到入狱-Heap
PWN入门到入狱-Heap堆的漏洞利用核心就是劫持堆分配的位置,使程序把堆分配到我们指定的地址然后填入数据,造成代码与数据的混淆。
堆溢出堆溢出是指程序向某个堆块中写入的字节数超过了堆块本身可使用的字节数(之所以是可使用而不是用户申请的字节数,是因为堆管理器会对用户所申请的字节数进行调整,这也导致可利用的字节数都不小于用户申请的字节数),因而导致了数据溢出,并覆盖到物理相邻的高地址的下一个堆块。
堆溢出漏洞发生的基本前提是
程序向堆上写入数据。
写入的数据大小没有被良好地控制。
一般来说,我们利用堆溢出的策略是
1.覆盖与其物理相邻的下一个 chunk的内容。
prev_size
size,主要有三个比特位,以及该堆块真正的大小。
NON_MAIN_ARENA
IS_MAPPED
PREV_INUSE
the True chunk size
chunk content,从而改变程序固有的执行流。
2.利用堆中的机制(如 unlink 等 )来实现任意地址写入( Write-Anything-Anywhere)或控制堆块中的内容等效果,从而来控制程序的执行流。
堆溢出中比较重 ...
PWN入门到入狱-Format
PWN入门到入狱-Format格式化输出函数和格式字符串
函数
1234567#include <stdio.h>int printf(const char *format, ...);int fprintf(FILE *stream, const char *format, ...);int dprintf(int fd, const char *format, ...);int sprintf(char *str, const char *format, ...);int snprintf(char *str, size_t size, const char *format, ...);
转换指示符
字符
类型
使用
d
4-byte
Integer
u
4-byte
Unsigned Integer
x
4-byte
Hex
s
4-byte ptr
String
c
1-byte
Character
长度
字符
类型
使用
hh
1-byte
char
h
2-byte
short int
l
4-by ...
PWN入门到入狱-Stack
PWN入门到入狱-StackELF有以下几种方法操纵ELF:
symbols['a_function'] 找到 a_function 的地址
got['a_function'] 找到 a_function的 got
plt['a_function'] 找到 a_function 的 plt
next(elf.search("some_characters")) 找到包含 some_characters(字符串,汇编代码或者某个数值)的地址.
one_gadget
概要
one_gadget是libc中存在的一些执行execve("/bin/sh", NULL, NULL)的片段,当可以泄露libc地址,并且可以知道libc版本的时候,可以使用此方法来快速控制指令寄存器开启shell。
相比于system("/bin/sh"),这种方式更加方便,不用控制RDI、RSI、RDX等参数。运用于不利构造参数的情况。
安装与使用方法
首先需要安装Ruby(Ruby < 2. ...
PWN入门到入狱
PWN入门到入狱配置调试环境
skysider/pwndocker - Docker Image | Docker Hub
[原创]Docker搭建pwn环境-Pwn-看雪论坛-安全社区|安全招聘|bbs.pediy.com
pwntools + gdb + pwndbg + ROPgadget + one_gadget + tmux
Docker
在共享文件夹中编写exp脚本
推荐使用Sublime,用其中的snippet可以快速编写exp
在docker中运行exp脚本和调试
终端复用tmux工具
control+B+% 左右分屏
control+B+“ 上下分屏
control+B+: 输入命令
set -g mouse on 可以通过鼠标点击切换窗口
pwntools 模板1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787 ...
Black Hat Python 2nd 11
攻击取证取证人员通常是在发现缺陷事件后,或者是为了确定是否发生了“事件”而被叫来的人。他们通常需要受影响机器的 RAM (笔者注: Random Access Memory,随机存取存储器)的快照,以便捕获仅临时存储在内存中的加密密钥或其他信息。幸运的是,一个有才华的开发团队已经创建了一个完整的 Python 框架 Volatility ,它适合这个任务,被称为高级内存取证框架。事件响应者、取证人员和恶意软件分析师也可以将 Volatility 用于其他各种任务,包括检查内核对象、检查和转储进程信息等。
(笔者注: Volatility 是一款开源内存取证框架,能够对导出的内存镜像进行分析,通过获取内核数据结构,使用插件获取内存的详细情况以及系统的运行状态。特点:开源: Python 编写,易于和基于 python 的主机防御框架集成;支持多平台:Windows,Mac,Linux 全支持;易于扩展:通过插件来扩展 Volatility 的分析能力)
尽管 Volatility 是防御方的软件,但任何足够强大的工具都可以用于进攻或防守。我们将使用 Volatility 对目标用户执行侦 ...
Black Hat Python 2nd 10
WINDOWS PRIVILEGE ESCALATION – Windows 权限提升目前你成功进入到一个有趣的 Windows 网络中。也许你利用了远程堆溢出,或者你利用网络钓鱼进入。是时候开始寻找提升特权的方法了。
即使您已经以系统管理员或管理员的身份运行,您也可能希望有多几种方法来获得这些权限,以防补丁程序周期终止您的访问。在您的背包中有一个特权提升目录也很重要,因为一些企业运行的软件可能很难在您自己的环境中进行分析,并且您可能无法运行该软件,除非您在相同规模或构成情况的企业网络中。
在典型的权限提升中,您会利用脆弱编码的驱动程序或本机 Windows 内核问题,但是如果您使用低质量的利用或在利用过程中出现问题,您将面临导致系统不稳定的风险。让我们探索一些在 Windows 上获得提升权限的其他方法。大型企业中的系统管理员通常会安排执行子进程的任务或服务,或者运行 VBScript 或 PowerShell 脚本来自动化运行。供应商也经常会设置自动化的内置任务,它们的行为方式相同。我们将尝试利用任何高特权进程来处理文件或执行低特权用户可写的二进制文件。您有无数种方法可以尝试提升 ...
Black Hat Python 2nd 9
FUN WITH EXFILTRATION–数据泄露的乐趣进入目标网络只是战斗的一部分。为了利用您的访问权限,您希望能够从目标系统中导出文档、电子表格或其他数据。根据防御机制的不同,攻击的最后一部分可能会很棘手。可能有本地或远程系统(或两者的组合)来验证打开远程连接的进程,以及确定这些进程是否能够在内部网络之外发送信息或发起连接。
在本章中,我们将创建工具,使您能够导出加密数据。首先,我们将编写一个脚本来加密和解密文件。然后,我们将使用该脚本加密信息,并通过使用三种方法从系统中传输信息:电子邮件、文件传输和发布到web服务器。对于这些方法中的每一种,我们都将编写一个各平台通用的工具和一个仅适用于 Windows 的工具。
对于仅限于 Windows 的函数,我们将依赖于我们在第8章中使用的 PyWin32 库,尤其是 win32com 包。 Windows COM (Component Object Model,组件对象模型)自动化有许多实际用途——从与基于网络的服务交互到将微软 Excel 电子表格嵌入到您自己的应用程序中。从 XP 开始,所有版本的 Windows 都允许您将 In ...
Black Hat Python 2nd 8
COMMON TROJANING TASKS ON WINDOWS–WINDOWS上常见的特洛伊木马任务当您部署特洛伊木马时,您可能希望使用它执行一些常见的任务:抓取按键情况、截图和执行 shellcode ,以便为像 CANVAS 或 Metasploit 这样的工具提供交互式会话。本章重点介绍在Windows系统上执行这些任务。我们将使用一些沙盒检测技术来确定我们是否可以在防病毒或取证沙盒中运行。这些模块将很容易修改,并且可以在第7章开发的特洛伊木马框架内工作。在后面的章节中,我们将探讨您可以使用特洛伊木马实现的提升权限技术。每种技术都有自己的挑战和被终端用户或防病毒解决方案发现的可能性。
我们建议您在植入特洛伊木马前,认真细心地模拟您的目标,以便您在活动目标上进行测试之前可以在实验室中测试模块。让我们从创建一个简单的键盘记录器开始。
有趣的键盘记录Keylogging ,即使用隐藏程序来记录连续的击键,是本书中最古老的技巧之一,今天它仍然被用于各种级别的秘密行动中。攻击者仍然在使用它,因为它在捕获凭据或对话等敏感信息方面极其有效。
一个名为 PyWinHook 的优秀的 Pyth ...
Black Hat Python 2nd 7
GITHUB COMMAND AND CONTROL – GitHub 命令和控制假设你入侵了一台机器。现在,您希望它自动执行任务,并向您报告发现的情况。在这一章中,我们将创建一个 Trojan (特洛伊木马)框架,它在远程机器上看起来是无害的,但我们将能够为它分配各种作恶的任务。
创建一个可靠的特洛伊木马框架最具挑战性的一个方面是弄清楚如何控制、更新和接收来自植入程序的数据。至关重要的是,您需要一种相对通用的方式将代码发送到远程特洛伊木马。首先,它的灵活性将允许您在每个系统上执行不同的任务。此外,有时您可能需要您的特洛伊木马选择性地运行针对某些目标操作系统的代码,而不是其他操作系统的代码。
尽管多年来黑客依靠 Internet Relay Chat (IRC 因特网中继聊天协议)甚至推特等技术设计了许多创造性的命令和控制方法,但我们将尝试一种实际上为代码设计的服务。我们将使用 GitHub 作为存储我们植入配置信息的一种方式,以及从受害者系统中泄露数据的一种手段。此外,我们将托管植入程序执行任务所需的任何模块到 GitHub 上。在设置这一切的时候,我们将黑掉 Python 的原生库 ...