首页
社区
课程
招聘
[技术专题]软件漏洞分析入门_4_初级栈溢出C_修改程序流程
2007-12-15 01:01 35032

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

2007-12-15 01:01
35032
收藏
免费 7
打赏
分享
最新回复 (90)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mentalless 2007-12-15 22:08
26
0
还是不行,清楚cookie再登陆还是没图片只有链接,你能看到图片吗?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mentalless 2007-12-15 22:50
27
0
大哥能不能给个OllyDbg的入门教程,从这节课开始像我这样的没基础的就跟不上了。。。不知道怎么分析出来的各个函数的地址什么的,前面讲得都非常基础都能听懂。。。这里没基础是应该看什么教程?调试还是什么?谢谢!
还有,这节课的数组还是8个元素啊,没看到44个。。。是怎么回事?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mentalless 2007-12-15 23:05
28
0
不好意思,刚找到入门文章。。。对我的匆忙提问表示抱歉。。
http://bbs.pediy.com/showthread.php?t=31840
先去学习了。。。
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 66 2007-12-16 04:19
29
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iupek 2007-12-16 11:52
30
0
好喜欢你的文章
雪    币: 266
活跃值: (52)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
szdbg 5 2007-12-16 13:58
31
0
我一直在没有星星的夜里摸索,如今,终于看到了星光......
雪    币: 479
活跃值: (25)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
dttom 3 2007-12-16 14:15
32
0
对不起,我没看清楚,在我机器上用了示例的password文件,一直不能正确运行。用ollydby 一调试发现地址有问题,重新做一个password通过测试。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
阿南 2007-12-16 15:49
33
0
看了这个 收获很大,早出2个月就更好了 当时在看The_Shellcoder's_Handbook
可惜里面基础部分和中级部分都是在LINUX上实现的 想装LINUX 可惜硬盘容量不够...挣扎很久
才放弃的.....终于有在WINDOWS上的 基础教程了....特地还原了机器 恢复了删除的VC6

顺便问一下 为什么我把第4个单元 改成正确的EBP 结果 没有溢出?
看到你上面说 因为堆栈不平衡 程序崩溃 所以我试着改了第4个单元
重载以后 发现 第5个单元没有覆盖函数返回的地址...
怎么回事?而且改了以后 TXT里 全部变成乱码
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
壹只老虎 7 2007-12-16 18:38
34
0
坐第5排学习!~~~
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黑色猎鹰 2007-12-16 18:49
35
0
明天等着做沙发??
顺便问下,为什么:
仍然出于字节对齐、容易辨认的目的,我们将“4321”作为一个输入单元。

  buffer[8]共需要2个这样的单元
  第3个输入单元将authenticated覆盖
  第4个输入单元将前栈帧EBP值覆盖
  第5个输入单元将返回地址覆盖
这个是怎么得到的啊???是根据程序默认的处理还是用OD调试的
好象本文没说怎么个"通过动态调试,发现栈帧中的变量分布情况基本没变。这样我们就可以按照如下方法构造password.txt中的数据:"
雪    币: 246
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
天高飞扬 5 2007-12-16 19:55
36
0
来晚了,继续学习
吱-吱-吱
雪    币: 6604
活跃值: (3051)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
asd 2007-12-17 14:02
37
0
为什么楼主的OD可以识别 fopen这类函数呢
我的无论哪个版本都不行呀
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leejingang 2007-12-17 16:00
38
0
看出来了,你在出书。。什么时间,我第一个买
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jinghui 2007-12-18 16:31
39
0

