第一百二十五章 隐码入侵与编码保护
回到家后,天玄既兴奋又期待的说:「来吧!来吧!」
宇成说:「先不要急,云飞,过来帮忙吧!」
云飞走过来问:「你想要学些什么?」
天玄说:「其实,小红很崇拜计算机强的人,所以我想要窃取她的数据来证明。另外,她还问我什么叫作加密编码,如果我答不出来我就太逊了!」
云飞说:「这些都可以教你!那,你想要从那里取得她的数据?」
天玄打开一个网站说:「就是这个游戏网站,我们就是在这认识的,她叫iccred。」
云飞看了看说:「这看起来满像轰炸超人的...你很强吗?」
天玄拍胸脯保证:「当然强罗!每次本天玄大爷出马,一堆人就过来围观呢!」
云飞一边试著输入 SQL 隐码一边说:「哼,他们是来看你怎么输的吧!」
天玄怒道:「喂,你这什么意思?你看,我一上线就一堆人抢著要跟我联机。」
云飞进入数据库画面并回道:「是因为找你洗胜率很方便吧。」
天玄愤怒的说:「喂,你这小子,不要太过份了!」
此时云飞已经抓好数据了,指著屏幕,让天玄只得『气得向他道谢』。
宇成看著屏幕问:「云飞,这就是所谓的 SQL 隐码攻击?」
云飞点头说:「是的,没有错!所谓的 SQL 隐码便是利用程式写作和语法上的漏洞造成的意外结果。通常利用这种办法,可以创造出意想不到的效果!我以前和你说过,利用网页的参数传入非预期的值不算什么,而再上去,则是要懂得将对方主机的数据给取出来。」
宇成点头说:「嗯、嗯、我记得!前者的手法就像天玄一样,而后者的手法则和明昂一样厉害!」
天玄听了气得问:「喂!这是什么意思?为什么要把我和那混蛋扯在一起?」
云飞不理会天玄的愤怒继续说:「而 SQL 隐码则是利用前者达到后者的技术!」
宇成听了问:「这又是非正规技术吗?」
云飞点头说:「没有错!因为是在正常手法之外的方式,所以是非正规技术!」
天玄大喊一声:「啊!!!!!」
宇成吓了一跳捂住耳朵骂道:「天玄,你没事喊那么大声做什么?」
天玄生气的说:「你们在那里讲些什么啦!我完全不懂啊!」
云飞用轻蔑的语气说:「小子,你不是想要学习技术吗?那就给我仔细的听啊!」
天玄暂时平息怒气道:「好吧!那你说,什么利用前者达到后者的是啥意思。」
云飞指著屏幕说:「你们看,我在用户名密码的框框里输入的不是正确的数据吧!」
宇成和天玄转头看著屏幕说:「嗯,这看起来很像是逻辑判断式嘛!」
云飞又打开一个网页说:「再看这个!这是一个网页利用表单元件将输入的数据传送到后端主机处理的范例,他会收集这两个 input type 为 text 的输入项,然后透过 form action 指定的路径传递参数。」
宇成点头表示明白这些,但天玄却仍不是很懂,这对他而言还是有点困难的。
云飞切换页面,换到传递参数到该路径的处理页面检视原始码说:「你们看,在这里有一些 if 判断式,它会判断这个用户名与密码是否符合管理者要素!其中一个变量 rootid[result1] 是利用回圈从数据库中读取每一笔用户名数据出来判断,当判断通过后再进入第二个判断式回圈读取数据库中的密码判断是否正确。」
天玄举手说:「等一等!如果是这样的话,输入那些逻辑判断怎么会通过?」
云飞问:「你看看 or 1 = 1 的结果应该是 true 或 false?」
天玄说:「喂,太瞧不起我了吧?谁都知道 1 = 1 啊!这结果当然是 true!」
云飞点头说:「看来你还有点救!接下来,在判断式中假设用户名为 paul 而密码为 qq 则判断式的成立应该是当 if用户名 == ‘paul‘ 以及 if 密码 == ‘qq‘ 对吧?因为在 SQL 语法中单引号内括字元字串。」
天玄开始了解而说:「这样讲我当然明白!可是和 or 1=1 又有何关联?」
云飞便说:「你看!假如我们输入 if 用户名 == ‘paul‘ 这里改成 if 用户名 == ‘xxx‘ 本来应该是错误的,因为没有 xxx 这个用户名在!可是若输入 ‘ or 1=1‘ 变成if 用户名 == ‘xxx‘ or 1 = 1‘‘时,因为有一个『或』运算 or 在,就算没有用户名,但判断到『或1=1』时却会通过!我们知道 AND 要两者都成立,而 or 只要其中一个成立,所以在某些情况下会通过检查。而若反过来输入数据被放在 == 之前则可以输入 1=1 or来变成 if 1=1 or ‘xxx‘ == ‘paul‘,同样判断到1=1就会通过了。」
天玄拍手恍然大悟道:「天呀!真是高招!我终于开窍了!」
宇成也了解道:「原来如此,这就是所谓的 SQL 隐码啊!果然很危险!」
云飞却摇摇头说:「不然,这并非是绝对的好方法!这次之所以能成功,是因为写这个网页的人疏忽漏掉很多东西,比如过滤掉单引号!如果对方的程式写了过滤单引号的程式加以检查,这方法就不会成功了。而且,刚刚所讲的只是基本的理论,实际使用上要视不同网页程式写法,尝试各种 SQL 语法。」
天玄拼命点头说:「是!是!好,这样我就知道要怎么跟小红说了!」
云飞转头看著宇成说:「怎么样?你还是对这些东西很有兴趣,对吧?」
宇成不愿正面回答,便说:「我只是想到『信息安全』的重要性罢了!毕竟,如果这么简单就可以攻击的话,那我们的数据存在网路上一点也不安全!」
天玄被激励而说:「宇成,你在胡说什么啊?网路本来就是一个公开的地方,既然有心要把数据放在上面,当然就没有绝对的安全啊!所以被入侵,是自己的防护不够周全的关系。你想想,不锁好门而被偷东西,该怪谁?」
宇成心中突然又闪过一道光,心想:「是这样子吗?没有锁好门的人也有错吗?」
云飞喝了口水说:「那么,接下来是编码的问题吧?」
天玄又拼命点头的说:「对,拜托你了,云飞大大,不,超级大大大!」
云飞说:「你听好了,所谓的编码就是将数据编辑成一连串的二进位码,而加密则是不以直接的方式解码,必需要用特殊的规则或演算法去解出来。」
天玄点点头说:「喔~是这样子啊?不过我还是不懂,可以说得更俱体一点吗?」
云飞便在屏幕上打了几个字:B746、A741、A6D1、A5C0。
天玄疑惑的问:「这个...这个是什么意思啊?」
云飞邪笑著说:「你用『内码输入法』在姓名栏输入那四组字码就知道了,哼!」
天玄好奇的打上去,却发现是一句不勘入目的话,甚是生气的说:「太过份啦!」
宇成捧腹大笑道:「哈哈哈!天玄..噗..被摆了一道喔!」
云飞转身打字说:「好了,没时间让你当小丑了,得快点让你明白才可以。」
天玄气愤的骂道:「喂!这到底是谁造成的啊?」
云飞说:「你看,以B746这个字码为例,解析成二进位后会变什么?」
天玄拿出笔算后说:「是 1011 0111 0100 0110 啊!」
云飞便说:「假如我们把它的编码往左移两位,就成了 1101 1101 0001 1010 对吧?最左边的两位 10 因为左移所以会跑到最右边去。此时再组合回十六进位就会变成 DD1A 这个码,和原先的 B746 不同了对吧?但只要右移又恢复了!」
天玄点头说:「我懂了,我懂了!只要事先制定一套规则演算法,就可以让字码在网路上传递时属于被修改过的方式,保护数据传递中的安全性。而收到的人如果不懂得演算规则,他就没有办法还原回原来的数据了!」
云飞又说:「但是只有简单的位移,还是容易被看出来。所以,演算的方式往往要依赖一些公式去计算!B746二进位码中有1的位元是15,13,12,10,9,8,6,2,1。」(二进位码的位元位置编号为15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
云飞换个画面接著说:「假如不在乎文件大小,可以编码成9FDCA98621,其中前面的9代表读取下面几组位元,而FDCA98621代表第几个位元为1。因为是9,所以会读取九组二进码,从F一直读到1为止,在1的后面一个码则是代表下一个字由几组码构成。当然,因为开头的9可以知道后面九个码都代表同一个字码的第几个位元为1,所以就算不按顺序,乱数排成9C89A6DF12也无所谓,还原计算回来后都一样代表15,13,12,10,9,8,6,2,1位元为1,更能保障安全。」
云飞又说:「利用演算的方式,也可以抽出 BIG-5 码的四个十六进位数字单独做加减,比如 B746 用 B+1、7-1、4+2、6-2的方式编码成C664,等到要解码时再重新加减回去变C-1、6+1、6-2、4+2还原回B746。」
天玄又问:「如果这样做的话,那恰好被猜出几个字来,不就可以全部解出来了?」
云飞冷笑道:「你以为编码的人会这么笨吗?多重编码方式,每个字可以用不同的编码规则,然后以文件档头的隐藏位元做运算式。配合不同的排列规则,往往直接解是解不出什么东西来的。不过这些还算是下乘的东西,真正上乘的....」
此时,云飞的计算机上闪起新邮件讯息,云飞便先打开看。附加档是一个加密演算过后的文字档,是明昂传给他的私密讯息,便邪笑道:「编码的活教材进来了!」
不知道这封讯息里面是什么?...待续