ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pwn从0开始-1-hello_pwn

2021-11-01 01:00:40  阅读:154  来源: 互联网

标签:编码 存储 读取 int 开始 pwn hello 字节


队里没人打pwn,由于某些原因还是练练吧。

我是pwn完全新手(就会点c语言),开个博客系列记录一下自己的pwn之路。

网上pwn题目不是很多,主要从攻防世界的几个pwn开始练吧

由于博客是个分享的地方,我就详细写写我遇到的大部分问题,网上pwn入门还是太深了

 

hello_pwn

这里先看文件多少位和栈保护啥的,这里不重要就不截图了

 

先看main函数,当dword_60106c==1853186401即可执行sub_400686函数

 

该函数就是输出flag,那怎么让它等于,先看read函数

函数名:read
头文件:<io.h>
函数原型: int read(int handle,void *buf,int len);
功能:用于读取打开文件的内容
参数:int handle 为要读取的文件
          void *buf  为要将读取的内容保存的缓冲区
          int len    读取文件的长度
          返回值:返回实际读取的字节数

 

看这句话就是读取你输入的参数,读取到unk_601068处,长度就是0x10uLL

但什么是0x10uLL?0x开头是10进制,那么uLL结尾是十六进制的数字吗,查了一下不是

 

 

 那么长度就是接收16位OK,我们看一下unk_601068和dword_60106c

 

发现目标dword_60106c就在写入位置下面4个位置,那么写内容填入到目标位置就可以了,但是填多少呢

我观察可以发现地址右边有db和dd的表示,查一下

db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1

dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2

dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4

那么db是一个字节我们要写填好4给db,那就输入四个字节内容:aaaa(什么都可以)

然后到了目标位置他是dd,是双字类型,占据4个字节。我们要让这4个字节等于1853186401

我们要是直接输入1853186401,会发现这其实占了10个字节,因此我们要想一个字节和数字转换的方式。

字节是计算机存储数据的存储单元,是一个8位的二进制数,所以最多只能表示256个数字(0-255)。

编码是大家对计算机如何使用字节来表示一个字符的约定,可分为ASCII编码,ANSI编码(本地化编码),UNICODE编码(国际化编码)三种。

我们先把10进制转16进制

1853186401->6e756161

16进制转字符串

6e756161->nuaa

发现转换后正好是目标位置的双字类型,4个字节。

但是组合输入aaaanuaa发现没有flag,这个原因是因为大小端序

大端就是:存储最高有效字节在最小的地址(网络传输文件存储常用)。
小端就是:存储最低有效字节在最小的地址(计算机内部存储)。

大小端序就是字节顺序相反,因为我们覆盖存储,所有这里采用小端序

那么输入aaaa+aaun即可

 

 

 

标签:编码,存储,读取,int,开始,pwn,hello,字节
来源: https://www.cnblogs.com/aninock/p/15491818.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有