首页
社区
课程
招聘
[原创]小白的一次缓冲区溢出复现笔记
发表于: 2020-11-24 11:00 7777

[原创]小白的一次缓冲区溢出复现笔记

2020-11-24 11:00
7777

缓冲区溢出的原因是程序中没有仔细检查用户输入的参数,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。


通用寄存器:


AX(累加器)


BX(基址寄存器)


CX(计数器)


DX(数据寄存器)  ;可以分8位使用。


指针及变址寄存器:


SP(堆栈指针寄存器)


BP(基址指针寄存器)


SI(源变址寄存器)


DI(目的变址寄存器)


IP(指令指针寄存器):用来存放下一条要执行指令在内存中代码段中的偏移地址。


重点:缓冲区溢出堆栈覆盖顺序为 EIP -> ESP,通过控制EIP的指针跳转到ESP执行我们精心构造的shellcode


漏洞软件:vulnserver 已知参数TRUN


调试软件:Immunity Debugger


辅助脚本:noma.py


kali


1,双击启动vulnserver,默认监听9999端口


2,通过脚本不断向目标程序发送数据,并查看寄存机的值

import socket

import syshost = "192.168.1.74"

port = 9999

buffer = ["A"]

counter=100

while len(buffer) <= 30:    

    buffer.append("A"*counter)    

    counter=counter+200for string in buffer:   

     print "fuzzing is %s bytes" % len(string)    

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)    

connect=s.connect((host,port))    

s.send('TRUN /.:/' + string)   

s.close()

从上图可以看到,当发送到5900个字符时程序崩溃,说明存在缓冲区溢出

内存中都是以十六进制显示字符,由于字符“A”对应的十六进制为41,上图可以看到,我们发送的超长字符已经成功覆盖EIP和ESP,接下来需要精确找到是第多少个字符覆盖了EIP,我们需要控制他。

由于我们之前生成的字符全部是A,不知道是第几个A覆盖了EIP,我们要生成不重复序列,精确定位EIP位置



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-11-24 11:02 被半杯凉茶编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 4702
活跃值: (4649)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark
2020-11-24 21:38
0
雪    币: 615
活跃值: (1424)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3

链接:https://pan.baidu.com/s/19EvNeS2Ej_gPaC-TDPmTJw 

提取码:u7cm 



最后于 2022-6-22 10:31 被半杯凉茶编辑 ,原因:
2020-12-10 10:08
0
游客
登录 | 注册 方可回帖
返回
//