pwnable.tw - start

2023-11-17

首先安装 pwntools,在执行pip install --upgrade pwntools时出错 cannot import name main
要修改 /usr/bin/pip

from pip import main
为
from pip import __main__

    sys.exit(__main__._main())

再次执行即可

安装 peda

git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit

检查安全措施

image_1chhvhv5g1cq1lp41g9m9sr16u29.png-15.4kB

可以看到非可执行栈(NX),peda 检查二进制程序安全特征的脚本来自 http://www.trapkit.de/tools/checksec.sh

查看检查 NX 部分的脚本为

if readelf -W -l $1 2>/dev/null | grep 'GNU_STACK' | grep -q 'RWE'; then
    echo -n -e '\033[31mNX disabled\033[m'
else
    echo -n -e '\033[32mNX enabled\033[m'
fi

程序分析

IDA 中分析两个函数,start 与 exit
image_1chi17pjb1pko1uua1sl91ih7shm.png-19.1kB
反编译后:
image_1chi109d5htr9sd1plv1cb01v989.png-9.4kB

exit 函数为:
image_1chi3bbpp1o858f1kkm12e5rec13.png-7.9kB

没有 main 函数,可能是内联汇编写的程序。系统调用通过 int 80h 实现,执行时 eax 中为调用的功能号,ebx、ecx、edx 等以此为参数。系统调用号写在 /usr/include/asm/unistd.h

#define __NR_exit                 1
#define __NR_fork                 2
#define __NR_read                 3
#define __NR_write                4
#define __NR_open                 5

可以看到,IDA 将 sys_write 和 sys_exit 函数识别出来了,而 sys_read 没有成功识别

使用 sys_write 调用,即 int 80h 前 eax 为 4,ebx 为文件描述符 fd,stdout 的文件描述符为 1,ecx 为 buffer 的内存地址,edx 为 buffer 的长度

所以 start 函数主要是

  • exit 函数压栈
  • 清空 eax、ebx、ecx、edx 寄存器的值
  • 向栈中压入数据
  • 调用 sys_write 系统调用
  • 调用 sys_read 系统调用
  • retn 返回

依次压入栈的数据为:

3A465443h
20656874h
20747261h
74732073h
2774654Ch

整理一下为 4C657427732073746172742074687420746865204354463A,将十六进制转换为字符串为 Let's start tht the CTF:

在调用 sys_read 系统调用前,修改 eax 为 3 自不必说,ebx 改为了 0 即 stdin,edx 改为了 3Ch

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pwnable.tw - start 的相关文章

  • ctf:kali2:渗透Samba:exploit/multi/samba/usermap_script

    search samba usermap Matching Modules 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 Name Disclosure Date Rank Check De
  • pwnabletw-babystack

    BabyStack 思路 危险函数 xff0c strcpy 在copy的时候strcpy看似没有问题 xff0c 但是由于src的内容并没有清空 xff0c 还保存着被销毁栈的原有数据 xff0c 而strcpy是根据 34 x00 34
  • pwnable.tw - orw

    简单概览 与 start 不同 该程序使用动态链接 提示仅允许有限的系统调用 open read write 函数 程序运行 哪怕是输入一个字母 程序仍然会出现段错误 检查安全措施 可见栈上开了 CANARY 程序 在 IDA 中反编译可见
  • adworld-pwn-level2

    必要知识点 32位系统函数调用使用堆栈传参 其调用时栈的结构如下 返回地址 gt 参数n gt 参数n 1 gt gt 参数1 将elf文件扔到IDA中 跟进到vulnerable函数 里面有输入函数 可以用来做栈溢出 再看到有system
  • 攻防世界 pwn forgot

    下面记录一下我在做攻防世界的pwn练习题中的forgot题目的过程 这个题目现在还是有些疑惑的 首先我们看一下题目的安全机制 然后IDA看一下主函数 int cdecl main size t v0 ebx char v2 32 esp 1
  • xman 厦门邀请赛 pwn1 babystack writeup

    题目描述 这个题目针对现在的我还是有点难度的 花费了我三天的时间 最后发现原因竟是因为字符转化为整型的过程中多加了好多0 分析思路 1 首先查看文件的详细信息 tucker ubuntu xman pwn pwn1 file babysta
  • 格式化字符串学习

    常见的格式化字符串函数 输出 函数 基本介绍 printf 输出到 stdout fprintf 输出到指定 FILE 流 vprintf 根据参数列表格式化输出到 stdout vfprintf 根据参数列表格式化输出到指定 FILE 流
  • 二进制安全虚拟机Protostar靶场(3)溢出控制程序指针,基础知识讲解 Stack Three,Stack Four

    前言 这是一个系列文章 之前已经介绍过一些二进制安全的基础知识 这里就不过多重复提及 不熟悉的同学可以去看看我之前写的文章 二进制安全虚拟机Protostar靶场 安装 基础知识讲解 破解STACK ZERO https blog csdn
  • 36D杯CTF——mengxinstack

    记录一下36D的mengxinstack题目 下载题目 checksec下分析 开启了很多保护 有canary 64位 IDA分析 知道这个程序先执行了一次read 再把read进去的东西print出来 再read 两次read都会造成栈溢
  • 用gdb.attach()在gdb下断点但没停下的情况及解决办法

    在python中 如果导入了pwntools 就可以使用里面的gdb attach io 的命令来下断点 但是这一次鼠鼠遇到了一个情况就是下了断点 但是仍然无法在断点处开始运行 奇奇怪怪 这是我的攻击脚本 我们运行一下 可以看到其实已经运行
  • 安卓pwn - De1taCTF(BroadcastTest)

    BroadcastTest 背景 逆向APK可知程序中仅有MainActivity Message和三个Receiver类 前者实现了一个Parcelable类 后三个则是广播 其中Receiver1是exported的 接收并向Recei
  • BUUCTF-PWN-Writeup-1-5

    前言 开始刷一刷Buuctf的PWN题 一边学一边刷题了 其实主要是堆学的顶不住了 一个下午才搞懂一个知识点 太tm的难了 test your nc from pwn import from LibcSearcher import cont
  • 攻击实验室中操作码末尾的 c3

    我正在开发攻击实验室的一个版本 对于阶段 4 和 5 在农场操作中 我有几个以 c3 结尾的操作 但后面还有一个单独的操作retq c3 指令如下 0000000000401a6e
  • 清理 MySQL 用户参数

    What are the dangerous characters that should be replaced in user input when the users input will be inserted in a MySQL
  • pwn入门:基本栈溢出之ret2libc详解(以32位+64位程序为例)

    目录 写在开头 题目简介 解题思路 前置知识 简要了解 plt表和got表 延迟绑定 例题详解 32位 64位 总结与思考 写在开头 这篇博客早就想写了 但由于近期事情较多 一直懒得动笔 近期被领导派去临时给合作单位当讲师 要给零基础的学员
  • 2.[BUU]rip

    1 检查文件 checksec 一下 查看之后发现是64位 直接放入IDA64进行反编译 2 IDA反编译 进行分析 发现是gets 函数可以造成栈溢出 从而可以覆盖栈上的内容 想法 通过gets函数 栈溢出 来篡改栈上的内容指令 从而达到
  • 将 java 远程调试器端口公开到互联网是否安全?

    我本来打算公开一个端口 用于通过互联网远程调试基于 Java 的 Web 服务 但三思而后行 我意识到它没有任何身份验证 从理论上讲 似乎可以编写一个工具 附加到远程调试器端口 并通过 Java API 执行任意系统命令 或者修改 转储数据
  • MongoDB $regex 查询和潜在的漏洞

    我们有一个 REST API 用于查询 MongoDB 中的记录 非常简单 大致如下 GET api items q foo 在开发过程中 允许正则表达式作为查询很方便q 我们只需将查询参数传递给 MongoDB regex运算符并且不进行
  • printf() var-arg 引用如何与堆栈内存布局交互?

    给出代码片段 int main printf Val d 5 return 0 是否有任何保证编译器会存储 Val d and 5 连续地 例如 d l a V 5 Format String
  • 漏洞利用开发 - GETS 和 Shellcode

    试图了解更多有关利用开发和构建 shellcode 的信息 但遇到了一个我不明白背后原因的问题 为什么我无法运行 execve bin sh 等 shellcode 并生成可以与之交互的 shell 另一方面 我可以创建一个反向 bind

