CN107480523A - 一种Intel并Linux64平台上缓冲区溢出利用方法 - Google Patents

一种Intel并Linux64平台上缓冲区溢出利用方法 Download PDF

Info

Publication number
CN107480523A
CN107480523A CN201710707976.6A CN201710707976A CN107480523A CN 107480523 A CN107480523 A CN 107480523A CN 201710707976 A CN201710707976 A CN 201710707976A CN 107480523 A CN107480523 A CN 107480523A
Authority
CN
China
Prior art keywords
function
linux64
overflowed
gdb
platforms
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201710707976.6A
Other languages
English (en)
Inventor
王鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhengzhou Yunhai Information Technology Co Ltd
Original Assignee
Zhengzhou Yunhai Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhengzhou Yunhai Information Technology Co Ltd filed Critical Zhengzhou Yunhai Information Technology Co Ltd
Priority to CN201710707976.6A priority Critical patent/CN107480523A/zh
Publication of CN107480523A publication Critical patent/CN107480523A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开一种Intel并Linux64平台上缓冲区溢出利用方法,涉及网络安全技术领域;基于Linux64位平台上函数调用时会将一系列寄存器做压栈处理,这些保存在栈上的寄存器值会在函数实现部分被引用,通过利用覆盖返回地址的程序溢出,通过确定函数的入口地址,将函数开头部分寄存器压栈时寄存器的值记录下来并用作溢出内容的一部分,保证函数返回不出错以免函数崩溃。还可运用到渗透测试过程中,增加测试的适用范围。

Description

