pwn入门小技巧

这篇具有很好参考价值的文章主要介绍了pwn入门小技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目前我所遇到的一些pwn的做题技巧

我也是偶尔玩玩ctf,所以也不会很难的,所以这篇主要是帮助刚开始学习的人学习吧

首先知识点包括:栈,堆,整数溢出,格式化字符串
目前ctf的题越来越偏向于实际,有的会使用刚刚爆出来的CVE漏洞的,所以不能只局限于glibc

所以可以大体分为两类把:libc,kernel

栈利用:有ret2libc,ret2shellcode,ret2text,ropchain,ret2syscall,brop,srop等等,当然有时候还会有seccomp的只能使用ORW系统调用

堆利用:fastbin dup,FSOP,house_of_force,house_of_sprit,off_by_one,off_by_null,tcache dup,UAF,unlink,unsorted bin attack等等

格式化字符串:32,64位的区别,注意00截断就行了,所以大概区别就是地址放前面和地址放后面的区别了

然后就是比较新的了,像iot的,qemu的,kennel的

qemu就是虚拟机模拟指令,然后会在某些指令上存在上述libc的漏洞(还是会转到libc)

iot的我做的比较少,改天在做到了在写吧

kernel的,像我们所知道的,Windows下面需要加载驱动然后通过派遣函数,io控制码来进行调用
Linux下的叫做LKM,和Windows下的类似,ioctl来使用,然后利用通常是通过
1、commit_creds(prepare_kernel_cred(0))
2、modeprobe_path 劫持:mode模块劫持(suid提权)利用低权限用户目录下可被Root权限用户调用的脚本提权
3、task_struct 劫持 + prctl(要求任意地址写,任意地址读)

然后是例题把

ret2libc:主要是为了绕过NX
题目可以在buuctf下载
(简单题)jarvisoj_level3,jarvisoj_level4,,(好几种解法)cmcc_pwnme2

ropchain:inndy_rop

ret2text:bjdctf_2020_babystack2(so easy),jarvisoj_test_your_memory

ret2syscall:

32位: 传参方式:首先将系统调用号 传入 eax,然后将参数 从左到右 依次存入 ebx,ecx, edx, esi, edi, ebp寄存器中,返回值存在eax寄存器 调用号:sys_read 的调用号 为3 sys_write 的调用号 为 4,sys_execve :0xb 调用方式: 使用 int 80h 中断进行系统调用

64位: 传参方式:首先将系统调用号 传入 rax,然后将参数 从左到右
依次存入 rdi,rsi,rdx,rcx,r8,r9寄存器中,返回值存在rax寄存器 调用号:sys_read 的调用号 为0
sys_write 的调用号 为 1 sys_execve 的调用号 为 59 sys_sigreturn 的调用号 为 15
且执行完之后rax保存返回值,rcx保存下一条指令的地址 调用方式:syscall/sysenter

cmcc_simplerop(这个题还可以使用mprotect方法的哦)

ret2shellcode:
(64位)mrctf2020_shellcode,jarvisoj_level1(这个也有不同方法呢,而且当时我远程的时候会出现没有数据的情况,解决这样的情况就是1.防止数据粘连,2,自己的数据发送接收是否有问题)

SROP,ret2csu_init:ciscn_2019_s_3(这个题可以使用SROP和ret2csu来做)
https://note.youdao.com/s/MJLDyFUZ

BROP:axb_2019_brop64
概念讲解:
https://ctf-wiki.org/pwn/linux/user-mode/stackoverflow/x86/medium-rop/(哈哈中等ROP技术)
:https://www.anquanke.com/post/id/196722#h2-11

栈迁移:(当你看到只能溢出ebp/rbp 和 return_addr的时候就要考虑使用这个方法了)
ciscn_2019_es_2:32位的(原理在笔记里)
actf_2019_babystack:64位的https://note.youdao.com/s/4wR8MJb7

seccomp:SECCOMP-pwnable_orw:笔记
[极客大挑战 2019]Not Bad:笔记

哦对了还有利用canary机制泄露地址的,wdb2018_guess:笔记
我还记得有个canary跟格式化字符串结合,然后通过三级指针来修改地址的,但是我找不到了

然后还有只有汇编代码的,这种题一般会比较偏怪,mrctf2020_shellcode_revenge:笔记

