我有一个看起来像这样的C程序:
void doSomething() {
... <does something> ...
}
void vuln(char[] buf) {
{
...
printf(buf);
...
}
int main(int argc, char **argv)
{
... <get buf from user> ...
vuln(buf);
...
return 0;
}
我想要做的是创建一个格式字符串,该字符串将导致doSomething()
被执行。 ASLR已关闭,因此我知道doSomething()
函数的确切地址。
通过一些试验和错误,我发现可以通过将"%15$x"
作为格式字符串传递来打印返回地址。就我而言,此返回地址为0x8048ab8
。我想将其重写为0x804866b
(doSomething()
的地址)。我该怎么做呢?我无法在网上找到这个好的解释。
一般情况下,如果我们如何写入可以使用"%A$x"
访问的地址,其中A
是某个数字?