网络安全实验指导书 - 图文(7)

2019-09-01 15:59

工具就可以使这种攻击自动化。

5.条件响应

注意,有一种SQL注入迫使数据库在一个普通的应用程序屏幕上计算一个逻辑语句的值:

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1 这会导致一个标准的面面,而语句

SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=2在页面易于受到SQL注入式攻击时,它有可能给出一个不同的结果。如此这般的一次注入将会证明盲目的SQL注入是可能的,它会使攻击者根据另外一个表中的某字段内容设计可以评判真伪的语句。

6.条件性差错

如果WHERE语句为真,这种类型的盲目SQL注入会迫使数据库评判一个引起错误的语句,从而导致一个SQL错误。例如:

SELECT 1/0 FROM users WHERE username='Ralph'。显然,如果用户Ralph存在的话,被零除将导致错误。

7.时间延误

时间延误是一种盲目的SQL注入,根据所注入的逻辑,它可以导致SQL引擎执行一个长队列或者是一个时间延误语句。攻击者可以衡量页面加载的时间,从而决定所注入的语句是否为真。

以上仅是对SQL攻击的粗略分类。但从技术上讲,如今的SQL注入攻击者们在如何找出有漏洞的网站方面更加聪明,也更加全面了。出现了一些新型的SQL攻击手段。黑客们可以使用各种工具来加速漏洞的利用过程。我们不妨看看the Asprox Trojan这种木马,它主要通过一个发布邮件的僵尸网络来传播,其整个工作过程可以这样描述:首先,通过受到控制的主机发送的垃圾邮件将此木马安装到电脑上,然后,受到此木马感染的电脑会下载一段二进制代码,在其启动时,它会使用搜索引擎搜索用微软的ASP技术建立表单的、有漏洞的网站。搜索的结果就成为SQL注入攻击的靶子清单。接着,这个木马会向这些站点发动SQL注入式攻击,使有些网站受到控制、破坏。访问这些受到控制和破坏的网站的用户将会受到欺骗,从另外一个站点下载一段恶意的JavaScript代码。最后,这段代码将用户指引到第三个站点,这里有更多的恶意软件,如窃取口令的木马。

以前,我们经常警告或建议Web应用程序的程序员们对其代码进行测试并打补丁,虽然SQL注入漏洞被发现和利用的机率并不太高。但近来攻击者们越来越多地发现并恶意地利用这些漏洞。因此,在部署其软件之前,开发人员应当更加主动地测试其代码,并在新的漏洞出现后立即对代码打补丁。

二、防御和检查SQL注入的手段 1.使用参数化的过滤性语句

要防御SQL注入,用户的输入就绝对不能直接被嵌入到SQL语句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多数情况中,SQL语句就得以修正。然后,用户输入就被限于一个参数。下面是一个使用Java和JDBC API例子:

