课后解惑

Q:为什么要推广Ipv6呢?Ipv4有什么缺点吗?

A: Ipv4最大的缺点就是能分配的IP资源不足。除此之外,Ipv4还存在一些安全上的缺陷,比如不鉴别源端的合法性等。

Q:讲了三种监听端口后面的实现方法,分别是双管道、单管道和零管道,究竟哪种方法最好呢?

A:兵无定势,水无常行。不存在最好的方法,只有最适合实际情况的方法。我认为最好的方法对你来说未必方便,很多事情都是这样的。不过,非要给答案的话,建议大家尽量考虑使用管道吧!因为Winsock建议使用像Socket的重接套接字。

Q:测试单管道后门程序时,我用Telnet登陆成功,但不能执行命令,比如敲入 dir 命令,结果显示“d不是程序或命令,i不是程序或命令,r不是程序或命令”,真奇怪!

A:呵呵!因为Telnet的设计目的是最大限度的减少时延。所以它遵循的是用户刚输入字符就马上传送过去。这样你的 dir 命令就被分为d、i、r分别发送了。而单管道那面的实现,是一收到字符就执行,当然不能执行成功了。

Q:如果我要坚持用单管道后门,该怎么办?

A:一种方法是改进你的ShellCode,不要刚收到命令就传给CMD子进程执行,而是先把命令存起来,收到回车后,才一起传给CMD子进程;

另一种方法是改进客户端,不用Telnet,而使用NC。NC会等待用户输入命令,直到敲入回车以后才一起发送过去。当然,你也可以自己写一个登陆程序。

Q:有些后门程序执行也成功,登陆也成功。但想退出时,输入 exit 命令时程序就会死在那里,无论敲什么都退不出来,怎么回事?

A:不是CMD子进程退不出来,而是CMD子进程执行 exit 后都已经退出了。你无论再输入什么,子进程都不会有输出。但没有退出那个接收消息的循环,所以ShellCode就一直收命令,但什么也做不了。

解决方法:可以加个字符判断。如果接收的命令是 exit ,就退出ShellCode的循环。

Q:我按照书上的步骤测试,提取出ShellCode,并在溢出程序中测试,但不能成功,为什么呢?我的环境是XP SP2。

A:不能成功的原因有很多,本书后面会有详细的分析。但XP SP2加入了新的安全保护措施,你先换个系统测试吧!

Q:先写汇编,然后提取ShellCode,感觉有点麻烦也……

A:一般的ShellCode功能比较少,代码也比较短,所以用汇编写,在熟之后,还是比较方便的。多练习一下就好了。

Q:那对功能要求比较多的ShellCode,应如何方便的写呢?

A:也有简单的方法!我们可以用高级语言写代码,再直接提取成ShellCode。但要经过一定处理,使其符合流程。我们将在高级ShellCode编写技巧中提到。