首页
社区
课程
招聘
《The Shellcoder's handbook》第四章_格式化串漏洞
2006-11-12 20:21 14167

《The Shellcoder's handbook》第四章_格式化串漏洞

arhat 活跃值
31
2006-11-12 20:21
14167
4       
格式化串漏洞

尽管格式化串漏洞与操作系统无关,但为了方便大家理解,我们本章仍以Linux为平台来介绍格式化串漏洞。出现格式化串漏洞最常见的原因是在C程序里,没有正确调用带有可变参数的函数而产生的后果。从这一方面讲,只要是用C语言写的程序都可能存在格式化串漏洞,所以它影响所有带C编译器的操作系统,可以说,几乎每个操作系统都存在这种漏洞。
为什么从根本上会存在格式化串漏洞呢?本章结尾部分“为什么会这样?”有所解释。

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (14)
雪    币: 32401
活跃值: (18875)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2006-11-12 20:42
2
0
arhat做事确实严谨认真。
格式化串漏洞这块是个好的话题。
雪    币: 2108
活跃值: (208)
能力值: (RANK:1260 )
在线值:
发帖
回帖
粉丝
arhat 31 2006-11-13 08:41
3
0
格式串漏洞在前几年风光一时,但漏洞猎人赶尽杀绝的做法,致使现在很少见到它的身影。
。。。
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
colboy 2006-11-13 13:11
4
0
谢谢!!!!!!!!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
harrmn 2006-11-13 16:42
5
0
感著?主的辛?
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
softKiller 2006-11-14 11:29
6
0
我要顶,感谢楼主
雪    币: 233
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zjgjohn 2006-11-14 13:07
7
0
谢谢,一出来新的我就下载后看!!!楼主辛苦了!!
雪    币: 150
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chinatme 2006-11-14 21:15
8
0
感觉翻译的过程也是成长的过程~,如果以后自己有水平了,也希望能加入TT小组,服务大家吗~,挺好的~,呵呵~,支持一下~arhat大哥~
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xianhe 2006-12-18 22:30
9
0
支持楼主.  下载  中
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
jjnet 5 2006-12-23 22:20
10
0
根据57页描述的
直接输出esp+(n*sizeof(int))的值

////////////////////////////
./dowu localhost "%3\$x"
应该会输出如下内容:
200-index bfffca9c
////////////////////////////

这里的"%3\$x"是printf的格式化控制,
我在vc6上的printf做的例子
printf("%3\$x", 1, 2, 3);
并不会输出3啊,输出$x;
如果printf("%3\x",1,2,3); 直接提示编译失败,\x后面必须跟
一个16进制数.

是不是linux的format跟windows的c运行库有区别??
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Wilbur 2006-12-28 23:51
11
0
请教:

关于wu-ftpd 书中说到:

"我们首先需要计算出我们提交的字符串在栈上的起始位置.于是我们可以执行下列命令:
for( (i = 1;i<1000;i++) ): do echo -n "$i" && ./dowu localhost "AAAAAAAAAAAAAAAA%$i\$x" 0;done | grep 4141

从输出的数据里面(在这个格式化串的开头)我们可以找到41414141的位置 ,在我的机器上是272"

这一段我一直没有理解是什么意思

只知道那个shell命令是执行999次循环 , 每次循环打印出序号i ,然后执行程序./down, 参数是那一串字符 然后找出结果包含4141的行

我不明白4141是哪里冒出来的?  

也不明白site index  AAAAAAAAAAAAAAAA%$i\$x  会出现什么结果呢?

ps:我是刚刚学习安全方面的学生  我想与一些也是刚起步的朋友们交流 
我的qq是455010613 希望大家共同进步 
雪    币: 2108
活跃值: (208)
能力值: (RANK:1260 )
在线值:
发帖
回帖
粉丝
arhat 31 2006-12-29 08:56
12
0
回10楼
区别是肯定有的,否则两个平台之间的移植就容易了。

--------------------------------
回11楼

A=0x41

寻找4141,就是寻找“AAAAAAAAAAAAAAAA%$i\$x”中连续两个A

site index  AAAAAAAAAAAAAAAA%$i\$x
执行上述命令,将触发有漏洞的wu-ftpd出错,你可以用GDB调试。

注意书中有些程序的输出因机器、操作系统的版本等原因而有所不同。

实践是检验真理的唯一标准。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Wilbur 2006-12-31 16:13
13
0
printf("ABCD%x...%x);
1)这个%x到底打印的是哪里的内容呢?  我也知道是打印出栈上的内容
但是具体是哪个地方呢?

2)随着%x的增加 某个%x会最后打印出DCBA的吧   但是%x增加了(printf参数长度增加)   会不会发生这个栈溢出 然后改写printf的返回地址啊?

不知道下面这个关于printf调用时 栈的情况的图 我画的对不对  

雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
heroinhell 2007-2-3 07:34
14
0
看到这章了,再次为楼主的辛勤努力致敬
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
simpler 2007-2-22 19:22
15
0
要读书,要读好书.谢谢
游客
登录 | 注册 方可回帖
返回