SROP
仅供个人学习参考
原理signal 机制是类 unix 系统中进程之间相互传递信息的一种方法。一般,我们也称其为软中断信号,或者软中断。比如说,进程之间可以通过系统调用 kill 来发送软中断信号。一般来说,信号机制常见的步骤如下图所示:
1.内核向某个进程发送 signal 机制,该进程会被暂时挂起,进入内核态。2.内核会为该进程保存相应的上下文,主要是将所有寄存器压入栈中,以及压入 signal 信息,以及指向 sigreturn 的系统调用地址。此时栈的结构如下图所示,我们称 ucontext 以及 siginfo 这一段为 Signal Frame。需要注意的是,这一部分是在用户进程的地址空间的。之后会跳转到注册过的 signal handler 中处理相应的 signal。因此,当 signal handler 执行完之后,就会执行 sigreturn 代码。3.signal handler 返回后,内核为执行 sigreturn 系统调用,为该进程恢复之前保存的上下文,其中包括将所有压入的寄存器,重新 pop 回对应的寄存器,最后恢复进程的执行。其中,32 位的 ...
关于payload中栈的布置
仅供个人学习参考
以ret2libc为利,我们在构造payload的时候有两种方式
12payload1=b'a'*0x40+p32(system_addr)+p32(binsh_addr)payload2=b'a'*0x40+p32(system_plt_addr)+p32(0xdeadbeef)+p32(binsh_addr)
这两种都可以打通,区别在于:payload1中,system_addr指的是text段上的 call system的地址,如下图所示
payload2中,system_plt_addr指的是plt表上的system的地址,如下图所示
首先,我们要执行的system(“/bin/sh”),在汇编层面上长这样
123lea eax, [address_binsh_str]push eaxcall system
call system可以进一步分解为
12push ip #执行system_addr之后的返回地址jmp system_addr
所以直接调用plt system,需要先填 ...
解决Ubuntu1804域名解析失败问题
仅供个人学习参考
最近用Ubuntu18打靶机时发现remote不上,显示无法解析域名,检查/etc/resolv.conf,发现之前修改的nameserver总是会被修改为127.0.0.53
解决方法:
12sudo suvim /etc/systemd/resolved.conf
内容大致如下
123456789[Resolve]#DNS=#FallbackDNS=#Domains=#LLMNR=no#MulticastDNS=no#DNSSEC=no#Cache=yes#DNSStubListener=yes
改成
12345678DNS=8.8.8.8 8.8.4.4#FallbackDNS=#Domains=LLMNR=no#MulticastDNS=no#DNSSEC=no#Cache=yes#DNSStubListener=yes
然后重启systemd-resolved服务即可
1sudo systemctl restart systemd-resolved
非栈上格式化字符串漏洞
仅供个人学习参考
对于非栈上的格式化字符串漏洞,我们无法往栈上填入指针(指向目标地址的指针)来实现任意写,所以我们采取新的方式:利用指针链首先要在栈上寻找像a-b-c这样的指针链(a,b,c均在栈上),然后我们便能利用%n(%hn,%hhn)来修改假设offset表示格式化的参数位置。通过第offset0个参数,利用%hhn可以控制address1的最低位,再通过第offset1个参数,利用%hhn可以写address2的最低位;然后通过offset0参数,利用%hhn修改address1的最低位为原始值+1,再通过offset1参数,利用%hhn可以写address2的次低位;依次循环即可完全控制address2的值,再次利用address1和address2的链式结构,即可实现对address2地址空间的任意写。
“%{}c%{}$hhn”.format(address,offset)就是向offset参数指向的地址最低位写成address。
exp如下:
12345678910111213141516171819202122232425262728293031323334 ...
解决gem下载速度过慢或者无反应
仅供个人学习参考
https://mirrors.tuna.tsinghua.edu.cn/help/rubygems/
ret2libc3(但是有坑)
仅供个人学习参考
题目:https://raw.githubusercontent.com/GNchen1/Pages/main/Img/pwn
checksecida查看,有栈溢出有个gift函数,这个有大用处
这题会发现按正常ret2libc3来打,会打不通
问题出在initinit函数里面,stdout设置成了全缓冲模式,这种情况下,只有缓冲区满了或者调用fflush才会输出,所以要在调用puts输出libc地址后再调用fflush,然后才能接受到地址
1int setvbuf(FILE *stream, char *buf, int mode, size_t size);
stream: 是一个指向 FILE 结构体的指针,表示要设置缓冲方式的流,比如 stdin, stdout, stderr 等。buf: 是一个指向用于存储数据的缓冲区的指针。根据不同的值,它可以是一个已分配的缓冲区的指针,也可以是 NULL 来禁用缓冲。mode: 表示缓冲模式,可以取以下值:_IOFBF:完全缓冲(Full buffering),数据在填满缓冲区或者调用 fflush 函数时才会 ...
栈迁移
仅供个人学习参考
背景及原理我们在栈溢出时,有时候会碰到可供写入的字节数不够,比如只溢出到retaddr后面一点点,不够我们构造payload,这个时候可以考虑使用栈溢出
栈帧先回顾一下栈帧的概念,栈帧也叫过程活动记录,是编译器用来实现函数调用过程的一种数据结构。C语言中,每个栈帧对应着一个未运行完的函数。从逻辑上讲,栈帧就是一个函数执行的环境:函数调用框架、函数参数、函数的局部变量、函数执行完后返回到哪里等等。栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低地址)
栈溢出实现关键在于对ebp和esp的控制,也就是说,我们劫持esp和ebp,构造出一个新的栈帧,让系统执行这个栈帧。对于ebp来说,我们可以通过修改previous of ebp 这个位置的内容来控制,对于esp,则有leave这个指令,leave等同于mov esp ebp和pop ebp (可以通过ROPgadget来找)
例题以ciscn_2019_es_2这题为例
...
一题需要动调的ret2text
仅供个人学习参考
题目附件:https://raw.githubusercontent.com/C17zz/Pages/main/Img/stack
基本流程checksec一下nx打开,没有pie,没有canary转idainit()初始化作用,剩下一个vuln函数可以看到用for循环加read函数往s数组写入,但是for循环的次数由用户控制,这就存在缓冲区溢出漏洞,并且存在backdoor函数,是一个ret2text模型
我们先试着打看看会发现打不通
打不通有两种情况,一种是没有执行到backdoor,一种是执行到了但是因为栈对齐的问题导致system函数没有正常执行。
动态调试这个时候就要进入动态调试环节,我们先把断点下在vuln结束的ret处然后发现填入的数据并没有覆盖到rbp+8处,说明read函数有问题于是我们再将断点下在call read处然后continue,直到在偏移(相对于数组起始地址)0x1c处,我们看到在此时read的汇编是这样read写入的地址存储在rsi,rsi由rax赋值给它,rax=rax+rdx,即[rbp - ...
VScode远程连接虚拟机以及免密登录
仅供个人学习参考
一、安装VScode扩展这两个都可以
Remote SSH 扩展:Remote SSH 扩展允许你通过 SSH 连接到远程计算机,并在本地的 VSCode 编辑器中进行编辑和调试。你可以使用该扩展连接到远程服务器、虚拟机或容器,并在远程主机上执行命令和调试任务。Remote SSH 扩展适用于那些希望在远程计算机上进行开发和调试的场景。它提供了与远程主机的基本交互和编辑功能。
Remote Development 扩展:Remote Development 扩展是一个更加综合的扩展,它提供了比 Remote SSH 更广泛的远程开发功能。Remote Development 扩展支持多种远程连接协议,包括 SSH、容器、WSL(Windows Subsystem for Linux)等。它不仅可以通过 SSH 连接到远程主机,还可以在本地开发环境中使用容器,或者通过 WSL 在 Windows 上进行 Linux 开发。Remote Development 扩展还提供了一些其他功能,例如远程容器的自动同步、远程环境的访问控制等。
二、虚拟机方面1.安装ssh服 ...
pwn-environment
仅供个人学习参考
建议都在root权限下安装
1sudo su
替换软件源官方源下载太慢了,建议换成国内源(清华源、阿里源等) 虽然换了后我还是开着代理
123sudo sucp /etc/apt/sources.list /etc/apt/sources.list.oldvi /etc/apt/sources.list
然后把原来的源删掉,对应版本的源复制进去附:https://mirrors.tuna.tsinghua.edu.cn/ 清华源不一定要用vi,其他文本编辑器也行
然后执行该命令验证一下源更换是否成功
1sudo apt update
vim 安装 (一个好用的文本编辑器)12sudo suapt update && apt install vim
安装git12sudo apt update && apt install gitgit --version
安装gcc12sudo apt update && apt install gccgcc --version
安装python3-pip12sudo ...