PreparedStatement prep = conn.prepareStatement(\PASSWORD=?\prep.setString(1, pwd);

总体上讲,有两种方法可以保证应用程序不易受到SQL注入的攻击,一是使用代码复查,二是强迫使用参数化语句的。强迫使用参数化的语句意味着嵌入用户输入的SQL语句

31

在运行时将被拒绝。不过,目前支持这种特性的并不多。如H2 数据库引擎就支持。

2.还要避免使用解释程序,因为这正是黑客们借以执行非法命令的手段。

3.防范SQL注入,还要避免出现一些详细的错误消息,因为黑客们可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。

4.使用专业的漏洞扫描工具。但防御SQL注入攻击也是不够的。攻击者们目前正在自动搜索攻击目标并实施攻击。其技术甚至可以轻易地被应用于其它的Web架构中的漏洞。企业应当投资于一些专业的漏洞扫描工具,如大名鼎鼎的Acunetix的Web漏洞扫描程序等。一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找网站上的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。

5.最后一点,企业要在Web应用程序开发过程的所有阶段实施代码的安全检查。首先,要在部署Web应用之前实施安全测试,这种措施的意义比以前更大、更深远。企业还应当在部署之后用漏洞扫描工具和站点监视工具对网站进行测试。

32

实验五 电子邮件轰炸

电子邮件轰炸的表现形式是在很短时间内收到大量无用的电子邮件。实质是一种针对服务端口的攻击方式,它的原理是连接到邮件服务器有SMTP发送几行信息加上一堆文字,就形成了邮件。 1.telnet收邮件

键入命令:telnet pop.163.com 110 User 用户名

pass 123456(密码) stat

list(列出邮件)可以在list后跟参数

retr 9(9为这条命令的参数即要查看的邮件的编号,这条命令用于查看邮件信息) 2.telnet 发邮件

telnet smtp.126.com 25

Helo 服务器 (localhost) Auth login

用户名 (Base64编码) 密码 (Base64编码)

3. 根据上述原理,利用你所熟悉的计算机语言编写一个收发电子邮件的程序。 附:Base64编码

Option Explicit

Private Const BASE64CHR As String = \rstuvwxyz0123456789+/=\

Private psBase64Chr(0 To 63) As String '从一个经过Base64的字符串中解码到源字符串

Public Function DecodeBase64String(str2Decode As String) As String

DecodeBase64String = StrConv(DecodeBase64Byte(str2Decode), vbUnicode) End Function

'从一个经过Base64的字符串中解码到源字节数组

Public Function DecodeBase64Byte(str2Decode As String) As Byte() Dim lPtr As Long Dim iValue As Integer Dim iLen As Integer Dim iCtr As Integer Dim Bits(1 To 4) As Byte Dim strDecode As String Dim str As String Dim Output() As Byte

Dim iIndex As Long

Dim lFrom As Long

33

Dim lTo As Long InitBase '//除去回车

str = Replace(str2Decode, vbCrLf, \ '//每4个字符一组(4个字符表示3个字) For lPtr = 1 To Len(str) Step 4 iLen = 4 For iCtr = 0 To 3

'//查找字符在BASE64字符串中的位置

iValue = InStr(1, BASE64CHR, Mid$(str, lPtr + iCtr, 1), vbBinaryCompare) Select Case iValue 'A~Za~z0~9+/ Case 1 To 64:

Bits(iCtr + 1) = iValue - 1 Case 65 '= iLen = iCtr Exit For '//没有发现 Case 0: Exit Function End Select Next

'//转换4个6比特数成为3个8比特数

Bits(1) = Bits(1) * &H4 + (Bits(2) And &H30) \\ &H10

Bits(2) = (Bits(2) And &HF) * &H10 + (Bits(3) And &H3C) \\ &H4 Bits(3) = (Bits(3) And &H3) * &H40 + Bits(4) '//计算数组的起始位置 lFrom = lTo

lTo = lTo + (iLen - 1) - 1 '//重新定义输出数组

ReDim Preserve Output(0 To lTo) For iIndex = lFrom To lTo

Output(iIndex) = Bits(iIndex - lFrom + 1) Next

lTo = lTo + 1 Next

DecodeBase64Byte = Output End Function

'将一个Base64字符串解码,并写入二进制文件

Public Sub DecodeBase64StringToFile(strBase64 As String, strFilePath As String) Dim fso As New Scripting.FileSystemObject, _ i As Long

If fso.FileExists(strFilePath) Then fso.DeleteFile strFilePath, True End If i = FreeFile

34

Open strFilePath For Binary Access Write As i Put i, , DecodeBase64Byte(strBase64) Close i

Set fso = Nothing End Sub

'将一个Base64编码文件解码,并写入二进制文件

Public Sub DecodeBase64FileToFile(strBase64FilePath As String, strFilePath As String) Dim fso As New Scripting.FileSystemObject Dim ts As TextStream

If Not fso.FileExists(strBase64FilePath) Then Exit Sub Set ts = fso.OpenTextFile(strBase64FilePath) DecodeBase64StringToFile ts.ReadAll, strFilePath End Sub

'将一个字节数组进行Base64编码,并返回字符串

Public Function EncodeBase64Byte(sValue() As Byte) As String Dim lCtr As Long Dim lPtr As Long Dim lLen As Long Dim sEncoded As String Dim Bits8(1 To 3) As Byte Dim Bits6(1 To 4) As Byte Dim i As Integer InitBase

For lCtr = 1 To UBound(sValue) + 1 Step 3 For i = 1 To 3

If lCtr + i - 2 <= UBound(sValue) Then Bits8(i) = sValue(lCtr + i - 2) lLen = 3 Else Bits8(i) = 0 lLen = lLen - 1 End If Next

'//转换字符串为数组,然后转换为4个6位(0-63) Bits6(1) = (Bits8(1) And &HFC) \\ 4

Bits6(2) = (Bits8(1) And &H3) * &H10 + (Bits8(2) And &HF0) \\ &H10 Bits6(3) = (Bits8(2) And &HF) * 4 + (Bits8(3) And &HC0) \\ &H40 Bits6(4) = Bits8(3) And &H3F '//添加4个新字符 For lPtr = 1 To lLen + 1

sEncoded = sEncoded & psBase64Chr(Bits6(lPtr)) Next Next

35


网络安全实验指导书 - 图文(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:集成电路RC正弦波振荡器

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: