看雪论坛
发新帖
8

[技术专题]软件漏洞分析入门_4_初级栈溢出C_修改程序流程

failwest 2007-12-15 01:01 28932
本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (90)
书生lee 2007-12-28 20:03
51
将password.txt保存后,用OllyDbg加载程序并调试,可以看到最终的栈状态如下表所示:
这是啥意思啊?怎么加载?
我很菜...不号意思...
书生lee 2007-12-29 00:32
52
又研究一晚上,..还是不明白..我已经填好PASSWORA把程序将跳转到验证通过的分支位置搞好了,但是如何....加载?
尼摩nemo 2007-12-29 14:44
53
[QUOTE=failwest;392030]
局部变量名  内存地址  偏移3处的值  偏移2处的值  偏移1处的值  偏移0处的值
buffer[0~3]  0x0012FB14  0x31 (‘1’)  0x32 (‘2’)  0x33 (‘3’)  0x34 (‘4’)
buffer[4~7]  0x0012FB18  0x31 (‘1’)  0x32 (‘2’)  0x33 (‘3’)  0x34 (‘4’)[/QUOTE]

本来以为内存字节顺序写反了,仔细一看,原来是偏移大的在前面,哈哈……
讲得很透彻,辛苦了
1
tjszlqq 2008-1-2 12:33
54
真正的高人啊!
zhtjia 2008-1-2 13:50
55
真的牛人,顶...
ljseven 2008-1-2 20:14
56
学习,感谢!
shinechou 2008-1-10 17:43
57
大侠辛苦了,太棒了,希望能继续啊!
1
eanson 2008-1-17 12:14
58
[QUOTE=黑色猎鹰;392577]明天等着做沙发??
顺便问下,为什么:
仍然出于字节对齐、容易辨认的目的,我们将“4321”作为一个输入单元。

  buffer[8]共需要2个这样的单元
  第3个输入单元将authenticated覆盖
  第4个输入单元将前栈帧EBP值覆盖
  第5个输入单元将返回地址覆盖
这个是怎么得到的啊???是根据程序默认的处理还是用OD调试的
好象本文没说怎么个"通过动态调试,发现栈帧中的变量分布情况基本没变。这样我们就可以按照如下方法构造password.txt中的数据:"...[/QUOTE]

同问楼主,如何通过动态调试,弄清楚栈帧中的变量分布情况?感觉这是关键。谢谢楼主的好文!
bruclan 2008-1-18 23:11
59
哈哈,成功,真的感觉受益匪浅,谢谢楼主无私奉献的国际共产主义精神,我会继续努力学校去的
Macinsh 2008-1-19 15:12
60
好帖,学习!
xujiejun 2008-1-21 23:13
61
受益匪浅啊
sdmhfeng 2008-1-24 18:47
62
太好了,正在学习。
俊虎 2008-1-24 21:18
63
根据指导,自己动手丰衣足食
高亮 2008-1-25 17:55
64
晕,一直以为int是16位的,原来是32,自己的基础不牢哦~

遇到这样的帖子 就要 狂顶 !

又学习了

