动手编写自己的专属蜜罐(.NET序列之VB.NET)

2013-11-26 14:00:35 9 5648
大家都知道,蜜罐的主要作用是用来迷惑或者诱捕攻击者的攻击行为。通过蜜罐,我们可以清楚的知道攻击者是如何对我们实施攻击的。 一个好的蜜罐应该具备高度的交互性和真实性,要不然会比较容易被攻击者发现他们在做一些没有意义的事情!下面,我们通过例子来讲解一个最简单的蜜罐是如何编写出来的(主要是模拟HTTP服务)

代码主要实现:建立一个SOCKET套接字,用于侦听指定端口的数据,然后按着HTTP协议的规范发送报文和实体内容即可!

下面是一个简单的蜜罐编写例子,采用VB.NET语言编写

Button1_Click  按钮事件:创建一个新的线程来启动蜜罐的HTTP服务
StartHttpservice  蜜罐的主要工作过程代码,循环侦听以模拟响应HTTP服务
GetBytes  把字符串转换成二进制数组,在套接字当中所有的数据传输都是以二进制进行的
Imports System.Net
Imports System.Net.Sockets

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim g As New Threading.Thread(AddressOf StartHttpservice)
        g.IsBackground = True
        g.Start()
    End Sub

    Private Sub StartHttpservice()
        Dim buffer(4095) As Byte
        Dim length As Integer
        Do
            Dim socket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            socket.Bind(New IPEndPoint(IPAddress.Loopback, 8080))
            socket.Listen(100)
            While True
                '为当前连接创建一个新的客户端
                Dim client As Socket = socket.Accept
                '取得客户端请求数据长度
                length = client.Receive(buffer, buffer.Length, SocketFlags.None)
                '打印出客户端的请求HTTP头内容
                Debug.Print(System.Text.Encoding.Default.GetString(buffer, 0, length))
                '定义回复HTML实体内容,可以根据自己的情况做一些自定义的事情
                Dim responsebody As String = "<html><head><title>form socket server</title></head><body><h1>hello,world<br>System Time:" & DateString & " " & TimeString & "</h1></body></html>"
                '定义HTTP响应头报文内容
                Dim SendHeads As New System.Text.StringBuilder
                SendHeads.AppendLine("HTTP/1.1 200 OK")
                SendHeads.AppendLine("Content-Type:text/html;charset=UTF-8")
                SendHeads.AppendLine("Host:localhost")
                SendHeads.AppendLine("Content-Length:" & responsebody.Length)
                SendHeads.AppendLine("")
                '向客户端发送HTTP头状态信息
                client.Send(GetBytes(SendHeads.ToString))
                '向客户端发送内容部分
                client.Send(GetBytes(responsebody))
                '断开当前的客户连接
                client.Close()
                Exit While
            End While
            socket.Close()
        Loop
    End Sub

    Private Function GetBytes(text As String) As Byte()
        Return System.Text.Encoding.Default.GetBytes(text)
    End Function
End Class
下面是我在浏览器输入蜜罐的地址的测试结果






这样,我们就实现了一个最简单的蜜罐,这个蜜罐可以记录下攻击者发送的请求。

如果我们扩散一下自己的思维,我们可以在本地放一些静态页面,从蜜罐接收的请求当中把路径分离出来用于本地文件的请求,就可以实现一个基本的交互

如果需要高度的交互,又不想自己写太多的代码,则可以在本地建立一个真实的WEB环境,然后在蜜罐中分离出攻击者的请求URL用于本地的请求获取结果后,返回给攻击者,就可以实现一个真实的WEB动态交互。

由于我不太擅长文字表达太多东西,蜜罐的编写就简单描述到这里!!!

关于作者

遇见孤独51篇文章301篇回复

愿御剑之人,从此不再孤独!

评论9次

要评论?请先  登录  或  注册