所以我有这个功能:
void print_usage(char* arg)
{
char buffer[640];
sprintf(buffer, "Usage: %s [options]
"
"Randomly generates a password, optionally writes it to /etc/shadow
"
"
"
"Options:
"
"-s, --salt <salt> Specify custom salt, default is random
"
"-e, --seed [file] Specify custom seed from file, default is from stdin
"
"-t, --type <type> Specify different encryption method
"
"-v, --version Show version
"
"-h, --help Show this usage message
"
"
"
"Encryption types:
"
" 0 - DES (default)
"
" 1 - MD5
"
" 2 - Blowfish
"
" 3 - SHA-256
"
" 4 - SHA-512
", arg);
printf(buffer);
}
我希望使用一种格式的字符串脆弱性攻击(我的任务)。
我有一个开发程序, 向缓冲器填充节点和贝壳代码( 我用这个程序来缓冲溢出相同的函数, 所以我知道它的好处 ) 。 现在, 我做了一个文件的物件倾弃, 找到了. dtors_ list 地址, 我得到了 0x0804a20c, 增加了 4 字节, 以获得 0x804a210 的结尾 。
接下来,我用 gdb 来查找我运行程序时开始的点名地址。 使用这个, 我得到了 0xffbfdb8 。
因此,直到现在,我觉得我是正确的,现在我知道我想用格式字符串 将Nop 地址复制到我的.dtors_end 地址。这是我想到的字符串(这就是我作为用户输入而提供的字符串):
“X10x2x04x08x11xx2x204x208x208x08x13x204x08x08}168u}1美元 $51u=2美元
这对我来说行不通。程序正常运行, %s 被替换为字符串 I 输入(减去前端的小内存地址,2%的符号现在因某种原因是1%的符号)。
总之,我在这里有点失落, 任何帮助都会感激不尽的。