总结:其实大概就是先泄露地址,然后修改返回地址,或者got地址(然后触发)

这里是分割线-----------------------------------------------------------------------------------

堆的:
先来个简单的增加一些自信:babyfengshui_33c3_2016(应该不用放讲解把:笔记)wustctf2020_easyfast

off_by_one(包括off_by_null):
这种一般是通过构造unlink或者是修改size制造堆块堆叠:笔记
2.27:ciscn_2019_es_4:https://note.youdao.com/s/SDxnhifH
2.23:roarctf_2019_easy_pwn,(2.23还是挺多的)
2.29及以上2.31:介绍:题目的话参考最新的i春秋的第三道pwn题(比赛唯一做出来的一道pwn…我不知道怎么上传这个文件)

house_of_storm:基础知识学习:bugku simple_storm:笔记这个网上都没有write up呢,可以拿去bugku里面赚赚积分呢哈哈哈

house-of-spirit-[ZJCTF 2019]EasyHeap
知识点
只要top chunk size够大,就能随意申请chunk所以,如果有溢出能控制top chunk size,就可以修改其为-1(0xffffffff最大值),然后malloc(负数)可以向上申请,malloc(正数)

hitcontraining_bamboobox(三种方法可以做这道题哦)
gyctf_2020_force(这个只有一个add函数可以使用,但是思路并不难)

FSOP:知识介绍
高版本里面已经不适用了呢
wdb_2018_1st_babyheap(也两种方法啊)

UAF:gyctf_2020_some_thing_exceting,ciscn_2019_n_3(so easy),npuctf_2020_easyheap
其实也就是制造堆块堆叠啊或者是修改指向地址啊之类的

unlink:axb_2019_heap,hitcontraining_bamboobox

总结:其实就是利用前面的一些技术,构造堆块堆叠啊之类的,泄露地址,可以修改got就修改,不能修改就修改hook函数,前面那个只有一个add函数的堆题,就是很好的例子(malloc->malloc_hook–>realloc–>realloc_hook–>free_hook),最后触发就行了

这里是分割线----------------------------------------------------------

格式化字符串:32,64位:inndy_echo(32位)inndy_echo2(64位)
64位的时候修改一般都是修改后三个字节:如果有循环就不用计算偏移了,分三次写就行了,如果没有循环需要一次性写入三个,类似如下的格式

payload1 = b'%' + bytes(order[b[0]]) + b'c%12$hhn'
payload1 += b'%' + bytes(order[b[1]]-order[b[0]]) + b'c%13$hhn'
payload1 += b'%' + bytes(order[b[2]]-order[b[1]]) + b'c%14$hhn'
payload1 = payload1.ljust(32, b'a')
payload1 += p64(printf_got+b[0]) + p64(printf_got+b[1]) + p64(printf_got+b[2])

但是呢不好保证第三个比第二个大,第二个比第一个大,第三个比1+2还大,所以就写两次,第一次写最低一字节,第二次写两字节

payload1 = b'%' + str(b-9) + b'c%12$hhn'    #-9是repeater:字符个数
payload1 += b'%' + str(a - b) + b'c%13$hn'
payload1 = payload1.ljust(32, b'a')
payload1 += p64(printf_got+2) + p64(printf_got)

上面这个代码是:解axb_2019_fmt64的

然后还有非栈上的格式化字符串bugku pwn6 printf

这里是分割线----------------------------------------------------------

qemu的:[OGeek2019 Final]OVM:笔记
kernel的:知识点介绍:CISCN2017 - babydriver
顺便在给一个当时fuzz内核参考的链接吧

有朋友给我说,ctf to learn而不是learn to ctf我觉得挺有道理的。冲

昨天写了一天的docker脚本,终于调好了,就夜里回去了第二天来看,但是忘记吧脚本拿出来就点了还原了,哭唧唧

继续加油文章来源地址https://www.toymoban.com/news/detail-481753.html