一种Intel并Linux64平台上缓冲区溢出利用方法
技术领域
本发明公开一种缓冲区溢出利用方法,涉及网络安全技术领域,具体的说是一种Intel并Linux64平台上缓冲区溢出利用方法。
背景技术
在网络安全领域,缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。然而目前介绍的溢出利用多是针对32位平台,很少有可供参考的64位平台上程序溢出利用的方法。而本发明提供一种Intel并Linux64平台上缓冲区溢出利用方法,鉴于Linux64位平台上函数调用时会将一系列寄存器做压栈处理,这些保存在栈上的寄存器值会在函数实现部分被引用,通过利用覆盖返回地址的程序溢出,通过确定函数的入口地址,将函数开头部分寄存器压栈时寄存器的值记录下来并用作溢出内容的一部分,保证函数返回不出错以免函数崩溃。还可运用到渗透测试过程中,增加测试的适用范围。
gdb:GNU项目的程序调试器。
peda:python exploit development assistant的简写,是一个利用程序开发辅助工具。
ida:商业的反汇编器和调试器。
发明内容
本发明针对目前技术发展的需求和不足之处,提供一种Intel并Linux64平台上缓冲区溢出利用方法,基于Linux64位平台,利用缓冲区溢出,使函数正常返回而达到利用的目的。
一种Intel并Linux64平台上缓冲区溢出利用方法,基于Linux64位平台系统,关闭栈保护、堆栈不可执行和ASLR编译器选项后编译应用程序;
观察函数开头部分入栈的寄存器值并记录,确定待溢出字符数组的偏移量,利用偏移量和记录下来的寄存器值构造溢出内容,
使用构造的溢出内容,覆盖函数的返回地址,完成函数的返回。
通过gdb在函数上设断点,在函数被调用时通过gdb观察开头部分入栈的寄存器值。
待溢出字符数组的偏移量是函数初调用时记录的rsp寄存器的值与待溢出的字符数组的地址的差值。
在函数的ret指令上设断点,当应用程序执行到ret时,通过gdb查看函数中的待溢出的字符数组的地址。
一种Intel并Linux64平台上缓冲区溢出利用系统,包括Linux64位平台、调试模块、汇编模块,
在Linux64位平台系统上,关闭栈保护、堆栈不可执行和ASLR编译器选项后编译应用程序;
调试模块观察函数开头部分入栈的寄存器值并记录,汇编模块确定待溢出字符数组的偏移量,利用偏移量和记录下来的寄存器值构造溢出内容,
Linux64位平台系统使用构造的溢出内容,覆盖函数的返回地址,完成函数的返回。
所述的系统中汇编模块将函数初调用时记录的rsp寄存器的值与待溢出的字符数组的地址的差值作为待溢出字符数组的偏移量。
所述的系统中调试模块包括gdb,通过gdb在函数上设断点,在函数被调用时通过gdb观察开头部分入栈的寄存器值。
所述的系统中调试模块在函数的ret指令上设断点,当应用程序执行到ret时,通过gdb查看函数中的待溢出的字符数组的地址。
本发明与现有技术相比具有的有益效果是:
本发明提供一种Intel并Linux64平台上缓冲区溢出利用方法,基于Linux64位平台上函数调用时会将一系列寄存器做压栈处理,这些保存在栈上的寄存器值会在函数实现部分被引用,通过利用覆盖返回地址的程序溢出,通过确定函数的入口地址,将函数开头部分寄存器压栈时寄存器的值记录下来并用作溢出内容的一部分,保证函数返回不出错以免函数崩溃。还可运用到渗透测试过程中,增加测试的适用范围。
附图说明
图1本发明方法的流程示意图。
具体实施方式
本发明提供一种Intel并Linux64平台上缓冲区溢出利用方法,基于Linux64位平台系统,关闭栈保护、堆栈不可执行和ASLR编译器选项后编译应用程序;
观察函数开头部分入栈的寄存器值并记录,确定待溢出字符数组的偏移量,利用偏移量和记录下来的寄存器值构造溢出内容,
使用构造的溢出内容,覆盖函数的返回地址,完成函数的返回。
同时提供一种Intel并Linux64平台上缓冲区溢出利用系统。
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,对本发明进一步详细说明。
本例的平台为intel x86_64处理器上运行的64位Linux操作系统,
首先开启代码优化选项,关闭栈保护、堆栈不可执行和ASLR编译器选项后编译C++应用程序。其中GCC关闭栈保护选项为-fno-stack-protector,关闭堆栈不可执行选项为-zexecstack。例如g++-g–O2-m64-z execstack-fno-stack-protector a.cpp-o a2。其中a.cpp为一个C++应用程序。
其次通过gdb将函数,此处为函数do_getline()的开头部分入栈的寄存器值记录下来,如下为部分记录的寄存器值:
(gdb)disassemble 0×555555554f10
从上述数据中,可观察到函数开头部分入栈的寄存器值有6个,分别为r15、r14、r13、r12、rbp、rbx。在函数do_getline()上通过gdb设断点,当其被调用时将上述6个寄存器的值以及rsp的值记录下来,如下:
rsp:0×7fffffffe108
r15:0×7fffffffe150
r14:0×5555555552c0
r13:0×7fffffffe180
r12:0×7fffffffe180
rbp:0×7fffffffe110
rbx:0×7fffffffe170
其中rsp的值为0x7fffffffe108,r15的值为0x7fffffffe150,其余寄存器的值以此类推。
接着在函数do_getline()的ret指令上设断点,当应用程序执行到这个ret时,通过gdb查看这个函数中的待溢出的字符数组的地址。如待溢出的字符数组为password字符数组,记录的password字符数组的地址值为0×7fffffffe050。
即(gdb)×password
0×7fffffffe050:0×00000000
字符数组password的定义如函数do_getline()所示:
std::string do_getline()
{
Char a;
Char password[128]={0};
Char b=ˋ*ˊ
...
}
利用函数do_getline()初调用时记录的rsp寄存器的值和字符数组password的地址的差值,以及记录下来的入栈的6个寄存器的值构造完整的溢出内容。
rsp寄存器值和字符数组password的差值为0x7fffffffe108-0x7fffffffe050=0xB8=184。除去6个寄存器占用的48个字节外,还需填充136个字节(184–6×8=136)。
可以构造136个“A”,加上6个寄存器的值,再加上溢出返回地址的值,此处为6个“B”,以python表示,即为:
"A"*136+"\x00\x00\x7f\xff\xff\xff\xe1\x70"[::-1]+"\x00\x00\x7f\xff\xff\xff\xe1\x10"[::-1]+"\x00\x00\x7f\xff\xff\xff\xe1\x80"[::-1]+"\x00\x00\x7f\xff\xff\xff\xe1\x80"[::-1]+"\x00\x00\x55\x55\x55\x55\x52\xc0"[::-1]+"\x00\x00\x7f\xff\xff\xff\xe1\x50"[::-1]+"B"*6
当使用构造的溢出内容时,将会以0x424242424242覆盖函数的返回地址,即寄存器rip的值为0x424242424242,如下所示:
Program received signal SIGSEGV,Segmentation fault,
0×0000424242424242in??()
(gdb)p$rip
$1=(void(*)(void))0×424242424242
(gdb)
上述实施例利用本发明方法基于Linux64位平台上,将函数开头部分寄存器压栈时寄存器的值记录下来并用作溢出内容的一部分,保证函数返回不出错以免函数崩溃。
并且上述实施例仅为解释说明本发明的技术方案,根据实际情况,利用本发明时当然可进行数据的调整或进行编译工具的替换。

