pentesthbox是如此的好用以至于我很久没有打开kali了,但pentestbox的自动补全的缺失真的伤害了我很多(以及我的键盘),令人惊喜的是在偶然看到一篇介绍cmder的强大功能的文章后,我发现cmder是支持自动补全功能的,那么在cmder基础上开发出来的pentestbox没道理不行,所以我开始了我的折腾(以下都是我的脑抽折腾行为,不和我一样闲的直接看文末的结论就可以了🙃)
首先我下了一个cmder
,不大,也就60m,但github
显然能让人下一天,所以我采用了一点特殊手段(去gitee下,几分钟就下下来了),它确实支持对命令别名的自动补全,通过阅读cmder
的介绍,知道了它的自动补全是通过clink软件实现的,而别名(cmd的)是通过doskey命令实现的
查看pentestbox
的\config\init.bat
(也就是它的初始化脚本),可以看到它也是通过clink
和doskey
实现的,但它只能补全路径…
首先怀疑是不是pentestbox
的别名没有初始化成功(因为pentestbox
不能执行alias
命令),但是通过在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的,只是通过注入的),看来并不是无路可走,所以猜测应该是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(或是dd手动)提取)
然后在一次偶然的尝试中修改了clink的设置(%pentestbox_ROOT%\config\setting
)竟然就成功了,通过将exec_match_style
(默认是-1)改为非负数后就可以匹配了
之前使用移动过来的cmder的setting
文件仍然不行大概是我之前修改了init.bat出现的问题吧…心累
不过还是明白了很多东西吧/_
上面说的稽密图片: