pentesthbox是如此的好用以至于我很久没有打开kali了,但pentestbox的自动补全的缺失真的伤害了我很多(以及我的键盘),令人惊喜的是在偶然看到一篇介绍cmder的强大功能的文章后,我发现cmder是支持自动补全功能的,那么在cmder基础上开发出来的pentestbox没道理不行,所以我开始了我的折腾(不和我一样闲的直接看文末就可以了????)
首先我下了一个cmder,不大,也就60m,但github显然能让人下一天,所以我采用了一点特殊手段(去gitee下,几分钟就下下来了),它确实支持对命令别名的自动补全,通过阅读cmder的介绍,知道了它的自动补全是通过clink软件实现的,而别名(cmd的)是通过doskey命令实现的
查看pentestbox的\config\init.bat(也就是它的初始化脚本),可以看到它也是通过clink和doskey实现的,但它只能补全路径…
首先怀疑是不是pentestbox的别名没有初始化成功(因为pentestbox不能执行aliase命令),但是通过在pentestbox里运行doskey /macros可以看到所有的别名都出来了,并且发现aliase命令是cmder写的一个脚本而pentestbox没有
然后怀疑是不是clink的设置不对,pentestbox的clink设置文件为\config\setting,于是将cmder的setting复制了过去,但还是不行
接着去看了看clink的文档,发现它使用了linux的Readline库实现对一行输入的操作,让人惊喜的是,它支持vi-mode,只需ctrl+alt+j就可以进入,然后就可以按esc进入vi的命令模式了,而平常不按ctrl+alt+j进入vi-mode的话,就是按esc清空一行,当然这是可以在setting里设置的.而clink更多的快捷键要看话可以在终端输入alt+h,当然有些似乎需要在pentestbox设置里调(因为冲突了)
唉,我更爱它了怎么办>﹏<
接着在\base\clink发现了clink.html,这是clink的帮助文件,大概了解了clink的扩展lua脚本要如何写,然后发现pentestbox的init.bat里的clink启动选项--scripts使用的是clink自带的clink.lua(默认的,直接没写),--profile执行的两个文件git.lua和prompt.lua只是为了好看的界面,一个简单的替换,去掉会变成这样
其实看久了就习惯了????,甚至还有那么点酷
而cmder则是明确使用了它的\vendor目录下的一个clink.lua(叫这个名字应该是clink的规定),查看这个文件,发现它执行了clink目录的clink.lua后继续加了一些过滤条件,然后执行clink-completion的和可能存在的用户自定义的lua脚本,然而没有什么发现,甚至将这个脚本复制过去,改了pentestbox的clink的--scripts选项后也没什么改变
本来对clink自带的clink.lua没带什么期望的,但惊喜的发现了一个有趣的地方
可以看出来,clink自带了对命令别名的补全,查看clink.html发现这是一个clink提供的API
查看clink的源码发现一个地方怀疑就是这个API的实现clink_code\clink\lua\src\os_api.cpp
可以看到大概是通过一个GetConsoleAliase()的系统api,这应该是不会出错的
为了进一步分析,在pentestbox的clink.lua加了几行代码用于输出aliases表内变量的值
然后…emmm…pentestbox啥也没有出来,然而在cmder进行同样的改动可以看到,一旦按下tab,就会输出所有的别名
这就太奇怪了,pentestbox的clink看来没有从终端得到别名的值,难道是pentestbox设置了不许读???o( ̄┰ ̄*)ゞ
本来都要放弃了,但看到了以为大佬的博客及知乎,博客好像打不开了,说是可以通过安装clink进行别名的补全,看来并不是无路可走,不过pentestbox本来就安装了clink的,所以应该是设置出了问题
静下心认真分析了pentestbox的启动流程,pentestbox.bat和pentestbox.exe都可以启动终端,估计pentestbox.exe应该是bat转exe转来的,而pentestbox里面主要是启动了\vendor\conemu-maximus5\ConEmu.exe,启动选项设置了图标,标题和加载了一个%pentestbox_ROOT%\config\ConEmu.xml,然后这个ConEmu.xml有一个初始任务,就会去执行之前提到的init.bat
这里有个奇怪的问题,\base目录也有个conemu-maximus5里面有终端模拟器和\vendor一样的,估计是作者对cmder改动的时候,将\vendor里的conemu-maximus5移到\base后忘了改了(因为cmder确实是将这个程序放在了\vendor目录下,以及很多的配置的文件,而配置文件被移动了,\vendor里只剩一个conemu-maxmus5了就显得很奇怪了),因此,可以在pentestbox.bat里将vendor该为base,可以看到正常运行,然后你甚至可以删掉\vendor文件夹,而从这个新的pentestbox.bat转来的pentestbox.exe我放在了文末的滑稽图片中,可以使用binwalk或是foremost提取
然后在一次偶然的尝试中修改了clink的设置竟然就成功了,通过将exec_match_style,默认是-1,改为非负数后就可以匹配了
之前使用移动过来的cmder的setting文件仍然不行大概是我之前修改了init.bat出现的问题吧…心累
etting`文件仍然不行大概是我之前修改了init.bat出现的问题吧…心累