自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 基于pwntools和seccomp-tools的awd pwn通防小工具

基于pwntools和seccomp-tools的awd pwn通防小工具

2022-06-26 17:53:31 5957 5

原创 栈溢出漏洞CVE-2020-8423复现

TP-Link WR841N 栈溢出漏洞(CVE-2020-8423)第一次搞iot相关,对mips的汇编还不是很熟,先熟悉一下搭环境,之后再去理解原理,这里记录一下环境搭建流程。虽然iot-vulhub已经都做好了docker,但在自己复现的时候还是多多少少会有些问题。IoT-vulhub基础环境搭建#安装pip$ curl -s https://bootstrap.pypa.io/get-pip.py | python3#安装docker#命令行输docker,根据提示安装就行# 启动

2021-08-03 19:02:45 2590 3

原创 glibc更换(patchelf方法)

获取不同版本glibc版本方法这里使用自动化工具https://github.com/matrix1001/glibc-all-in-one使用方法也很简单先./update_list获取glibc列表cat查看可以下载的glibc版本$ cat list2.23-0ubuntu11.2_amd642.23-0ubuntu11.2_i3862.23-0ubuntu3_amd642.23-0ubuntu3_i3862.27-3ubuntu1.2_amd642.27-3ubuntu1.2

2021-04-01 21:59:42 5813 1

原创 glibc2.27下堆题绕过沙箱

这里因为重点在于沙箱的绕过,漏洞就拿了一个最简单的uaf做演示。最主要的是setcontext这个函数,可以看到setcontext+53之后控制了大量的寄存器(可以看作就是一个SigreturnFrame),寻址都是[rdi+x]的方式,那么我们假如劫持了free_hook为setcontext+53,此时rdi刚好是堆块内容的地址,我们可以直接放个SigreturnFrame进去,之后利用的话就按个人喜好了。我写了三种方式,本质都是orw。1.mprotect+shellcode2.rop(rop

2021-03-27 20:58:11 700

原创 seccomp&ptcl(pwn出题)

详细细节看这篇https://www.anquanke.com/post/id/208364#h2-2沙箱可以禁用一些系统调用,还是比较常见的感觉。seccomp下面这段代码用seccomp沙箱来禁用安装相应库sudo apt-get install libseccomp-dev具体参数啥的就不多讲了。。。看大佬的博客就行。//gcc -g simple_syscall_seccomp.c -o simple_syscall_seccomp -lseccomp#include <u

2021-03-27 19:26:46 1874

原创 linux系统调用号查询

在线查询网站,还挺全,各个架构都有https://syscalls.w3challs.com/本机查询32位cat /usr/include/asm/unistd_32.h#ifndef _ASM_X86_UNISTD_32_H#define _ASM_X86_UNISTD_32_H 1#define __NR_restart_syscall 0#define __NR_exit 1#define __NR_fork 2#define __NR_read 3#define __NR_

2021-03-26 20:05:39 811

原创 _IO_2_1_stdout_泄露内存

在做heap时有时候并没有自带的输出模块,所以打_IO_2_1_stdout_成了一种常用手段。一般只出现在glibc2.23版本下glibc2.27下aslr随机的位数比较多爆破概率比较小,没算错的话应该时1/4096,而2.23的情况下是1/16。这里记录两道例题,也忘了是哪里的题了,反正模板题。以便以后快速复现把一道off-by-one配合_IO_2_1_stdout,一道double free配合_IO_2_1_stdout例题1关键字:_IO_2_1_stdout_、off-by-one

2021-03-25 20:19:18 760

原创 格式化字符串中的占位符特殊用法

*号的用法*在printf里可以代表一个泛整数,可以代表任何整数。它可以出现在位宽的位置,也可以出现在小数位数的位置。对于下面这个程序#include<stdio.h>int main(){ float a = 3.14; printf("num:%*.2f",6,a);}它的输出是num: 3.14也就是%*.2f这个格式化参数在输出时一共占了6个字符大小。那么下面给出一道例题//gcc -o test test.c -no-pie -g#include<

2021-03-25 16:26:56 673

原创 通过mmap&mprotect来绕过nx

mmapmmap函数的用法mmap将一个文档或者其它对象映射进内存。文档被映射到多个页上,如果文档的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。头文档 <sys/mman.h>void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);第一个参数:分配新内存的地址第二个参数:新内存的长度(0x1000的倍数),长度单位是字节,不足一

2021-03-24 11:04:38 1344 5

原创 pwntools更新

pip install --upgrade "pip < 21.0"pip install -U pwntools

2021-03-23 12:08:18 1304

原创 fmtstr模块

格式化字符串漏洞如果要修改某个内存地址的内容常常需要构造比较长的payload,手撸当然也可以,但比较耗时,容易出错,pwntools里的pwnlib.fmtstr模块用起来比较方便,不容易出错,所以记录一下以便以后能够更快的写exp。pwntools pwnlib.fmtstr模块提供了一些字符串漏洞利用的工具。该模块中定义了一个类FmtStr和一个函数fmtstr_payload。FmtStr提供了自动化的字符串漏洞利用。class pwnlib.fmtstr.FmtStr(execute_fmt

2021-03-23 11:02:09 1008

原创 kernel pwn rop

环境搭建&工具qemuqemu 是一款由 Fabrice Bellard等人编写的可以执行硬件虚拟化的开源托管虚拟机,具有运行速度快(配合 kvm),跨平台等优点。gdb&pwndbgropperextract-vmlinux & vmlinux-to-elf(我还不会用。。尝试了几次符号表加载进gdb的时候失败了,不过影响也不大,感觉前期不用也没事)https://github.com/torvalds/linux/blob/master/scripts/ext

2021-03-17 21:36:23 284

原创 ropper简单使用

ropper是用来找gadgets的用处和ROPgadget一样,但内核的vmlinux文件比较大用ROPgadget会跑的特别慢。下面简单的介绍用法。安装https://www.jianshu.com/p/e14c811496ac使用方法直接ropper进入交互界面file命令file加载要分析的文件支持的架构supported architectures: x86 [x86] x86_64 [x86_64] MIPS [MIPS, MIPS64] ARM/Thumb [A

2021-03-15 15:06:20 7691 3

原创 ret2dl_runtime_resolve(64位)

先把相关结构体和宏都列一下把(也懒得一个一个解释了)typedef struct{ Elf64_Sxword d_tag; /* Dynamic entry type */ union { Elf64_Xword d_val; /* Integer value */ Elf64_Addr d_ptr; /* Address value */ } d_un;} Elf64_Dyn;typedef struct{ Elf64_Word s

2021-03-07 12:00:06 589 1

原创 Ret2dlresolvePayload使用

对于Ret2dlresolve,payload构造特别麻烦,但pwntools有相应的工具,其payload构造可以由Ret2dlresolvePayload来完成。(真香)help(pwnlib.rop.ret2dlresolve.Ret2dlresolvePayload)Help on class Ret2dlresolvePayload in module pwnlib.rop.ret2dlresolve:class Ret2dlresolvePayload(__builtin__.objec

2021-03-05 10:30:24 961 1

原创 pwn题编译时的保护选项

NX:-z execstack / -z noexecstack (关闭 / 开启) 不让执行栈上的数据,于是JMP ESP就不能用了Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启) 栈里插入cookie信息ASLR和PIE:-no-pie / -pie (关闭 / 开启) 地址随机化,另外打开后会有get_pc_thunk在这里插入图片描述RELRO:-z nor

2021-03-04 16:30:19 601 1

原创 ret2dlresolve(32位)

穿插例题XDCTF2015 bofELF程序的基本相关结构节区中包含目标文件的所有信息。节的相关结构体。typedef struct{ Elf32_Word sh_name; /* Section name (string tbl index) 节区头部字符串节区的索引*/ Elf32_Word sh_type; /* Section type 节区类型*/ Elf32_Word sh_flags; /* Section flags 节区标志,用于描述属性*/ Elf32_

2021-03-03 20:24:37 241 1

原创 SROP简单介绍和例题

SROP本质是 sigreturn 这个系统调用,主要是将所有寄存器压入栈中,以及压入 signal 信息,以及指向 sigreturn 的系统调用地址。对于 signal Frame 来说,会因为架构的不同而有所区别,这里给出分别给出 x86 以及 x64 的 sigcontext 。x86struct sigcontext{ unsigned short gs, __gsh; unsigned short fs, __fsh; unsigned short es, __esh;

2021-03-02 10:48:17 4034

原创 hgame2021 week3 pwn刷题

blackgive栈迁移from pwn import*context.log_level = 'debug'def pr(a,addr): log.success(a+'====>'+hex(addr))#p = process('./blackgive')p =remote('182.92.108.71',30459)elf = ELF('./blackgive')libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')puts_plt =

2021-02-21 20:08:16 424 3

原创 hgame2021 week2 pwn刷题

rop_primary矩阵相乘,算法分析用过numpy就直接调用numpy现有的库了,常规栈溢出,但是不知道为什么system的系统调用貌似被禁用了,所以用了orw,没拿shellfrom pwn import*import numpy as npfrom LibcSearcher import*context.log_level = 'debug'def pr(a,addr): log.success(a+'====>'+hex(addr))elf = ELF('./rop_prim

2021-02-14 20:02:56 440

原创 Hgame 2021 week1 pwn刷题

whitegive签到from pwn import*context.log_level = 'debug'p = remote('182.92.108.71',30210)p.sendlineafter(':',str(0x402012))p.interactive()letter开了沙箱,NX未开orw思路,shellocdefrom pwn import*context.log_level = 'debug'libc = ELF('/lib/x86_64-linux-gnu/

2021-02-06 20:25:41 1463 8

原创 ROP gadget的一些遇到的问题和思考

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

2020-12-06 22:02:28 770

原创 House of Einherjar

House of Einherjar原理free中后向合并的操作(unlink),如果我们可以同时控制一个 chunk prev_size 与 PREV_INUSE 字段,那么我们就可以将新的 chunk 指向几乎任何位置。free时合并的操作static void_int_free (mstate av, mchunkptr p, int have_lock){ ... /* consolidate backward */ if (!prev_inuse(p)) {

2020-12-03 11:18:20 340

原创 House Of Force

House Of Force利用条件​ House Of Force 是一种堆利用方法,但是并不是说 House Of Force 必须得基于堆漏洞来进行利用。如果一个堆 (heap based) 漏洞想要通过 House Of Force 方法进行利用,需要以下条件:能够以溢出等方式控制到 top chunk 的 size 域能够自由地控制堆分配尺寸的大小​ House Of Force 产生的原因在于 glibc 对 top chunk 的处理,根据前面堆数据结构部分的知识我们

2020-11-26 11:26:53 738

原创 Unsorted Bin Attack

Unsorted Bin AttackUnsorted Bin Attack 被利用的前提 -------------控制 Unsorted Bin Chunk 的 bk 指针。Unsorted Bin Attack 可以达到的效果 -------------实现修改任意地址值为一个较大的数值。Unsorted bin的来源1,当一个较大的 chunk 被分割成两半后,如果剩下的部分大于MINSIZE,就会被放到 unsorted bin 中。2,释放一个不属于 fast bin

2020-11-26 11:23:24 454

原创 House Of Orange

House Of Orange本质:Unsorted bin attack 和 FSOP造成的组合漏洞利用方式。House of orange源于一道题目,有时候只用到free top chunk的题目也会被归入该类中。glibc版本<=2.23情况特点:不需要free操作核心原理:1,获取unsorted bin​ 在_int_malloc函数中,会依次检验 fastbin、small bins、unsorted bin、large bins 是否可以满足分配要求,因为尺寸问

2020-11-26 11:18:04 1081 1

原创 2020太湖杯awd体验

​ 比赛从上午9点打到17点,总共8h,中途不停赛,10轮一次攻防,比赛强度感觉还是比较大的;pwn和web各两个靶机。web貌似打得比较狠,估计是权限比较大的缘故。​ 我还是着重讲一下pwn把。​ 先附上一份这次awd的规则把​​ 对于pwn的话,比赛一开始要干的就是ssh连上自己队伍的服务器,把题目和相应的libc做一个备份,要不然之后patch打坏了就不好修补。有一个认识的师傅就是忘记备份最后把题目patch坏了没办法再次正常起服务导致了之后一直check没过,每轮都只能扣分。​ pwn

2020-11-26 11:06:23 583 1

原创 2020第六届上海市大学生网络安全大赛pwn wp

2020年全国大学生网络安全邀请赛暨第六届上海市大学生网络安全大赛体验一般,前三道2道原题一道常规题,cpu_emulator还挺有意思EASY_ABNORMAL​ 湖湘杯2020原题,修改了提示字符而已,漏洞点在于格式化字符串和c++一个异常的处理,完全可以直接调出来,在后面函数输入非法的程序就会被劫持。​ glibc2.23expfrom pwn import*context.log_level = 'debug'context.update(arch='amd64',os='lin

2020-11-26 11:03:07 701 1

原创 FILE攻击的一些进阶操作(待补充)

FILE_advanceglibc2.24中加入了对vtable劫持的检测在 2.24 版本的 glibc 中,全新加入了针对 IO_FILE_plus 的 vtable 劫持的检测措施,glibc 会在调用虚函数之前首先检查 vtable 地址的合法性。首先会验证 vtable 是否位于_IO_vtable 段中,如果满足条件就正常执行,否则会调用_IO_vtable_check 做进一步检查。/* Check if unknown vtable pointers are permitted; o

2020-11-26 10:57:00 367

原创 FSOP

FSOP​   进程内所有的_IO_FILE结构会使用_chain域相互连接形成一个链表,这个链表的头部由_IO_list_all维护。​   FSOP的核心思想就是劫持_IO_list_all的值来伪造链表和其中的_IO_FILE项,但是单纯的伪造只是构造了数据还需要某种方法进行触发。FSOP选择的触发方法是调用_IO_flush_all_lockp,这个函数会刷新_IO_list_all链表中所有项的文件流,相当于对每个FILE调用fflush,也

2020-11-26 10:48:29 1616

原创 vtable伪造

vtable伪造​ libc2.23 版本下,位于 libc 数据段的 vtable 是不可以进行写入的,在之前的版本的利用就不叙述了。虽然libc 数据段的 vtable不可以写入,但是可以通过伪造vtable并且修改_IO_FILE_plus->vtable这个指针来实现劫持程序流程。直接用wiki上的例子#define system_ptr 0x7ffff7a523a0;#include<stdio.h>#include<stdlib.h>#inc

2020-11-26 10:43:26 478

原创 FILE结构体概述

FILE结构FILE结构体的定义(截自/glibc2.23/libio/libio.h)struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */#define _IO_file_flags _flags /* The following pointers correspond to the C++ streambuf protocol. */ /* Note: Tk uses

2020-11-26 10:32:22 1629 1

原创 fmt

fmt(格式化字符串漏洞)格式化字符串函数介绍格式化字符串函数可以接受可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之后的参数。通俗来说,格式化字符串函数就是将计算机内存中表示的数据转化为我们人类可读的字符串格式。几乎所有的 C/C++ 程序都会利用格式化字符串函数来输出信息,调试程序,或者处理字符串。常见的有格式化字符串函数有输入scanf输出函数基本介绍printf输出到 stdoutfprintf输出到指定 FILE 流vpri

2020-11-26 10:22:41 353

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除