随机推荐

  • cloudstack 创建与删除VM流程

    创建VM时 用户将命令发给ApiServlet处理 通过调度执行DeployVMCmd的execute方法 它的顺序图如下 删除VM调度执行DestroyVMCmd的execute方法 它的流程图如下 在DestroyVMCmd在执行exe
  • springboot修改默认8080端口

    springboot自带的Tomcat端口是8080 有时候项目多了就会引起端口占用的问题 所以我们需要修改其中的端口或者杀掉8080端口 1 修改springboot端口方法 我们只需要在 application properties 中
  • angularjs中state的参数4_AngularJS路由系列(四)- UI-Router的$state服务、路由事件、获取路由参数...

    http www myexception cn javascript 2041588 html ngularJS路由系列 4 UI Router的 state服务 路由事件 获取路由参数 项目文件结构 node modules public
  • 华为OD机试 - 计算误码率(Java)

    题目描述 误码率是最常用的数据通信传输质量指标 它可以理解为 在多少位数据中出现一位差错 移动通信网络中的误码率主要是指比特误码率 其计算公式如下 比特误码率 错误比特数 传输总比特数 为了简单 我们使用字符串来标识通信的信息 一个字符错误
  • python语法:多线程同时处理大量文件

    先写在前面 thread模块 简单来说 cpu的反复横跳而已 要写并发机制 还得用多进程multiprocessing模块 想要快速实现的朋友可以看看我这篇文章 是枝裕和 内 python中的多进程 zhuanlan zhihu com 当
  • conda activate激活虚拟环境时报错:Your shell has not been properly configured to use ‘conda activate‘.的解决方法

    场景 ubuntu系统 问题描述 使用conda activate pytorch想激活虚拟环境pytorch时报错 CommandNotFoundError Your shell has not been properly configu
  • 电脑注册表误删恢复办法:系统文件和设置还原法

    一 起因 为了修改电脑字体一不小心把Control Panel整个注册表给删除了 导致电脑界面变的锯齿 界面变形等各种问题 网上找了许多方法都没成功或者难度较大 最终使用系统恢复还原点将系统变成几个小时前的各种设置 包括浏览器记录 系统设置
  • Ubuntu下FFmpeg的安装方式

    FFmpeg介绍 音视频的广泛应用 直播类 音视频会议 腾讯会议 Zoom 娱乐直播 斗鱼 虎牙 音视频通话 QQ 微信 网络视频 腾讯视频 爱奇艺 短视频 抖音 快手 视频监控 海康 人工智能 人脸识别 智能音箱 概念 FFMPEG全称为
  • 性能测试学习之三--关联

    为什么要做关联 脚本里面这个值是写死的 但服务器传值每次变化 为了保证脚本的正确性 所以要将这个值取到传到脚本里面 所以要将这个值进行关联 关联就是将服务器动态变化的一个值保存为一个动态参数 以便后面需要用的该值的请求来用 一 哪些值或者哪
  • 服务器exsi 5.5安装linux,IBM X3850 X5服务器ESXi 5安装配置全过程——安装

    本系列以一台新上架的IBM X3850 X5服务器为例 从开始做RAID5到VMWARE ESXI5的安装配置进行全程演示 希望对你有些帮助 一 服务器RAID5 启动服务器 直到出现如下界面时 按CTRL H键进入配置阵列界面 点击 St
  • pytorch-geometric笔记

    这篇博客是我学习pytorch geometric 正文将以PyG代替 时做的笔记 有错误的地方在所难免 欢迎指正 非常感谢 参考pytorch geometric官网 1 图数据处理 1 1 创建自己的图数据 PyG创建图的方式很简单 假
  • K8S从入门到放弃系列-(13)Kubernetes集群mertics-server部署

    集群部署好后 如果我们想知道集群中每个节点及节点上的pod资源使用情况 命令行下可以直接使用kubectl top node pod来查看资源使用情况 默认此命令不能正常使用 需要我们部署对应api资源才可以使用此命令 从 Kubernet
  • Google浏览器打开新页面会覆盖当前页面的问题

    点击链接时使用鼠标中间的转轮点击 会在后台打开新网页 点击链接时使用Ctrl 鼠标左击 在后台打开新网页 点击连接时Ctrl Shift 左击 跳转到打开的新页面 在Google浏览器搜索 最原始页面搜索 设置 gt 回车 设置 gt 搜索
  • 相机 - 02 图像处理isp

    isp 知识 1 基本概念 1 1 isp 模块简介 参考 1 基本概念 图像处理流程图 1 光线 gt lens gt sonsor gt 光电转换 gt A D gt bayer pattern gt isp gt I O bayer
  • 【Win11尝鲜】Win 11 打开输入法自带GIF表情包、颜文字等

    Win 11 打开输入法表情包 在输入法输入文字时 可以看到win11在明显提示一个表情包按钮 win10也有这个功能 但win11更完善 点击按钮可以打开表情包部分 按windows 句号 是字母部分的句号 不是数字键盘处的点 然后就打开
  • 分享:交流负载箱 0~9.999A 可调 步进1mA

    前言 最近去客户那边 发现一个问题 他们的交流供电单元 测试很不方便 需求 供电单元输出 AC220V 50HZ 漏电保护保护功能 过载报警功能 超载保护功能 总而言之 他们需要一台 交流的电子负载 功能与直流电子负载一致 需求分析 供电端
  • Keepalived配置Nginx自动重启,实现不间断服务

    续接上篇https blog csdn net qq 44299529 article details 122987503 上回说到我们应该让nginx不间断的工作 只要主节点nginx没问题 就可以重启 除非主节点nginx出错 才切换成
  • 三种交换方式:电路交换、分组交换、报文交换

    三种交换方式 电路交换 分组交换 报文交换 文章目录 三种交换方式 电路交换 分组交换 报文交换 1 电路交换 Circuit Switching 2 分组交换 Packet Switching 3 报文交换 4 电路交换 分组交换 报文交
  • Echarts修改X轴文字设置倾斜角度

    在X轴配置项内加入rotate属性 比如rotate 15 倾斜 15度 xAxis type category axisLabel rotate 15 倾斜30度 lt lt lt lt lt 复制这里 interval 0 textSt
  • pwnable.tw - start

    首先安装 pwntools 在执行pip install upgrade pwntools时出错 cannot import name main 要修改 usr bin pip from pip import main 为 from pip