到了这里,关于pwn入门小技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1Panel本人目前为止,遇到过的最牛docker管理工具

       快速建站 :深度集成 Wordpress 和 Halo,域名绑定、SSL 证书配置等一键搞定; 高效管理 :通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器(包括docker)管理等; 安全可靠 :基于容器来管理和部署应用,最小漏洞暴露面,提供防火墙和日志审计

    2024年02月08日
    浏览(37)
  • kernel-pwn之ret2dir利用技巧

    ret2dir 是2014年在USENIX发表的一篇论文,该论文提出针对 ret2usr 提出的 SMEP 、 SMAP 等保护的绕过。全称为 return-to-direct-mapped memory ,返回直接映射的内存。 在 SMEP 与 SMAP 等用于隔离用户与内核空间的保护出现时,内核中常用的利用手法是 ret2usr ,如下图所示(图片来自论文)。

    2024年02月16日
    浏览(35)
  • 30岁才转行程序员,目前34了,谈一下我的经历和一些感受吧...

    最近刷某乎,发现有很多朋友有年龄焦虑了,比如:“ 我今年28了转行来不来得及”,“我今年30了还能转软件测试吗?”...... 这种问题在知乎上有很多,仿佛大家都觉得年纪大了,很多事情都来不及了,我来说说我的经历吧,希望可以帮助到迷茫中的你! 先说下我基本情况

    2024年02月06日
    浏览(54)
  • CTFshow-pwn入门-前置基础pwn32-pwn34

    FORTIFY_SOURCE(源码增强),这个其实有点类似与Windows中用新版Visual Studio进行开发的时候,当你用一些危险函数比如strcpy、sprintf、strcat,编译器会提示你用xx_s加强版函数。 FORTIFY_SOURCE本质上一种检查和替换机制,对GCC和glibc的一个安全补丁。 目前支持memcpy, memmove, memset, strcpy, s

    2024年02月09日
    浏览(34)
  • 攻防世界hello pwn WP(pwn入门基础题)

    题目网址: 攻防世界 下载文件,文件名太长了把文件改名为pwn 把pwn文件放入kali里面 file一下查看文件类型 发现是一个64位的elf文件,加个运行权限,运行一下看看  使用 checksec 检查保护 发现只开了 NX 保护。 把pwn放入64位IDA中,F5反汇编一下main函数 得到main函数伪代码 点击

    2024年02月10日
    浏览(45)
  • CTFshow-pwn入门-栈溢出pwn49(静态链接pwn-mprotect函数的应用)

    首先我们先将pwn文件下载下来,然后赋上可执行权限,再来查看pwn文件的保护信息。 我们可以看到这是一个32位的pwn文件,并且保护信息开启了NX和canary,也就是堆栈不可执行且有canary。最最最重要的是这个文件是statically linked!!!静态编译文件呀! 根据题目的提示,我们

    2024年02月13日
    浏览(39)
  • 2022CTF培训(九)MIPS PWN环境搭建&MIPS PWN入门

    附件下载链接 在 ARM PWN 环境搭建 的基础上,首先安装具备MIPS交叉编译gcc与MIPS程序动态链接库: 然后就可以正常运行 将 mipsel 添加到 qqemu-binfmt,这样 linux 可以根据文件头找相应的程序运行: 栈溢出 分析汇编可知,返回值存储在 $sp + 0x3C 处,而 buf 起始位置在 $sp + 0x18 处,

    2024年02月11日
    浏览(49)
  • musl pwn 入门 (1)

    近年来,musl libc作为一个轻量级的libc越来越多地出现在CTF pwn题之中,其和glibc相比有一定的差距,因此本文我们就musl libc最常考的考点——内存分配,进行musl libc的源代码审计。 不同于glibc多达四五千行代码,大小超过10w字节的malloc.c,musl libc中的malloc.c大小甚至都不到1w字节

    2023年04月25日
    浏览(32)
  • Kernel pwn 入门 (3)

    这是一种绕过SMAP/SMEP和PXN防护的攻击方式。利用内核空间的direct mapping area(起始位置为0xFFF8880000000000)。Linux对内存的访问采用的是多级页表的方式,将某段物理内存映射到程序的虚拟内存空间中的某段地址。而在Linux内核空间中,还存在着direct mapping area这块区域,对于物理

    2024年02月06日
    浏览(46)
  • kernel pwn入门

    Linux Kernel 介绍 Linux 内核是 Linux操作系统的核心组件,它提供了操作系统的基本功能和服务。它是一个开源软件,由Linus Torvalds 在 1991 年开始开发,并得到了全球广泛的贡献和支持。 Linux内核的主要功能包括进程管理、内存管理、文件系统、网络通信、设备驱动程序等。它负

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包