请问显示反汇编后显示函数名而不是显示函数编号的OD插件是什么?谢谢大侠能帮助我,有这个插件的话不妨上传一个
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lmcc 2007-12-19 03:18
40
0
学习完成! 还比较容易理解啊,遇到一个问题呀
verify_password函数的位置 ,不用跳转怎么找这个位置啊``,要是自己去寻找漏洞的话 一定要会找 这个地方啊,作者大大讲明白点点嘛``不是很清楚怎么进去这个栈栈
雪    币: 224
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
glts 2007-12-19 04:35
41
0
坐后面也得学习啊
雪    币: 2041
活跃值: (261)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
failwest 8 2007-12-19 10:15
42
0
1:检查你写入的正确EBP的字节序,大顶机需要按DWORD字节逆序
2:检查填入字节的值,fscan函数会对一些敏感字节值(文件EOF)做出其他响应,如0x00等,前面有一层的朋友说过这个问题。这会password.txt中的字符串被截断。
3:当然乱码了,我们是按2进制形式填入的机器代码,肯定很多不在ASCII范围内的。
4:只恢复EBP是不够的,还有ESP,还有要让EIP返回到原先的位置。最后EAX这些寄存器也可能会引起错误。要修复所有相关寄存器才能恢复到原先的流程上去,这虽然困难,但却是可以做到的,取决于shellcode的质量和你的汇编编程技巧以及对系统的了解程度~~~~其实还有SEH退出等方法可以用

这个属于比较高级的问题,会在后面的讲座中逐渐加入。我还是主张一步一个脚印的学习方式,虽然可以看到很多鸟儿已经跃跃欲试,准备振翅高飞了:)
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
大菜一号 21 2007-12-19 14:28
43
0
举手,提问了
大概和楼主的系统不一样,地址有少许出入。就是要构造的返回地址0x401122和我的0x40111a,
对于楼主构造的
3433323134333231343332313433323122114000

fscanf总是能获取到完整的一行
而我的0x40111a
343332313433323134333231343332311a114000

总是只获取到返回地址前的dword,就是第四个"4321",导致后面构造的返回地址没能覆盖掉原来的

并且"4321432143214321"最后的一个NULL,覆盖了原返回地址0x4010ff,所以就返回到0x401000了,

附上我的txt
上传的附件:
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
大菜一号 21 2007-12-19 14:45
44
0
下面多发了一贴```汗
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
大菜一号 21 2007-12-19 14:45
45
0
原来0x1a模拟文件结束

我想其他办法吧
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
大菜一号 21 2007-12-19 16:01
46
0
问题解决

分享一下
---------------
因为我的系统中,该程序的密码正确提示分支地址是0x40111a,而0x1a模拟文件结束,当fscanf从文件获得一行文件时,遇到0x1a则停止。
所以不能直接覆盖返回地址( 1a 11 40 00 )
buffer[8] (8字节)+authenticated变量(4字节)+原栈帧(4字节)+返回地址(4字节)
=20字节

减去返回地址必须的四个字节,我们还有16字节的利用空间

构造一个返回地址,让程序返回我们的buffer,在buffer及以后的十六字节中让程序返回正确分支0x40111a

条件是,
因为fscanf,所以不能直接出现0x1a;
因为strcpy,所以不能直接出现0x00空中止;
控制在16字节以内。

下面是我构造的反汇编代码:
0013FB7C    33C0            xor     eax, eax
0013FB7E    B0 40           mov     al, 40
0013FB80    C1E0 10         shl     eax, 10
0013FB83    66:B8 2211      mov     ax, 1122
0013FB87    2C 08           sub     al, 8
0013FB89    50              push    eax
0013FB8A    C3              retn
0013FB8B    90              nop


上面加上一个nop后是十六字节,算出0x40111a,再后面四字节的返回地址

0013FB7C 33 C0 B0 40 C1 E0 10 66 B8 22 11 2C 08 50 C3 90 3腊@拎f?,P脨
0013FB8C 7C FB 13 00 |?..


返回ebp還是有問題,我放棄
在楼主大侠面前献丑了
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
⒉⒌ 2007-12-22 11:50
47
0
study  ...
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LULU 2007-12-22 12:57
48
0
http://bbs.pediy.com/attachment.php?attachmentid=10373&d=1197651319
请问显示反汇编后显示函数名而不是显示函数编号的OD插件是什么?谢谢大侠能帮助我,有这个插件的话不妨上传一个

我也有39楼的问题,我在导入库中加了一些库都没成功,哪位大侠帮忙吱一声
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnqdhi 2007-12-23 10:30
49
0
听课了 还好不是很晚 o(∩_∩)o...
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
MaxLucifer 2007-12-28 13:48
50
0
我已经来晚了n天了,不过还是很认真的学习。
游客
登录 | 注册 方可回帖
返回