攻防世界-CGfsb
![](https://i-blog.csdnimg.cn/blog_migrate/e86da48a21f8739fe345604c46365f1e.png)
1.将文件拖入ubuntu用checksec检查保护
arch:arch是“Architecture”的缩写,表示二进制文件编译时采用的CPU架构。在安全中,arch通常用于表示二进制的CPU架构是否是适合攻击者开发shellcode的目标,因为攻击者需要知道适合攻击平台的内存偏移量和指令。因此,对于一个给定的攻击目标,知道其CPU架构可以帮助攻击者更容易地开发成功的攻击。
prlro:prlro是“Partial Relro”的缩写,表示二进制是否启用了Partial Relocation Read-Only保护。这种保护机制可以阻止攻击者利用GOT表重定向攻击,因为GOT表的地址被设置为只读,攻击者无法修改它。启用PRLRO可以提高二进制的安全性。
sstack:sstack是“Stack Smashing Protection”的缩写,表示二进制是否启用了栈破坏保护。栈破坏是指攻击者利用缓冲区溢出漏洞来篡改函数返回地址,从而控制程序的执行流程。启用Sstack可以在执行返回前检查栈帧中的数据完整性,以避免栈破坏攻击。
nx:nx是“No Execute”的缩写,表示二进制是否启用了不可执行内存保护。不可执行内存的保护可以防止攻击者将指令载入到内存中,从而造成代码执行和攻击。启用NX可以防止许多基于内存的攻击,例如ROP攻击、缓冲区溢出等。
如下图,我们发现PIE没有保护,全局变量的地址固定
![](https://i-blog.csdnimg.cn/blog_migrate/b5f2fd3b47f87af63563a7eec0c2cd19.png)
PIE”指的是“位置无关可执行文件”(Position-Independent Executable),它是一种可执行文件格式,可以在加载时动态地或静态地进行地址空间随机化。这使得攻击者更难利用缓冲区溢出等漏洞。因此,启用 PIE 可以提高程序的安全性。如果程序没有启用 PIE 保护,它的地址空间将始终是相同的,这意味着攻击者可以更容易地利用缓冲区溢出漏洞。
“全局变量地址固定”意味着全局变量在内存中的地址是固定的,不会在程序的不同运行中发生变化。这使得攻击者更容易利用全局变量的漏洞,例如缓冲区溢出。因此,在可能的情况下,应该尽量避免使用全局变量,或者使用一些技术来保护它们,例如限制它们的访问范围和使用堆栈内存而不是静态内存等。
2.使用IDA
如下图