1.CTFer成长日记16:用动态生成的迷日码迷代码绕过程序的静态安全检查——shellcode敏感字节检测绕过
2.CTFer成长日记17:千里之堤,溃于蚁穴——off-by-one漏洞原理与利用1
CTFer成长日记16:用动态生成的记源代码绕过程序的静态安全检查——shellcode敏感字节检测绕过
敏感字节检查绕过的基本原理,关键在于利用程序执行的日记动态特性。在执行时,源码若目标程序能允许某段内存被读写执行,下载我们就能尝试将shellcode注入,迷日码迷免费背景源码借此劫持程序执行流至shellcode首地址,记源实现ret2shellcode攻击。日记
然而,源码目标程序往往会对输入进行检查,下载发现敏感字节序列,迷日码迷如syscall、记源火凤凰翻牌机源码int等指令对应的日记机器码时,会拒绝输入,源码导致攻击失败。下载解决之道在于,编写一段可动态生成shellcode的代码。此代码本身不是shellcode,但能在执行中自动生成shellcode并执行,以此绕过敏感字节检查。
理解ret2shellcode攻击过程后,我们能设想编写代码动态生成shellcode。具体方法是突破新高幅图源码删除或替换敏感字节,并在执行时恢复。通过对比原始与修改后的shellcode,我们发现,关键在于修改自身shellcode的代码。
为了生成直接可用的shellcode,需修改原始shellcode,确保满足特定条件,即敏感字节序列指令在执行前恢复。将用于修改自身的shellcode片段置于shellcode头部,确保敏感字节指令被执行前恢复,实现绕过。租房/公寓管理系统源码
接下来,通过实例题验证上述方法的有效性。自定义源代码,使用特定命令编译,关闭程序的防御机制。通过内存布局,利用shellcode长度与main函数返回地址之间的偏移,实现攻击。
针对原始shellcode中的敏感字节,利用pwntools提供的shellcraft.sh()函数修改,首先删去syscall指令,软件注册E语言源码接着在汇编代码头部添加修改自身shellcode的代码,尾部补全syscall指令对应的机器码。通过异或操作,将敏感字节序列转换为可接受的序列。
最后,解决的问题是获取shellcode尾部地址。通过输出shellcode首地址的程序,结合生成等效shellcode,利用脚本获取机器码长度,最终编写攻击脚本完成整个过程。
CTFer成长日记:千里之堤,溃于蚁穴——off-by-one漏洞原理与利用1
off-by-one漏洞是缓冲区溢出漏洞的一种,主要特征是溢出仅一个字节,且这个字节的控制性不一定。这种漏洞通常出现在循环边界设置不当或字符串函数使用不当时。在不当的循环边界设置中,如果程序员误将小于等于号写为小于号,导致用户能够向指定的缓冲区写入多一个字节,覆盖缓冲区结束标志,进而泄露后续内存数据。例如,在C语言源代码中,如果用户输入长度为5的字符串,但由于循环条件错误地设置为小于等于号,导致输入的字符串实际上覆盖了缓冲区结束符,引发数据泄露。
另一种情况是字符串函数使用不当,如在复制字符串时未正确检查目标缓冲区的长度,导致目标缓冲区溢出。例如,在使用strcpy函数时,如果目标字符串长度小于实际需要的长度,将引发缓冲区溢出。在上述C语言代码示例中,如果复制的字符串长度为5,但目标缓冲区长度为5,将导致目标缓冲区溢出,其中溢出的字节通常为0x,不可控。
利用off-by-one漏洞的方法通常涉及通过控制溢出字节来影响程序的控制数据,如改变指针值或修改关键变量。常见利用思路是,当溢出的字节位于程序的控制数据时,利用其控制程序执行流程。利用漏洞时,通常需要分析漏洞所在函数的调用位置和程序的内部结构,确定溢出字节的控制范围。
以Asis CTF bks为例,分析了程序的源代码和结构,发现了一个off-by-one漏洞。该漏洞存在于读取用户输入的函数中,通过精心构造的输入数据,可以将输入数据写入到特定的内存位置,从而利用程序中的指针操作。分析表明,利用该漏洞可以篡改或伪造book数据结构,实现任意地址读写,并最终利用shellcode实现系统权限提升。实现这一过程的关键是通过构造特定的输入数据,控制off-by-one漏洞的溢出字节,从而影响程序的控制流程和内存布局,最终实现漏洞利用。