这款工具是我很久之前写的,到现在有很久的一段时间没有去看过,最近正巧想做个网站,买了台服务器,但是域名迟迟不给我备案通过,最后说我信息有点问题,怕麻烦的我也就没去再次备案了,闲着服务器也没事,我就想到要不更新一下之前写的工具,正好有服务器可以做一些检测更新的一些效果,我就选中了这个工具。
这款工具的初衷是为了给我自己方便做一些脚本的,后来做时间长了一点就把他做的正规了一些,截止到2019.10.07,我已经做到1.7版本了,接下来通过最新的这个PHPstudy的后门漏洞,我简单的介绍一些这个工具。
文件的安装其实是比较简单的一个方面,和常见的程序安装的过程是一样的,直接点击下一步下一步就可以安装完成,给几个截图就好。
首先我们来看一下目录的结构。
-
dos:是用来存储WFC执行dos命令时候的一些垃圾文件,这里面的文件WFC是支持自动删除的,所以正常情况下是不会有文件在这个文件夹中的。
-
ico:这个只是在文件关联时候,使得脚本文件的图标变成里面的文件的一个ico文件,只有一个ico.ico文件。
-
jb:这个是用来存储我们写好的脚本的,里面是一些文件夹
这里的文件夹是和WFC
用来保存文件脚本类型的。每个分支的文件件,是用来添加脚本在里面的,当然你也可以自己来添加一些文件夹。
-
txt:这个的话呢,我们在利用某些函数的时候会读取外部的一些txt文件,就会将txt文件放在这个文件夹中。
-
小图标:只是用来存储一些程序在使用的时候用到的一些图标。
-
configure.ini/pd.ini:用来存储一些配置文件的,当然程序是可以进行配置的。
-
variable.txt:这个是用来存储全局变量的,我们在讲解编写脚本的过程中会讲解到相关的知识。
-
user.ini:存储登录的用户信息的(记得注意文件的安全性)
-
程序的登录
程序,为了长期的运行,所以我增加了一些登录的效果,但是:程序使用是免费的,那为什么要进行程序的登录呢?是为了我在下一个版本也就是1.8版本推出脚本商城时可以用到的一个效果,并且可以保持我对程序的一个动态使用情况的一个查看。
我们可以免费的注册,直接登录就好了,但是切记,在点击保存密码后,会生成的user.ini文件中会存储登录的账号和密码,大家记得保证对user.ini文件的安全性。
- 程序的简单使用
如果出现类似的提示框,就点击确认,说明之前你已经关联过了,这个时候强制改变成当前的WFC的文件关联。当然需要给予WFC管理员权限的启动(win10,win8)。
-
脚本的编写
-
设置文件的关联
-
全局变量的设置
-
程序的配置
-
网站一些cookie的设置
-
内置浏览器
这里我就不进行讲解了,只是内置浏览器大家可以充分的利用好,还是有一些强大的,抓包,网页分析,cookie查看设置之类的。
这里我们可以看到我们jb文件夹中配置的一些脚本,界面我做的并不是很美观,但是可以用我觉得就好,哈哈,最后一个字段(输入):就是用来告诉我们这个脚本需不需要外部输入的。
我们来执行一个脚本试一下(拿最近的phpstudy后门漏洞来测试一下):
我们点击脚本前面的钩子,然后点击执行。
然后因为需要输入我们输入我们需要的一些参数:
双击和右键添加是一样的,然后我们点击确定,就会看到程序返回给我们的消息。
我们执行漏洞成功。
我们来简单的介绍一下WFC的函数:
如果(变量,变量)
真()
假()
如果结束()
计次循环(变量【循环次数】)
计次循环结束()
变量=变量+-*/变量【整数型】
变量==“内容”【文本型】
跳出循环()
到循环尾()
数组加值(数组名,内容)
取数组成员数(承接变量,数组名)
get(网址,接受返回内容的变量,接收http返回的变量)
get_w(网址,提交的header,提交的cookie,接受返回内容的变量)
GET_对象(链接,超时,接受文本,接受的http状态码)
post(网址,POST内容,接受返回内容的变量,接收http返回的变量)
post_w(网址,POST内容,提交的header,提交的cookie,接受返回内容的变量)
POST_对象(链接,POST数据,超时,接受文本,接受的http状态码)
dos(命令,接受的变量)
文本取中间(原文本,前文本,后文本,用来接收返回内容的变量)
文本取中间2(原文本,前文本,后文本,用来接收返回内容的变量)
文本批量取中间(原文本,前文本,后文本,用来接收返回内容的数组)
文本取右边(原文本,寻找的文本,接受的变量)
文本取左边(原文本,寻找的文本,接受的变量)
取文本右边(原文本,长度,接受的变量)
取文本左边(原文本,长度,接受的变量)
取文本长度(原文本,接受变量)
寻找文本(原文本,寻找的文本,接受位置的文本)
分割文本(原文本,分隔符,接受的数组)
文本替换(原文本,待替换文本,替换的文本,接受的文本)
正则(检查的文本,正则命令,接受的数组)
编码(编码的变量,编码类型,是否编码数字,接受变量)
解码(解码的变量,解码类型,接受变量)
base64编码(待编码的文本,接受的变量)
base64解码(待解码的文本,接受的变量)
清空数组(待清空数组)
提示(提示信息)
延时(延时时间)
读取外部(文件名,接受的变量)
md5加密(需要加密的内容,接受的变量)
sql连接(sql地址,sql账号,sql密码,sql数据库,接受返回值的变量)
ftp连接(ftp地址,ftp账号,ftp密码,接收返回值的变量)
端口检测(IP地址,端口号,接收返回值的变量)
取进程ID(进程名称,接受PID的变量)
读内存整数型(进程PID,内存地址,接受变量)
读内存小数型(进程PID,内存地址,接受变量)
写内存整数型(进程PID,内存地址,写入的值)
写内存小数型(进程PID,内存地址,写入的值)
十六到十(要转换的值,接受的变量)
十到十六(要转换的值,接受的变量)
取ip(起始IP,结束IP,结果数组)
取页面链接(链接,链接接受数组,友联接受数组)
(参数名,接受变量【变量】)
——————————————
这里简单强调一下,在条件控制语句和循环语句,在内部执行的命令前面是要加一个空格的。
输出和print类似,但不支持直接输出数组,但可以输出数组的元素。
我们简单便写一点代码,这样大家就会简单的理解如何编写了。
我们点击上面的绿色三角符号,来运行一下。输出了一个yes。
记得,我这里的字符赋值,是两个等于号,加减乘除是一个等号,而且加减乘除不支持多个运算。
上面的用户输入是代表是否我们需要用户输入我们的参数的,我简单的演示一下大家就明白了。
(参数名,接受变量【变量】)
当我们给test写入123,我们就会出现yes。
我来介绍一下自定义函数,这里我也就给大家演示一下,也是很简单的。
通过——————————————这个进行定义,下面的第一行是函数名称,记得不要加括号。
这样就是可以的,简单的定义一个自己的函数。
好了,我们简单了解过之后我们可以通过查看函数定义来编写。
第一个是打开脚本,第二个是保存脚本,第三个是另存为脚本,第四个是查看函数,第五个运行自己定义的脚本,第六个是强制结束脚本。
我们通过PHPstudy爆出的后门漏洞来编写一个实例。
首先我们要获取用户的输入,这个时候我们可以做成批量,但是我这里留给大家自己写,通过全局变量这个变量,获取用户设置的一些内容,这里就不带大家看了,很简单变量名就是:全局变量,这个是不需要声明的。
首先,我们设置获用户输入的网址,然后通过base64加密获得echo "wfcwfc";的编码结果,存储在poc这个变量里面,然后将attack这个常量替换一下文本,将我们的poc替换掉Accept-Charset字段。
将结果还是放在poc这个变量中,然后通过get_w这个函数将我们的网站和http协议头提交上去,cookie我们我就不设置了,将返回的结果放在result变量中。然后我们寻找一下”wfcwfc”这个文本,如果在返回的内容中有这个字符串,说明存在php代码执行。也就是寻找文本返回的位置不是-1的话我们就认为他是存在漏洞的。将为之存放在add这个变量中,然后通过简单的条件语句将其输出。
程序我是会录一些专门的课程脚本的编写的,大家也可以看看我之前写的脚本,大约我给大家带了五六十个脚本,大家可以自己尝试着看一下,我自带了一个IDE,可以查错,和高亮。
程序我自己一个人写的,部分代码我看了网上的一些资料,所以程序有漏洞的话呢可以和我汇报一下,下一个版本我也会写一个脚本商城,供大家下载脚本。
WFC V1.7.1_Setup.zip (3.4 MB)