前语
PHP是一种通用的开源脚本言语,它的语法混合了C,Java,以及Perl等优异言语的语法。除此之外,它还供给了许多的函数库可供开发人员运用。可是,假如运用不当,PHP也会给应用程序带来十分大的安全危险。
在这篇文章中,咱们将会对PHP应用程序中经常会呈现的一些问题进行深化地剖析,尤其是当咱们运用“==”(比较运算符)来进行字符串比较时,或许会呈现的一些安全问题。尽管近期有许多文章都围绕着这一论题进行过一些讨论,但我决议从“黑盒测验”的视点动身,讨论一下怎么运用这个问题来对方针进行浸透和进犯。首要,我会对引起这个问题的根本原因进行剖析,以便咱们能够愈加深化地了解其作业机制,这样才能够保证咱们能够尽或许地防止这种安全问题的发作。
问题的描述
在2011年,PHP官方缝隙追寻体系发现,当字符串与数字在进行比较的时分,程序会呈现某些十分古怪的现象。从安全的视点动身,这个问题实践上并不能算是一个安全问题。比如说,你能够看到下面这段代码:
实践上,当运用相似“==”这样的比较运算符进行操作时,就会呈现这样的状况。上面这个比如中呈现的问题不能算是一个缝隙,由于它是PHP所供给的一种名为“类型转化”的功用。从实质上来剖析,当咱们运用特定的比较运算符(例如== , !=, )来进行操作时,PHP首要会测验去确认参加比较的数据类型。可是这样的一种类型转化机制将有或许导致计算成果与咱们预期的成果有较大收支,并且也会带来十分严峻的安全问题。安全研讨专家在该问题的完好发表陈述中写到:这种类型转化机制将有或许导致权限提高,乃至还会使程序的暗码验证进程变得不安全。
Gynvael写过一篇关于这一论题的经典文章,PHP等号运算符“==”所包括的数据类型十分广泛,咱们给咱们供给了一个较为完好的比较参阅列表,并给出了一些示例,详细内容如下所示:
正如你所看到的,当咱们运用“==”来比较这些数字字符串时,参加比较的便是字符串中数字的实践巨细,从安全的视点动身,这便是一个十分风趣的问题了。在这种状况下,你能够运用科学计数法来表明一个数字,并将其放在一个字符串中,PHP将会主动把它作为一个数字类型来处理。咱们之所以会得到这样的输出类型,是由于PHP运用了一种哈希算法(一般运用十六进制数值表明)来进行处理。比如说,假如一个数字为0,那么在进行松懈比较的进程中,PHP会主动对其类型进行转化,但其值永远为0。关于一个给定的散列算法而言,暗码就有或许会变成能够被替换的了。比如说,当暗码的哈希值被转化成运用科学计数法来表明的数字时,将有或许正好与其他的暗码哈希相匹配。这样一来,即使是一个彻底不同的暗码,也有或许能够经过体系的验证。但风趣的是,当某些选用科学计数法表明的数字在进行比较的时分,成果或许会让你意想不到:
从“黑盒测验”的视点动身来考虑这个问题
从静态剖析的视点来看,这些安全问题就显得有些一般了。但假如咱们从黑盒的视点来看待这些问题,咱们能够得到什么样的启示呢?关于应用程序中的任何用户账号而言,假如应用程序运用了当时最为盛行的哈希散列算法(例如SHA1和MD5)来对暗码进行处理,而你在对暗码哈希进行验证的时分运用了PHP的松懈比较,那么此刻就有或许呈现安全问题。咱们现在能够考虑进行一次典型的浸透测验,你能够创立一个一般的账号,将暗码设置成哈希值相似的其间一个暗码,然后运用其他的暗码进行登录操作。很明显,体系的安全性彻底取决于你所运用的散列算法。所以,咱们假定你没有在散列算法中运用“Salt”值,那么你至少得运用两种不同的散列算法来对暗码进行处理。
现在,在咱们去对这些暗码组合进行研讨之前,咱们还应该考虑到一点——即暗码的要求。由于咱们在对这些暗码和散列算法进行剖析之前,首要得保证咱们所设置的初始暗码复合了暗码复杂度的要求,不然咱们的剖析和研讨将会没有任何的含义。因而,咱们得保证咱们的暗码长度至少为八个字符,暗码中包括有巨细写字母,数字,以及至少一个特别字符:详细如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
import random
import hashlib
import re
import string
import sys
prof = re.compile("^0+ed*$") # you can also consider: re.compile("^d*e0+$")
prefix = string.lower(sys.argv[1])+'!'+string.upper(sys.argv[1])+"%s"
num=0
while True:
num+=1
b = hashlib.sha256(prefix % num).hexdigest()
if (b[0]=='0' and prof.match(b)):
print(prefix+str(num),b)
为此,我专门编写了一个Python脚本,尽管我没有尽心竭力去优化这个脚本的功能,可是在PyPy编译器的协助下,这个精心编写的脚本能够在我的AMD FX8350一切可用的CPU核心中安稳运转。除此之外,我还运用到了hashlib库中的散列函数,并且为了防止遇到Python GIL的进程同步问题,我还生成了独立的进程来对暗码数据进行处理。不仅如此,我还运用了十分复杂的技能来为每一个暗码生成不同的前缀,正如上面这段代码所示。
[1] [2] 黑客接单网
Cisco Adaptive Security Appliance (ASA) Software在Clientless SSL VPN进口自定义结构在完成上存在安全缝隙,未经身份验证的长途进犯者可使用...
ubuntuRestart=on-abortServer built: 2018-03-02T02:19:31我的世界黑客寻找是什么歌, 漏洞分析该token字段包含不可见的某些位对齐子字段,最低的8...
$html.=''; 移动广告渠道对推广的运用审阅不严,助涨了歹意软件传达,成为了其爪牙,终究形成用户经济丢失、隐私走漏。 途径:C:Tools注入东西Domain3.6Domain3.6.exeSt...
「女鬼病毒_如何找黑客黑了对方-上暗网找黑客学习资料」跟着信息化的不断发展,信息体系所承载的不仅仅是新闻发布、内容展现等传统功用,一起还承当了信息查询、订单处理、事务管理等事务,其间往往触及一些需求保...
5、资质证书岂能如此挂靠· 日本最大的加密钱银买卖所Coincheck被黑,导致约580亿日元(约合5.33亿美元)的虚拟钱银新经币(NEM)忽然消失。 25、qwerty123 (新呈现)Power...
0x02 抽丝剥茧:精灵系列遥控原理全解析 $1$X8cVMw5v$AH0aUHVNix7Tx6wmHAXsf1 后续就又是提权的进程,具体操作可参阅之前的博文$db = new...