9k8 分钟

【例题 ctfshow pwn82】 # 1. 用处: 在有溢出而无法泄露内容时可以利用 ret2dlresolve 来修改解析的函数,从而达到执行想要的函数的目的 # 2. 原理: 程序通过动态链接来达到节省空间的目的,动态链接会有一个延迟绑定的特点,将连接的过程推迟到了程序运行时 动态链接中有个重要函数 _dl_runtime_resolve(link_map_obj,reloc_index) 来对动态链接的函数进行重定位 利用dl_resolve原因: 1、dl_resolve 函数不会检查对应的函数是否越界,它只会根据我们给定的数据来执行(也就是说其可以偏移到我们构造的地方) 2、
8.3k8 分钟

# 1. 漏洞原因 # ctfWiki 上的示例: c#include <stdio.h>#include <stdlib.h>typedef struct name &#123; char *myname; void (*func)(char *str);&#125; NAME;void myprint(char *str) &#123; printf("%s\n", str); &#125;void printmyname() &#123; printf("call print my name
1.5k1 分钟

# 1. 下载 DVRF 与安装 下载压缩包: https://github.com/praetorian-inc/DVRF 下载后解压: unzip DVRF-master.zip 安装 buildroot(2016.05 版本)【搭建交叉编译环境,这里我的 ubuntu 是 22.04】 hmkdir buildrootcd buildrootwget https://buildroot.org/downloads/buildroot-2016.05.tar.gzhttps://buildr
1.6k1 分钟

# 前言 D-Link DIR-816 A2 是中国台湾友讯(D-Link)公司的一款无线路由器。攻击者可借助‘datetime’参数中的 shell 元字符利用该漏洞在系统上执行任意命令。 # 1. 固件及环境 # 测试环境:Ubuntu16.04 # 固件版本:1.10B05 在官网查找对应版本(D-Link DIR-816 A2) http://www.dlink.com.cn/techsupport/ # 静态分析工具:IDA # 系统文件获取:binwalk https://github.com/ReFirmLa
3.3k3 分钟

# 前置知识 静态编译程序特点 (main 函数里实现非常简单,但是拖入 IDA 后函数窗口里的函数很复杂大概率是静态编译的,因为没有使用系统 libc 所以程序的.text 段会看起来会很复杂) # 1. 查看程序信息 32 位程序,未开启 pie,开启了 nx ida 反汇编查看 main 函数,发现有个 overflow函数 cint __cdecl main(int argc, const char **argv, const char **envp)&#123; overflow(); return 0;&#125;查看 overflow函数 c_BYTE *o
8.4k8 分钟

# 渗透攻击 win10(永恒之黑漏洞 CVE-2020-0796) # 前言 永恒之黑漏洞是源于 SMB 3.1.1 协议中压缩数据时没有对数据进行安全检查,引起了内存破坏漏洞,导致可以被攻击者利用从而远程执行任意代码。 这次利用的是 window10,它的漏洞源于 SMBv3 没有准确处理压缩包,在解压时没有检查客户端传过来的长度是否合法,导致 整数溢出 ,利用该漏洞,黑客可直接远程攻击 SMB 服务端远程执行任意恶意代码 # 环境 kali ip:192.168.232.129 Distributor ID: Kali Description: Kali GNU/Li
1.7k2 分钟

(之前写的没保存,这是第二遍写,我要杀人...) # 栈的结构 # 栈迁移的应用场景 栈迁移主要是为了解决栈溢出空间大小不足的问题,当我们的 ROP 链过长时很可能栈空间不够,并且 ebp 之前的空间其实只是填充一些没什么用的数据,所以需要一个新的地址空间来存放当前的 payload 我们的栈 # 1. leave 和 ret 命令 leave: mov esp , ebp pop ebp #执行pop时,ebp出栈,并且将esp地址内的值放入ebp 这里要注意 mov esp,ebp 是将 ebp 的地址付给 esp,也就是说将 esp 从栈顶拉下来到 ebp 的位
2.3k2 分钟

# 1. 程序分析 32 位程序,开启 NX 源程序: main: cint __cdecl main(int argc, const char **argv, const char **envp)&#123; vul_function(); puts("GoodBye!"); return 0;&#125;vul_function: cssize_t vul_function()&#123; size_t v0; // eax size_t v1; // eax char buf[24]; &#
3.8k3 分钟

内容参考了《CTF 竞赛权威指南 Pwn 篇》 # 一、计算机中的整数 计算机中整数通常分为两种,一种为有符号整数,另一种为无符号整数 c 数据类型 c//32 位 最小值~最大值 [signed] char -128 ~ 127unsigned char 0 ~ 255short
8531 分钟

# 1. 查看程序信息 32 位程序,保护几乎都没开启 查看 vuln 函数,发现 v0 为 eax (不过没什么用),查看一下汇编 发现有个后门函数可以读取 flag 文件 利用栈溢出返回到该地址即可 # 2.exp: nfrom pwn import *from LibcSearcher import *#context.log_level = 'debug'context(os='linux', arch='amd64', log_level='debug')p=