0%

在linux下,二进制引用的外部符号加载方式有三种,FULL_RELRO、PARTIAL_RELRO、NO_RELRO,在PARTIAL_RELRO和NO_RELRO的情况下,外部符号的地址延迟加载,并且,在NO_RELRO下,ELF的dynamic段可读写。

ELF有plt表和got表,程序调用外部函数函数时,call的是plt表项,而plt表中,是这样的

阅读全文 »

shellcode是一段用于利用软件漏洞而执行的代码,在实际的软件中,某些软件对允许输入的字符范围做了限制,导致检测到非法字符,从而无法成功输入shellcode。这时就需要加密shellcode。谷歌有一个开源工具ALPHA 3,可以将shellcode加密为全ascii可见字符。其大致原理根本文我们讲的是差不多的。

本文,我们要自己实现一个shellcode加密。我们就从攻防世界的一题holy_shellcode来看吧。这题的附件,攻防世界上没有,到这里下载https://pwn-1253291247.cos.ap-chengdu.myqcloud.com/holy_shellcode

我们用IDA分析一下

阅读全文 »

这题和bufferoverflow_a类似,只是在输入的时候,增加了一个检查

[遇到空字符就会截断,这将不利于我们在chunk里伪造数据。]{.mark}

阅读全文 »

首先,我们检查一下程序的保护机制

然后,我们用IDA分析一下,是一个经典的增删改查的程序,然后我们看到创建堆时,[前两个堆是用malloc创建,后面的堆用calloc创建]{.mark},这意味着,如果要泄露libc地址,只能靠前两个堆,后面的堆从bin里取出后会清空里面的信息。

阅读全文 »