新闻山东 体育 娱乐 女性 财经 幽默 评论 健康 博客 网摘 图片房产 汽车 教育 音乐 商桥 手机报 论坛
游戏 购物 曝光 民声 廉政 读书 书画 美食 机票 能源 搜索 旅游 传媒 动漫 K歌 青未了 权威发布 大众会客厅
首页 业界 通信 互联网 数字家电 服务器 网络设备 网络安全 移动存储 显示器 硬件板卡 产品报价 IT168专区
TG论坛 手机 笔记本 台式机 数码相机 摄像机 复印一体 打印扫描 投影机 MP3/4 GPS导航 驱动下载 软件下载
  页面位置:首页>网络安全
快速搜索
 
[新闻] 简单分析SQL注入中对汉字的猜解
作者:  来源: 安全中国   日期:2008-06-23 

 

   对于经常玩SQL Injection的朋友来说,对于字符的猜解,通常是一件枯燥、乏味、痛苦的事情,特别是中文字符的探测。一遍遍的输入,然后又一次次的被否决。不过,据说这对于耐心的培养是一个非常好的办法。这时,你有没有想过自动注入呢?请看我写的文章SQL Server数据信息自动探测。(做个广告,别扔鸡蛋,不然我今天晚上就不用吃饭了。) 

    SQL Server中的汉字猜解

    在SQL Server中,中文的ASCII为正数,但由于是UNICODE的双位编码,不能用函数ascii()取得ASCII码,必须用函数unicode ()返回unicode值,再用nchar函数取得对应的中文字符。

    在探测出SQL Server中的汉字的Unicode编码后,如何知道相应的汉字呢?用工具,我现在没有找到。经过研究,我找到了3种解决办法。

    1.在注入地址后添加“and nchar(猜解汉字的unicode编码)>0”,例如:http://www.xxx.com/id=1 and nchar(20013),由于nchar()函数返回值类型为nvarchar,拿一个 nvarchar的值跟int的数与0比较,系统会先试图将nvarchar的值转成int型。当然,转换的过程中肯定会出错,SQLServer的出错提示是这样的:

    Microsoft OLE DB Provider for ODBC Drivers 错误 ’80040e07’ 

    [Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 ’中’ 转换为数据类型为 int 的列时发生语法错误。

    2.使用SQL Server。所谓的“解铃还需系铃人”,可能就是这个道理吧。通过SQL Server的查询分析器、或者企业管理器,我们构造查询条件select nchar(20013),执行查询操作,看到查询结果了吗?

    3.使用字符对照表。这是本文的重点,也是SQL Server自动注入中必须解决的一个重要课题。

    我们知道,任意一个汉字的Unicode编码是唯一的,其GB18030码也是唯一的,不然的话同一个编码表示N多汉字,你知道是什么吗?那么同一个汉字的Unicode编码和GB18030码有什么关系呢?相等?那还用这么麻烦吗,直接转化成汉字不就得了。我们暂且不管它们之间有什么关系,也不用知道有什么关系,只要清楚同一个汉字有唯一的Unicode编码,其对应的GB18030码也是唯一的就可以了。也就是说,知道了一个汉字的Unicode编码,可以唯一对应一个GB18030码,通过GB18030码,现在我们就可以查找出原来的汉字了。

    关于Unicode与GB18030对应码表,你可以在http://www.uighurlinux.org/download.htm 下载。这个Unicode与GB18030对应码表是十六进制的,而且也没有相应的中文字符,不过我们能把GB18030转化成为中文字符。

    下面我们的任务就是把这个Unicode与GB18030对应码表为我所用,转换成为Unicode- GB18030-汉字对应表。这儿我要说明一点,对于四位的GB18030码,十六进制的转换成十进制后用chr(数字)可以直接得到相应的中文字符(包括ASCII字符),但对于八位的GB18030码,举个例子如82328D35,我至今不知道是什么东东。还好,它不影响我们对中文字符的猜解,因为四位的十六进制GB18030码已经包含了足够多的汉字,至少到现在为止,我还没有遇到猜不出来的汉字。对于具体的转化过程,不就不在这儿罗嗦了,我把它放在附加文档中了,还包括了我已经转化好的正在使用中的对照表,Access格式的。

    有了 Access格式的Unicode-GB18030-中文字符的对照表,我们现在就可以在自动注入程序中查询汉字Unicode编码所对应的汉字了。方法很简单,下面是我在自动注入的时候查询对照表的程序代码,注意我写注释的那几行。 

Function Get_Field_Name(iUrl,Flen)
dim conn , i,rs,ch,SQL,result,char
result=""
set conn=GetConnection(server.MapPath("UnicodeMap.mdb"),"") ‘打开对照表数据连接
For i= 1 To Flen
ch=GetChar(Replace(iUrl,"[POS]",i),0,65535,0)
SQL="select chr from GB18030 where DU="&ch ‘查询注入时获取的unicode码的中文
set rs=get_rs(conn,SQL,1)
if rs.recordcount=1 then ‘找到对应的中文,包括ASCII
char=rs(0)
else
response.write “没有相应的字符”
resoponse.end
end if
result=result&char 
rs.close
set rs=nothing
Next
conn.close ‘关闭数据连接
set conn=nothing
Get_Field_Name=result
end Function

    补充一点,对于SQL Server中汉字的Unicode编码的获取,在我的SQL Server数据信息自动探测一文中已经介绍得非常清楚了。16次,也只有16次判断,我们就可以确定任何一个汉字的Unicode编码。 

编辑:藕瓜
 
 科技宽频
更多>>
 
大众网版权与免责声明:
1、大众网所有内容的版权均属于作者或页面内声明的版权人。未经大众网的书面许可,任何其他个人或组织均不得以任何形式将大众网的各项资源转载、复制、编辑或发布使用于其他任何场合;不得把其中任何形式的资讯散发给其他方,不可把这些信息在其他的服务器或文档中作镜像复制或保存;不得修改或再使用大众网的任何资源。若有意转载本站信息资料,必需取得大众网书面授权。
2、已经本网授权使用作品的,应在授权范围内使用,并注明“来源:大众网”。违反上述声明者,本网将追究其相关法律责任。
3、凡本网注明“来源:XXX(非大众网)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
4、如因作品内容、版权和其它问题需要同本网联系的,请30日内进行。
(共159181种产品)
 
· 微软黑屏引发威胁百倍于熊猫烧香
· 中国首份TD-SCDMA纯网友试用报告
· 『感悟2008』松下视觉日记网络征集赛
· 国美电器易主山东三联商社,布局改组,...
· 舞动春天 LG显示器W2252TQ有奖试用体验活动
· 三星商用产品及解决方案发布会专题
· 2008首场豪赌:微软宣布466亿美元洽购雅虎
· 08榜样 行动中国 HP“全能运动金刚”评选
 
· 近期科技公司裁员一览
· 刘永好:投资猪肉比黄金可靠
· 百度禁止异性色情 鼓励同性恋?
· 百度排名下降的因素归纳
· 马云,你不道德
· 我在淘宝的遭遇
· 中国电信,这就是你们的竞争?
· 前员工揭真实海尔,竟还不如华为
 
· [故事]照片寄情谊 茶马路更长
· 苏宁独家承销伊莱克斯洗衣机
· [导购]看笔记本消费趋势 苏宁09发力上网本
· [导购]噱头大比拼 最具另类风格个性手机汇总
· [行情] 2GB仅199元!美女演绎台电X11精美图赏
· [故事]今年的节日 用“炫飞”打印
友情链接
ChinaUnix  IT168  PCWORLD  电脑之家  中关村在线  计世网 赛迪网  比特网  泡泡网  天极网  硅谷动力  IT世界  走进中关村  睿商在线  太平洋电脑网
58同城济南  互联网周刊  第三媒体  新浪科技  搜狐IT  腾讯科技  网易科技  IT168山东站  CBI山东站  太平洋山东站  小熊在线山东站  山东IT在线  电脑圈
科技频道联系电话:0531-85193137    QQ:312076059
关于我们 - 报业集团 - 版权声明 - 广告业务 - 业务拓展 - 人才招聘 - 联系方式
Copyright (C) 2001-2007 dzwww.com. All Rights Reserved
大众报业集团主办 Email: webmaster@dzwww.com
繁体版由广州信景技术有限公司提供技术支持
鲁ICP证:000100号 经营许可证:鲁B2-20061030号 新出网证(鲁)字02号