Claims (8)

1.一种Intel并Linux64平台上缓冲区溢出利用方法,其特征在于基于Linux64位平台系统,关闭栈保护、堆栈不可执行和ASLR编译器选项后编译应用程序;
观察函数开头部分入栈的寄存器值并记录,确定待溢出字符数组的偏移量,利用偏移量和记录下来的寄存器值构造溢出内容,
使用构造的溢出内容,覆盖函数的返回地址,完成函数的返回。
2.根据权利要求1所述的方法,其特征在于通过gdb在函数上设断点,在函数被调用时通过gdb观察开头部分入栈的寄存器值。
3.根据权利要求1或2所述的方法,其特征在于函数返回地址和待溢出字符数组的偏移量是函数初调用时记录的rsp寄存器的值与待溢出的字符数组的地址的差值。
4.根据权利要求3所述的方法,其特征在于在函数的ret指令上设断点,当应用程序执行到ret时,通过gdb查看函数中的待溢出的字符数组的地址。
5.一种Intel并Linux64平台上缓冲区溢出利用系统,其特征在于包括Linux64位平台、调试模块、汇编模块,
在Linux64位平台系统上,关闭栈保护、堆栈不可执行和ASLR编译器选项后编译应用程序;
调试模块观察函数开头部分入栈的寄存器值并记录,汇编模块确定待溢出字符数组的偏移量,利用偏移量和记录下来的寄存器值构造溢出内容,
Linux64位平台系统使用构造的溢出内容,覆盖函数的返回地址,完成函数的返回。
6.根据权利要求5所述的系统,其特征在于汇编模块将函数初调用时记录的rsp寄存器的值与待溢出的字符数组的地址的差值作为待溢出字符数组的偏移量。
7.根据权利要求5或6所述的系统,其特征在于调试模块包括gdb,通过gdb在函数上设断点,在函数被调用时通过gdb观察开头部分入栈的寄存器值。
8.根据权利要求7所述的系统,其特征在于调试模块在函数的ret指令上设断点,当应用程序执行到ret时,通过gdb查看函数中的待溢出的字符数组的地址。
CN201710707976.6A 2017-08-17 2017-08-17 一种Intel并Linux64平台上缓冲区溢出利用方法 Pending CN107480523A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710707976.6A CN107480523A (zh) 2017-08-17 2017-08-17 一种Intel并Linux64平台上缓冲区溢出利用方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710707976.6A CN107480523A (zh) 2017-08-17 2017-08-17 一种Intel并Linux64平台上缓冲区溢出利用方法

Publications (1)

Publication Number Publication Date
CN107480523A true CN107480523A (zh) 2017-12-15

Family

ID=60600750

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710707976.6A Pending CN107480523A (zh) 2017-08-17 2017-08-17 一种Intel并Linux64平台上缓冲区溢出利用方法

Country Status (1)