ps: 啊哈哈哈,我做最后一排;(
creatorwm 2008-1-27 16:02
65
谢谢楼主分享了
       说的很详细啊
       偶学习了
svszmh 2008-1-27 16:12
66
厉害,真厉害
Fido 2008-2-4 17:15
67
楼主的代码风格我是不敢苟同的。。。

也许你在编译选项里面已经加了STDLIB.H

但是我们确实如果VC6.0来编译的话,缺少stdlib.h头,报错为exit函数未定义

不喜欢你MAIN函数前不加VOID,,,不喜欢你MAIN函数里不加RETRUN。。。

技术水平我倒是膜拜了!
流水寒 2008-2-4 22:46
68
慢慢的学习中 谢谢了
task 2008-2-25 15:59
69
怎么不行啊?在DOS下搞出这个E:\sun\a>cl a2.cpp

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

a2.cpp
a2.cpp(7) : error C2065: 'strcmp' : undeclared identifier
a2.cpp(8) : error C2065: 'strcpy' : undeclared identifier
a2.cpp(18) : error C2065: 'exit' : undeclared identifier
a2.cpp(31) : warning C4508: 'main' : function should return a value; 'void' retu
rn type assumed
4
三根火柴 2008-3-3 17:49
70
学到第三节了,吱一声
ziffer 2008-3-7 18:00
71
我想问一下:OllyDbg 的调用堆栈窗口怎样才能总是前端显示呢,现在只要一点其它地方或步进窗口就跑到后面去了,好麻烦啊
望同志们指点一下阿
1
wsyzyddd 2008-3-18 00:45
72
赞一个先!
附上我的解决方案(MS已经落伍了..)
Mr.failwest的exploit1=1152921504606846977D(2进制1000000000000000000000000000000000000000000000000000000000001B)
Mr.failwest的exploit2=
60 33 DB 53 68 67 6E 61 6C 68 6F 61 69 78 8b c4
53 50 50 53 B8 8A 05 D5 77 FF D0 61 FF 25 18 11  
40 90 90 90 90 90 90 90 90 90 90 90 90 90 6C 10 40
90 90 90 90 f0 fa 12 00 (最后一位,- -,郁闷死)
PS:MessageBoxA=77d5058a
cyndyli 2008-3-28 14:40
73
成功,辛苦failwest
ZSYL 2008-5-23 03:24
74
听君一席话,胜读十年书
ZSYL 2008-5-23 03:25
75
听君一席话,胜读十年书
ZSYL 2008-5-23 03:59
76
再吱三声,以资感谢
lightdeng 2008-5-30 16:16
77
继续坐后排,慢慢看
很好的教材,很好的老师
wzqoo 2008-5-31 16:51
78
受益良多啊
alayg 2008-6-6 15:45
79

该图左边的栈帧结构是怎么分析出来的?是根据OLLydbg中的反汇编得来的吗?
谢谢
marbles 2013-5-2 11:11
80
跟随学习ing
aliarthas 2014-10-15 11:54
81
重新复习一遍,这次理解透了
Ubuntukun 2014-11-21 20:23
82
好帖,学习了。。。
wafd 2014-11-25 23:33
83
受大话西游毒害不清啊
搁浅地盘 2015-7-2 10:43
84
感谢楼主的分享。
谁人能懂c 2015-7-27 17:33
85
Can I mark it, mark mark
inheqqq 2015-7-30 15:13
86
吱吱吱吱
passpace 2016-8-26 22:49
87
吱吱吱~真的可以做到啊,好厉害!
wyylucky 2016-8-27 11:58
88
[QUOTE=alayg;463278]
该图左边的栈帧结构是怎么分析出来的?是根据OLLydbg中的反汇编得来的吗?
谢谢[/QUOTE]

通过调试确定buffer数组距离栈帧中函数返回地址的偏移量?
观察目标返回值上面那块栈的变化情况?

本人用的办法:
1、运行程序-随便输入密码“aaaa”-得到提示“incorrect password”(如果知道源程序,可能知道有congratulation!you have ...这个字符串)
2、通过右击-超级字符串查找incorrect password,双击定位
3、通过分析在0x004010E6处下断点,运行程序,输入密码:aaaaaaaa(稍长点)

4、最初是F7一步步跟进去,观察右下角栈变化情况,在哪块会改变栈地址:0x0012FB28上面区域的值(目标肯定是覆盖这个地址,所以观察它上面内容变化情况)
5、其实一步步跟进能找到strcpy调用的地方,能否发现 0x4011F1 MOV DWORD PTR DS:[EDI], EDX ,这里第一次EDI值就是缓冲区开始位置!


在0x004011F1处下断点,运行到此处时EDI值为栈0x0012FB18, 刚才压入的返回值在栈0x0012FB28,所以缓冲区开始位置到返回值位置长度为0x10, 16字节!于是乎,用16字节填充,第17-20字节设置为目标返回地址(congratulation 指令地址)!完活

这是我的方法,不知有没有更快捷直观的方法!
上传的附件:
wyylucky 2016-8-28 14:34
89
缓冲区溢出分析第03课:缓冲区溢出的利用
里面提到通过一长串字符来定位溢出位置!TestCode[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
YP星星 2017-2-14 10:44
90
吱……吱……吱……吱……吱……吱……
zlgxzswjy 2017-8-28 09:41
91
您好,我是使用linux系统来进行实验的,但是我发现,按照同样的方法,在windows平台上就可以溢出成功,但是放到linux下,就会出现无法复现的情况,请问这是因为linux跟windows架构不同吗?我的linux是装在虚拟机下的,还请您能够给我讲解一下,谢谢您了!
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 域名 加速乐 保护 | SSL证书 又拍云 提供 | 微信公众号:ikanxue
Time: 0.017, SQL: 13 / 京ICP备10040895号-17