3.2 后门总体思路
十分钟后,大家又坐好了,老师叮嘱道:“我一直强调:学东西,关键是学思路。有了整体的解决思路,那剩下的东西处理起来就比较方便了,这一点大家千万不要忘记啊!”
“嗯!好的!”同学们齐声答道。
“这里也一样,我们先来理清楚Telnet后门实现的总体流程,再来看如何实现。”
老师说:“大家先讨论一下,如何根据刚才的背景知识编写出Telnet的后门程序。”
老师接着说:“这次采用分组方式,每两个人一组,先组内讨论,然后每个组把构想的方法公布出来,最后大家再来一起讨论。”
“分组就按名单来分吧!”老师对着花名册念到,“古风和玉波一组;宇强和吴小倩一组……”
宇强的心里一为之动:我名字和吴小倩的名字是挨在一起的么?
分组完毕,大家都忙着找Partner,并七嘴八舌的讨论起来。宇强也站了起来,走到小倩面前,小心翼翼的问道:“我们是一组的吗?”
“是啊,你是宇强吧,你好!” 小倩对着宇强眨了眨眼睛,大大的眼睛好似一潭平静的湖水。
“你……好!” 宇强反而还有一阵慌乱。
“你坐下啊!”小倩指着旁边的位子说。
“好的,” 宇强的大脑是一片空白,闻到小倩秀发飘过来的清香味,不禁迷糊了,是梦还是现实呢?
“你的思路是什么呢?”一个声音把宇强拉了回来。宇强急忙理理思路,说道:“具体的我还不太清楚,但有一些感觉。”
“哦?什么感觉呢?”
其实,宇强想说是对你有感觉,但觉得未免太唐突和搞笑了,于是说:“老师把技术背景都讲了,我感觉把它们按一定的逻辑组合起来,就可以得到完美的Tlnet后门程序。”
“哦,逻辑组合?”小倩感兴趣的说道,“我觉得也有可能是这样。”
“嗯,我们边讨论边写下来吧! 宇强看到小倩并不讨厌自己,心里又了镇定很多。
“好的,”小倩拿出笔和纸,边说边画,“首先是有攻击机、标机,它们之间可以通过套接字Socket通信,如图3-15。”
“多么隽永的字啊!” 宇强暗想。见小倩要转头问他了,于是忙着补充说:“嗯,然后是一个父进程和子进程,它们之间可以通过管道pipe通信。”
“嗯,对,也把它画下来吧!”
“匿名管道是单向的,所以要相互通信必须要建两个匿名管道。” 宇强提醒道。
“哦,对!所以应该是这样,如图3-16。”
“然后呢?”画好图后,小倩问。
宇强说:“我想应该把两个图合起来。攻击机发的命令通过Socket传给目标机的父进程,目标机的父进程又通过一个匿名管道传给子进程,这里的子进程应该是cmd.exe,cmd.exe执行命令后,把结果通过另一个匿名管道返给父进程,父进程最后再通过Socket返回给攻击机。其示意图应该如图3-17。”
“哇!思路越来越清楚了!”小倩欢呼到。
“但……”宇强挠挠头,为难的说道,“这个方法可不可行,如何编程实现,我都还不太清楚。”
“能想到这一点,已经非常不错了!”身后一个声音把两人都吓了一跳。两人回头一看,原来老师巡查到这儿来了。
“好了,”老师对着全班同学大声说道,“分组讨论就到这里。大家回到原来的位置上去,我们一起来总结。”
教室里又是一阵忙乱,宇强犹豫的站了起来,鼓气勇气向小倩问道:“嗯,可以问下你的电话吗?”接着忙解释到:“以后有什么问题候好讨论啊!”
“哦!这样啊,我的电话8541XXXX。”女孩笑了,“应该是我多向你请教才是呢!”
“哪里哪里,互相学习嘛!” 宇强一边客气,一边抑制住住心中的喜悦。
回到位置上,坐一旁的古风问道:“怎么样?有结果么?”
“嗯!一般般吧!” 宇强心不在焉的说,只顾忙着找纸把号码记下来。
“我和玉波讨论的结果是这样的,”古风说道,“我们觉得可行,老师也说可行,Yeah!”
“哦?” 宇强记下了号码,听古风这么一说,兴趣也一下子提了起来,“是什么思路呢?”
古风说:“CreateProcess可以传参数开进程,像刚才的 cmd /k ,那目标机通过网络收到命令后,就以命令为参数开启一个CMD新进程,比如 cmd /c dir ,命令执行完毕后新进程自动消失,结果通过一个匿名管道返回给父进程,父进程由Socket传回给攻击机。”
古风拿出他们画的示意图,如图3-18。
“不错不错!”宇强赞叹道,心里暗想:“我怎么就没有想到呢?”
“那你们的思路呢?”古风说完后问宇强。
宇强正要开口,老师在台上说话了:“大家安静,我们来总结一下。”课堂逐渐安静下来,古风和宇强也停止了说话。
老师说:“刚才我注意了大家的讨论,都很认真,而且也提出了很多不错的思路。同学们大都想出来了,ShellCode的功能分为主进程和子进程,主进程的功能是网络连接——传输命令和结果;子进程的功能是执行cmd.exe命令。”
大家都点点头。
老师继续说:“要把cmd.exe的输入输出和主进程联系起来,有两种思路。第一种方法是只用一个匿名管道,有命令数据来,主进程以数据为参数马上新建一个cmd.exe进程执行,执行的结果由匿名管道返回。”
宇强悄悄对古风说:“是你们的思路也。”古风咧嘴笑了笑。
“另一种方法是用两个匿名管道,只开一个cmd.exe进程。有命令来时,通过一个匿名管道传给cmd.exe,执行结果通过另一个匿名管道返回给主进程。”
“这就是我们的思路!”宇强兴奋的对古风说。
老师在台上继续总结道:“第一种方法的好处是:来一个命令数据就马上开cmd.exe进程执行并退出,所以不会有CMD进程出现,不易被发现;而第二种方法的好处是:只创建了一次cmd.exe的进程。”
小结:
第一种思路:一个管道。有命令来,则以命令为参数开CMD进程,执行结果从管道返回;
第二种思路:两个管道。开创CMD进程,命令数据从一个管道中输入,执行结果从另一个管道中返回。