Perl数据类型安全研究
0x00 背景http://www.ahlinux.com/uploadfile/2015/0107/20150107023311382.jpg
前几天有个人在某大会上讲了一个在perl中存在了20年的问题。作为一个只会perl不会python的人,真的很心痛。看完视频后感觉被黑的吃不下东西。
这俨然就是一场对perl的吐槽批斗大会,整个演讲充满了sucks、fuck等和谐词汇,也能看出演讲者是多么的义愤填膺,场下一次次的鼓掌和附,嗯,让我想起了郭德纲。
0x01 问题
http://www.ahlinux.com/uploadfile/2015/0107/20150107023311243.jpg
言归正传,这个在perl中存在了20年的问题到底是啥呢?抛去perl的语法的槽点,真正的问题在data types上,对的,就是数据类型。
Perl对数据类型的处理真是有点匪夷所思了。
我们先了解一下perl中的变量有哪几种。
perl中的变量
perl的数据类型分为三类:标量$,数组@,哈希%。
具体定义在这里不多说,我们来看几个例子:
http://www.ahlinux.com/uploadfile/2015/0107/20150107023311193.jpg
不管是标量、数组还是哈希(字典),定义跟其他语言没什么区别。
http://www.ahlinux.com/uploadfile/2015/0107/20150107023311992.png
我们来看看几个特殊的情况,下面每个预期值为正常人类理解应该得到的结果。
@array =(1, 2, 'a', 'b', 'c');
print $array;
预期值 1
http://www.ahlinux.com/uploadfile/2015/0107/20150107023312136.png
实际值 1
$scalar = (1, 2, 'a', 'b', 'c');
print $scalar;
预期值 1
http://www.ahlinux.com/uploadfile/2015/0107/20150107023312362.png
实际值 c 我擦泪,为毛会是c!太不科学了,继续往下看。
@list = (1, 2, 'a', 'b', 'c');
print scalar @list;
预期值 1
http://www.ahlinux.com/uploadfile/2015/0107/20150107023312883.png
实际值 5 呵呵,他把数组的长度输出了。
再看看这个哈希的例子
%hash = (1, 2, 'a', 'b', 'c');
print $hash{'a'};
预期值 木有
http://www.ahlinux.com/uploadfile/2015/0107/20150107023312690.png
实际值 b 为毛把b给输出了,谁能告诉我这头草泥马是怎么处理的。
0x02 漏洞
这些问题会产生什么漏洞呢?
一起看看在web中php跟perl处理的对比。
http://www.ahlinux.com/uploadfile/2015/0107/20150107023312539.png
http://www.ahlinux.com/uploadfile/2015/0107/20150107023313710.png
这么看来是木有任何问题的,那么使用复参的时候呢?
http://www.ahlinux.com/uploadfile/2015/0107/20150107023313290.png
php很好的处理了传入的数据,而perl的做法就是草泥马在奔腾%>_ 'b', 'c' => 'd',
'e' => @list};print $hash;
预期值
{'a' => 'b',
'c' => 'd',
'e' => ['f','lol','wat']
}
http://www.ahlinux.com/uploadfile/2015/0107/20150107023313948.png
神马情况,数组中的“,”变成了“=>”又给赋值了?e=>f、lol=>wat,what the f*cuk!
http://www.ahlinux.com/uploadfile/2015/0107/20150107023314515.jpg
这是多大的一个坑啊!看Bugzilla是怎么掉进去的。
http://zone.wooyun.org/content/15628
关于数据类型的这些问题我不想再说了,有些恶心。
0x03 GPC的问题
http://www.ahlinux.com/uploadfile/2015/0107/20150107023314209.png
http://www.ahlinux.com/uploadfile/2015/0107/20150107023314977.png
屌屌的棒棒的,对吧,可是……
http://www.ahlinux.com/uploadfile/2015/0107/20150107023314779.png
我了个*,一个都不给转义了,就这么罢工了,可以顺顺畅畅的注入了好么。
http://www.ahlinux.com/uploadfile/2015/0107/20150107023314145.jpg
我想静静。
0x04 来源
Pdf:
http://events.ccc.de/congress/2014/Fahrplan/system/attachments/2542/original/the-perl-jam-netanel-rubin-31c3.pdf
视频地址:
http://media.ccc.de/browse/congress/2014/31c3_- 6243 - en - saal_1 - 201412292200 -the_perl_jam_exploiting_a_20_year-old_vulnerability -_netanel_rubin.html#video
[*] 本文来自:Linux教程网
页:
[1]