Country Link
CN (1) CN107480523A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112347487A (zh) * 2020-11-30 2021-02-09 杭州安恒信息技术股份有限公司 一种mips指令集程序的栈溢出漏洞的调试分析方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1564098A (zh) * 2004-04-09 2005-01-12 南京大学 一种防止缓冲区溢出攻击的动态堆栈内存管理方法
CN101241532A (zh) * 2008-02-15 2008-08-13 北京邮电大学 面向源代码的基于不等式组求解的缓冲区溢出检测方法
US20110138367A1 (en) * 2009-12-09 2011-06-09 Havin Victor L Method and system for detecting memory leaks
US20110179400A1 (en) * 2010-01-15 2011-07-21 Sun Microsystems, Inc. System and method for overflow detection USING PARTIAL EVALUATIONS
US20110289586A1 (en) * 2004-07-15 2011-11-24 Kc Gaurav S Methods, systems, and media for detecting and preventing malcode execution
CN102298677A (zh) * 2011-08-29 2011-12-28 瑞斯康达科技发展股份有限公司 一种堆栈溢出的保护方法和装置
CN103514405A (zh) * 2013-07-08 2014-01-15 北京深思数盾科技有限公司 一种缓冲区溢出的检测方法及系统
CN104008049A (zh) * 2013-02-22 2014-08-27 罗伯特·博世有限公司 用于监控机动车控制器工作系统中的堆栈存储器的方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1564098A (zh) * 2004-04-09 2005-01-12 南京大学 一种防止缓冲区溢出攻击的动态堆栈内存管理方法
US20110289586A1 (en) * 2004-07-15 2011-11-24 Kc Gaurav S Methods, systems, and media for detecting and preventing malcode execution
CN101241532A (zh) * 2008-02-15 2008-08-13 北京邮电大学 面向源代码的基于不等式组求解的缓冲区溢出检测方法
US20110138367A1 (en) * 2009-12-09 2011-06-09 Havin Victor L Method and system for detecting memory leaks
US20110179400A1 (en) * 2010-01-15 2011-07-21 Sun Microsystems, Inc. System and method for overflow detection USING PARTIAL EVALUATIONS
CN102298677A (zh) * 2011-08-29 2011-12-28 瑞斯康达科技发展股份有限公司 一种堆栈溢出的保护方法和装置
CN104008049A (zh) * 2013-02-22 2014-08-27 罗伯特·博世有限公司 用于监控机动车控制器工作系统中的堆栈存储器的方法
CN103514405A (zh) * 2013-07-08 2014-01-15 北京深思数盾科技有限公司 一种缓冲区溢出的检测方法及系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
BENJAMIN TEISSIER .ETAL: ""An Approach to Stack Overflow Counter-measures Using Kernel Properties"", 《TECHNICAL REPORT2014-001》 *
蒋朝惠 等: "《信息安全综合实验》", 31 August 2010, 中国铁道出版社 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112347487A (zh) * 2020-11-30 2021-02-09 杭州安恒信息技术股份有限公司 一种mips指令集程序的栈溢出漏洞的调试分析方法

Similar Documents

Publication Publication Date Title
Kemerlis et al. {kGuard}: Lightweight kernel protection against {Return-to-User} attacks
Akritidis Cling: A memory allocator to mitigate dangling pointers
Slowinski et al. Body armor for binaries: preventing buffer overflows without recompilation
US7711914B2 (en) Debugging using virtual watchpoints
JP5349498B2 (ja) ハードウェアリセット保護のための方法および装置
CN105260659A (zh) 一种基于qemu的内核级代码重用型攻击检测方法
US10395033B2 (en) System, apparatus and method for performing on-demand binary analysis for detecting code reuse attacks
CN104732152A (zh) 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
CN105630659A (zh) 应用崩溃日志的获取方法及装置
CN107102885A (zh) 利用adb方式检测安卓模拟器的方法及装置
CN113497809A (zh) 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN108197476A (zh) 一种智能终端设备的漏洞检测方法及装置
CN107800663A (zh) 流量离线文件的检测方法及装置
CN113412483A (zh) 具有针对地址探测的增加的阻力的计算设备
CN103902908A (zh) 一种对Android加固应用的恶意代码检测方法及系统
CN108920253A (zh) 一种无代理的虚拟机监控系统和监控方法
Bognar et al. Mind the gap: Studying the insecurity of provably secure embedded trusted execution architectures
CN107480523A (zh) 一种Intel并Linux64平台上缓冲区溢出利用方法
Cloosters et al. {SGXFuzz}: Efficiently synthesizing nested structures for {SGX} enclave fuzzing
Smirnov et al. Automatic patch generation for buffer overflow attacks
CN108573143A (zh) 基于程序插桩和动态信息验证的栈保护方法
CN107368713B (zh) 保护软件的方法和安全组件
CN116204891B (zh) 漏洞利用分析方法、设备及存储介质
CN106127054B (zh) 一种面向智能设备控制指令的系统级安全防护方法
Backer et al. On enhancing the debug architecture of a system-on-chip (SoC) to detect software attacks

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20171215