コード:
void doit()
{
system("/bin/sh");
exit(0);
}
int main(int argc, char **argv)
{
static int the_var;
char buf[512];
the_var = 20;
strncpy (buf, argv[1], sizeof(buf) - 1);
printf (buf);
if (the_var != 20)
{
doit();
} else {
printf ("\nthe_var @ 0x%08x = %d 0x%08x\n", &the_var, the_var, the_var);
}
}
プログラムはスティッキー ビット (所有者の uid 0) で実行されています。私がしなければならないことは、それをクラックし/bin/sh
てルートとして実行することだけです。
でプログラムをクラックする方法を知っていfe
ます。バッファオーバーフローとstrcpy
(シェルコード)ですが、これに対して「フォーマット文字列攻撃」を使用する方法はありません。
ご覧のとおり、 があり、var the_var
それが 50 に等しくない場合は、シェルが実行されています (何らかの方法で変更しようとするかもしれませんが、いくつかの汚い魔法ですか?)。とにかく、あるprintf (buf)