ewebeditor,的入侵最简单的方法有几种?
个人观点,ASP很脆弱,如同现在的TCP/IP协议,简单MD5加密的,有心的话大点的彩虹表容易跑出来的~
若果我想要攻击你网站的话。
1.先判断有注入没,有防注入的,看下防cookies注入没,能否构造。数据提交除了POST,GET,电脑还会接受COOKIES数据。
2.你的网站程序。DOWN下源码。看对一些目录限制了没,比如数据库路劲,后台,上传的地方。是不是有弱口令~万能口令,是不是这中种网站程序有已知的ODAY。如果没有,自己研究下源码,看下有突破的地方没。
3.比如你的那个EWB,,用的人多了,研究的人也多了,漏洞也就多了。比如Ewebeditor2.8有删除任意文件漏洞,2.1.6以下的有上传漏洞,还有一些比如遍历目录,当数据库被管理员修改为asp、asa后缀的时候,可以插一句话木马服务端进入数据库,特别是你加个#号,简直和没加一样,一般会尝试db/#ewebeditor.asa、db/#ewebeditor.asp 、db/#ewebeditor.mdb,这样的。
若果EWB的权限沦陷的话~基本上你的服务器没救了,一般主流的方法是添加上传类型,然后直接上传ASP大马。
4.如果开始一些简单检测,都过了的话。就会尝试旁注,所谓旁注,就是先入侵你同服务器的站,然后跨目录,或者监听。
5.如果还没效果的话,我会社工你的QQ,E-MAIL,电话等,看下有没价值的信息。一般人会把一些网站账号保存在E-MAIL里面。
6.看似没了~~绝杀招--“等”
口令破解的攻击方法有哪些?
8.3 口令破解工具
现在我们了解了口令的加密方式,下面考察一些用于破解口令的工具。口令破解器通常使用下述三种方法之一:
— 字典攻击。
— 暴力攻击。
— 混合攻击。
在字典攻击(Dictionary Attack)中,使用了一个字典文件,它包含了要进行试验的所有可能口令。字典文件可以从互联网上下载,也可以自己创建。字典攻击速度很快,当我们要审计单位中使用的口令不是常用词汇时,这种方法十分有效。
暴力攻击(Brute Force Attack)试验组成口令的每一种可能的字符组合。这种类型的攻击通常要花费更长的时间,但在足够长的时间之后,最终肯定能够得到口令。
混合攻击(Hybrid Attack)将字典攻击和暴力攻击结合在一起。利用混合攻击,常用字典词汇与常用数字结合起来,用于破解口令。这样,将会检查诸如password123和123password这样的口令。
如果我们要通过口令破解来审查口令策略的实施情况,那么可以使用上述三种方法中的任何一种方法;如果我们仅仅要检查在口令中没有使用常用词汇,那么字典攻击就已经足够了。另一方面,如果我们要进行口令恢复,那么可以先进行字典攻击,不成功时再进行暴力攻击。
另外一种替代方法是使用彩虹表(Rainbow Table),也就是散列对照表。它的想法是,将已经破解的散列值存储起来,并在下一次破解口令时比较这些散列值。彩虹表存储了常用的散列组合,这样在破解口令时可以节省大量的时间。
网站如何让用户可以正常登录,同时不怕数据库被盗?
职责所在,不邀自来。
首先感谢楼上的回到,真的很详实,接下来,我从三个方面讲一讲该如何做才能最大程度(没有百分百)的不出现数据库被盗的悲剧。
第一点也是最重要的一点,是保证应用程序的安全,保证黑客不能通过XSS、SQL注入、命令执行等等一系列的攻击手段把数据库盗走。
把数据库盗走的方式很多,比如入侵了数据库所在的服务器,把数据库文件直接复制走。把数据库的备份偷走。利用SQL注入把整个数据库的所有表全部偷走。针对以上种种,有哪些防范措施呢?权限控制,账号体系。比如应用程序不能通过root账号启动、更改数据库的默认账号,这些小技巧,在关键时候,就能阻止黑客的进一步入侵。所以,安全一定不能马虎大意,要防微杜渐。不然,很容易就“千里之堤毁于蚁穴”。
第二就是楼上所讲在数据库存储阶段的各种手法。这个是在数据库文件万一被黑客盗走,也能保证数据本身的不被泄漏。尤其是账号密码的安全。明文存储肯定是会出大事的(CSDN);MD5,随着彩虹表和计算机计算能力的越来越强大,也变得岌岌可危。“加盐”是个很好的方法,但是也要保证“盐”本身足够随机和不可推测,不然,被黑客找到规律,瞬间所有密码就保不住了。行业里就曾经发生过加盐算法是用户名的md5值,结果很快就被破解了。我们采取任何一种防御方法,都要明白它的原理和局限性,这样才能更好的发挥作用,而不受制于它。
第三点,必要的安全检测手段和防御机制。比如在系统预留一个伪装的管理员帐号,哪天这个账号被人登录了,那么一定就是出事了。现在的“社工库”强大到无法想像,好多大公司,尽管自身安全到位了,但还是躲不过“撞库”攻击。所以,在做到前面两点的同时,安全检测的手段也要加强,能够快速的识别账号系统的异常,就能把一个或刻意或随机的安全攻击消灭于萌芽。
以上,肯定还是不全面的,欢迎各位同仁一起讨论。
为什么有的网站要求密码中必须至少有一个大写字母?
增加破解难度呗,保护用户安全,主要针对安全意识不高的用户,例如一个用户惯用密码为abc,那么强制一个大写字母的话,Abc或者aBc的破解难度相对而言,高了不少,提高密码的排列组合的可能性,增加强行破解的成本,你看就例如Apple ID 一般为邮箱,因为你注册成功后会收到验证邮件,密码至少为8位,且必须含有大写字母,小写字母和数字,其中这些字符重复不能超过三次,比如说密码:Wo4444 就不成功因为含有4个4. 假如注册时不希望绑定银行卡,可以在itunes里点击免费的软件下载,通过免费链接即可去掉绑定选项。为你自己的密码,密码要求:
1必须且只能包含大写字母、小写字母、数字,
2密码长度大于64.将tools目录整个上传到网站的source\plugin目录下,
3然后输入http:网站sourceplugintoolstools.php6.显示输入密码,就是第3步你设置的密码。然后就可以使用tools修复数据库和找回管理员密码了。除非社工工作做得好,否则简单的说密码基本就是越长越好,用什么奇怪的字符都不会提高多少安全性。所以gouliguojiashengsiyi这种就挺好。还有对于脱裤攻击来说,大家比的是谁的密码比别人的强。其实实际来说,如果面向的是特定个人攻击,那这两种强度差不多,因为彩虹表+字典攻击。我曾经用乐谱作为密码,一首简单的歌曲由72个数字组成,然后每次上班,同事都要看着我噼里啪啦的一阵密码乱敲,而且每次还要敲几遍才敲对。
HASH中的MD5
Hash,一般翻译做"散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.
简单的说就是一种将任意长度的消息压缩到某一固定长度的信息摘要的函数.
HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系.
Hash算法在信息安全方面的应用主要体现在以下的3个方面:
如果将哈希后的密文比作一把锁,暴力破解的方法就是现场制作各种各样不同齿形的钥匙,再来尝试能否开锁,这样耗时无疑很长;我以前错误理解的“彩虹表”,是事先制作好所有齿形的钥匙,全部拿过来尝试开锁,这样虽然省去了制作钥匙的时间,但是后来发现这些钥匙实在是太多了,没法全部带在身上。而真正的彩虹表,是将钥匙按照某种规律进行分组,每组钥匙中只需要带最有特点的一个,当发现某个“特征钥匙”差一点就能开锁了,则当场对该钥匙进行简单的打磨,直到能开锁为止。这种方法是既省力又省时的.
哈希碰撞就是一种优化过算法,其基本原理就是把密码明文对应的MD5与你的MD5进行对比,因为经过一些优化,所以无论是时间上,还是空间都很很快.其优化方法我也没研究过,不过感兴趣的可以查一下王小云教授关于哈希碰撞的论文.
目前来说,破解MD5加密的最有效的方法就是 哈希碰撞+彩虹表+对应秘钥 ,一些网络黑客会在一些明文存储用户密码的网站上窃取信息,假如黑客有一亿条数据,因为都是真实用户所以经过哈希碰撞之后,你的密码被破译出来的几率就真的非常大了,那破译不出来的可能就是因为大小写和一些特殊符号,这就用到了彩虹表,最后就是你的秘钥,比如你是之前对用户的密码进行加盐,还是之后对MD5之后的字符串进行的特殊处理,只要对方知道你的秘钥,那么你密码被破译出来的几率就非常非常高了,所以我们说: 一个密码系统的安全性只在于密钥的保密性,而不在于算法的保密性.
MD5本身是不可逆和无冲突的,但是用一些巧妙地方法会被破解出来.一个密码系统的是没有绝对安全的,密码系统只是增加了被破解的代价.
PS:一切明文存储用户密码的网站都是耍流氓!
web.py怎样安全地传递密码
保护密码最好的的方式就是使用带盐的密码hash(salted password hashing).对密码进行hash操作是一件很简单的事情,但是很多人都犯了错。接下来我希望可以详细的阐述如何恰当的对密码进行hash,以及为什么要这样做。
重要提醒
如果你打算自己写一段代码来进行密码hash,那么赶紧停下吧。这样太容易犯错了。这个提醒适用于每一个人,不要自己写密码的hash算法 !关于保存密码的问题已经有了成熟的方案,那就是使用phpass或者本文提供的源码。
什么是hash
hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hbllo") = 58756879c05c68dfac9866712fad6a93f8146f337a69afe7dd238f3364946366
hash("waltz") = c0e81794384491161f1777c232bc6bd9ec38f616560b120fda8e90f383853542
Hash算法是一种单向的函数。它可以把任意数量的数据转换成固定长度的“指纹”,这个过程是不可逆的。而且只要输入发生改变,哪怕只有一个bit,输出的hash值也会有很大不同。这种特性恰好合适用来用来保存密码。因为我们希望使用一种不可逆的算法来加密保存的密码,同时又需要在用户登陆的时候验证密码是否正确。
在一个使用hash的账号系统中,用户注册和认证的大致流程如下:
1, 用户创建自己的账号
2, 用户密码经过hash操作之后存储在数据库中。没有任何明文的密码存储在服务器的硬盘上。
3, 用户登陆的时候,将用户输入的密码进行hash操作后与数据库里保存的密码hash值进行对比。
4, 如果hash值完全一样,则认为用户输入的密码是正确的。否则就认为用户输入了无效的密码。
5, 每次用户尝试登陆的时候就重复步骤3和步骤4。
在步骤4的时候不要告诉用户是账号还是密码错了。只需要显示一个通用的提示,比如账号或密码不正确就可以了。这样可以防止攻击者枚举有效的用户名。
还需要注意的是用来保护密码的hash函数跟数据结构课上见过的hash函数不完全一样。比如实现hash表的hash函数设计的目的是快速,但是不够安全。只有加密hash函数(cryptographic hash functions)可以用来进行密码的hash。这样的函数有SHA256, SHA512, RipeMD, WHIRLPOOL等。
一个常见的观念就是密码经过hash之后存储就安全了。这显然是不正确的。有很多方式可以快速的从hash恢复明文的密码。还记得那些md5破解网站吧,只需要提交一个hash,不到一秒钟就能知道结果。显然,单纯的对密码进行hash还是远远达不到我们的安全需求。下一部分先讨论一下破解密码hash,获取明文常见的手段。
如何破解hash
字典和暴力破解攻击(Dictionary and Brute Force Attacks)
最常见的破解hash手段就是猜测密码。然后对每一个可能的密码进行hash,对比需要破解的hash和猜测的密码hash值,如果两个值一样,那么之前猜测的密码就是正确的密码明文。猜测密码攻击常用的方式就是字典攻击和暴力攻击。
Dictionary Attack
Trying apple : failed
Trying blueberry : failed
Trying justinbeiber : failed
...
Trying letmein : failed
Trying s3cr3t : success!
字典攻击是将常用的密码,单词,短语和其他可能用来做密码的字符串放到一个文件中,然后对文件中的每一个词进行hash,将这些hash与需要破解的密码hash比较。这种方式的成功率取决于密码字典的大小以及字典的是否合适。
Brute Force Attack
Trying aaaa : failed
Trying aaab : failed
Trying aaac : failed
...
Trying acdb : failed
Trying acdc : success!
暴力攻击就是对于给定的密码长度,尝试每一种可能的字符组合。这种方式需要花费大量的计算机时间。但是理论上只要时间足够,最后密码一定能够破解出来。只是如果密码太长,破解花费的时间就会大到无法承受。
目前没有方式可以阻止字典攻击和暴力攻击。只能想办法让它们变的低效。如果你的密码hash系统设计的是安全的,那么破解hash唯一的方式就是进行字典或者暴力攻击了。
查表破解(Lookup Tables)
对于特定的hash类型,如果需要破解大量hash的话,查表是一种非常有效而且快速的方式。它的理念就是预先计算(pre-compute)出密码字典中每一个密码的hash。然后把hash和对应的密码保存在一个表里。一个设计良好的查询表结构,即使存储了数十亿个hash,每秒钟仍然可以查询成百上千个hash。
如果你想感受下查表破解hash的话可以尝试一下在CraskStation上破解下下面的sha256 hash。
c11083b4b0a7743af748c85d343dfee9fbb8b2576c05f3a7f0d632b0926aadfc
08eac03b80adc33dc7d8fbe44b7c7b05d3a2c511166bdb43fcb710b03ba919e7
e4ba5cbd251c98e6cd1c23f126a3b81d8d8328abc95387229850952b3ef9f904
5206b8b8a996cf5320cb12ca91c7b790fba9f030408efe83ebb83548dc3007bd
反向查表破解(Reverse Lookup Tables)
Searching for hash(apple) in users' hash list... : Matches [alice3, 0bob0, charles8]
Searching for hash(blueberry) in users' hash list... : Matches [usr10101, timmy, john91]
Searching for hash(letmein) in users' hash list... : Matches [wilson10, dragonslayerX, joe1984]
Searching for hash(s3cr3t) in users' hash list... : Matches [bruce19, knuth1337, john87]
Searching for hash(z@29hjja) in users' hash list... : No users used this password
这种方式可以让攻击者不预先计算一个查询表的情况下同时对大量hash进行字典和暴力破解攻击。
首先,攻击者会根据获取到的数据库数据制作一个用户名和对应的hash表。然后将常见的字典密码进行hash之后,跟这个表的hash进行对比,就可以知道用哪些用户使用了这个密码。这种攻击方式很有效果,因为通常情况下很多用户都会有使用相同的密码。
彩虹表 (Rainbow Tables)
彩虹表是一种使用空间换取时间的技术。跟查表破解很相似。只是它牺牲了一些破解时间来达到更小的存储空间的目的。因为彩虹表使用的存储空间更小,所以单位空间就可以存储更多的hash。彩虹表已经能够破解8位长度的任意md5hash。彩虹表具体的原理可以参考
下一章节我们会讨论一种叫做“盐”(salting)的技术。通过这种技术可以让查表和彩虹表的方式无法破解hash。
加盐(Adding Salt)
hash("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hello" + "QxLUF1bgIAdeQX") = 9e209040c863f84a31e719795b2577523954739fe5ed3b58a75cff2127075ed1
hash("hello" + "bv5PehSMfV11Cd") = d1d3ec2e6f20fd420d50e2642992841d8338a314b8ea157c9e18477aaef226ab
hash("hello" + "YYLmfY6IehjZMQ") = a49670c3c18b9e079b9cfaf51634f563dc8ae3070db2c4a8544305df1b60f007
查表和彩虹表的方式之所以有效是因为每一个密码的都是通过同样的方式来进行hash的。如果两个用户使用了同样的密码,那么一定他们的密码hash也一定相同。我们可以通过让每一个hash随机化,同一个密码hash两次,得到的不同的hash来避免这种攻击。
具体的操作就是给密码加一个随即的前缀或者后缀,然后再进行hash。这个随即的后缀或者前缀成为“盐”。正如上面给出的例子一样,通过加盐,相同的密码每次hash都是完全不一样的字符串了。检查用户输入的密码是否正确的时候,我们也还需要这个盐,所以盐一般都是跟hash一起保存在数据库里,或者作为hash字符串的一部分。
盐不需要保密,只要盐是随机的话,查表,彩虹表都会失效。因为攻击者无法事先知道盐是什么,也就没有办法预先计算出查询表和彩虹表。如果每个用户都是使用了不同的盐,那么反向查表攻击也没法成功。
下一节,我们会介绍一些盐的常见的错误实现。
错误的方式:短的盐和盐的复用
最常见的错误实现就是一个盐在多个hash中使用或者使用的盐很短。
盐的复用(Salt Reuse)
不管是将盐硬编码在程序里还是随机一次生成的,在每一个密码hash里使用相同的盐会使这种防御方法失效。因为相同的密码hash两次得到的结果还是相同的。攻击者就可以使用反向查表的方式进行字典和暴力攻击。只要在对字典中每一个密码进行hash之前加上这个固定的盐就可以了。如果是流行的程序的使用了硬编码的盐,那么也可能出现针对这种程序的这个盐的查询表和彩虹表,从而实现快速破解hash。
用户每次创建或者修改密码一定要使用一个新的随机的盐
短的盐
如果盐的位数太短的话,攻击者也可以预先制作针对所有可能的盐的查询表。比如,3位ASCII字符的盐,一共有95x95x95 = 857,375种可能性。看起来好像很多。假如每一个盐制作一个1MB的包含常见密码的查询表,857,375个盐才是837GB。现在买个1TB的硬盘都只要几百块而已。
基于同样的理由,千万不要用用户名做为盐。虽然对于每一个用户来说用户名可能是不同的,但是用户名是可预测的,并不是完全随机的。攻击者完全可以用常见的用户名作为盐来制作查询表和彩虹表破解hash。
根据一些经验得出来的规则就是盐的大小要跟hash函数的输出一致。比如,SHA256的输出是256bits(32bytes),盐的长度也应该是32个字节的随机数据。
错误的方式:双重hash和古怪的hash函数
这一节讨论另外一个常见的hash密码的误解:古怪的hash算法组合。人们可能解决的将不同的hash函数组合在一起用可以让数据更安全。但实际上,这种方式带来的效果很微小。反而可能带来一些互通性的问题,甚至有时候会让hash更加的不安全。本文一开始就提到过,永远不要尝试自己写hash算法,要使用专家们设计的标准算法。有些人会觉得通过使用多个hash函数可以降低计算hash的速度,从而增加破解的难度。通过减慢hash计算速度来防御攻击有更好的方法,这个下文会详细介绍。
下面是一些网上找到的古怪的hash函数组合的样例。
md5(sha1(password))
md5(md5(salt) + md5(password))
sha1(sha1(password))
sha1(str_rot13(password + salt))
md5(sha1(md5(md5(password) + sha1(password)) + md5(password)))
不要使用他们!
注意:这部分的内容其实是存在争议的!我收到过大量邮件说组合hash函数是有意义的。因为如果攻击者不知道我们用了哪个函数,就不可能事先计算出彩虹表,并且组合hash函数需要更多的计算时间。
攻击者如果不知道hash算法的话自然是无法破解hash的。但是考虑到Kerckhoffs’s principle,攻击者通常都是能够接触到源码的(尤其是免费软件和开源软件)。通过一些目标系统的密码–hash对应关系来逆向出算法也不是非常困难。
如果你想使用一个标准的”古怪”的hash函数,比如HMAC,是可以的。但是如果你的目的是想减慢hash的计算速度,那么可以读一下后面讨论的慢速hash函数部分。基于上面讨论的因素,最好的做法是使用标准的经过严格测试的hash算法。
hash碰撞(Hash Collisions)
因为hash函数是将任意数量的数据映射成一个固定长度的字符串,所以一定存在不同的输入经过hash之后变成相同的字符串的情况。加密hash函数(Cryptographic hash function)在设计的时候希望使这种碰撞攻击实现起来成本难以置信的高。但时不时的就有密码学家发现快速实现hash碰撞的方法。最近的一个例子就是MD5,它的碰撞攻击已经实现了。
碰撞攻击是找到另外一个跟原密码不一样,但是具有相同hash的字符串。但是,即使在相对弱的hash算法,比如MD5,要实现碰撞攻击也需要大量的算力(computing power),所以在实际使用中偶然出现hash碰撞的情况几乎不太可能。一个使用加盐MD5的密码hash在实际使用中跟使用其他算法比如SHA256一样安全。不过如果可以的话,使用更安全的hash函数,比如SHA256, SHA512, RipeMD, WHIRLPOOL等是更好的选择。
正确的方式:如何恰当的进行hash
这部分会详细讨论如何恰当的进行密码hash。第一个章节是最基础的,这章节的内容是必须的。后面一个章节是阐述如何继续增强安全性,让hash破解变得异常困难。
基础:使用加盐hash
我们已经知道恶意黑客可以通过查表和彩虹表的方式快速的获得hash对应的明文密码,我们也知道了通过使用随机的盐可以解决这个问题。但是我们怎么生成盐,怎么在hash的过程中使用盐呢?
盐要使用密码学上可靠安全的伪随机数生成器(Cryptographically Secure Pseudo-Random Number Generator (CSPRNG))来产生。CSPRNG跟普通的伪随机数生成器比如C语言中的rand(),有很大不同。正如它的名字说明的那样,CSPRNG提供一个高标准的随机数,是完全无法预测的。我们不希望我们的盐能够被预测到,所以一定要使用CSPRNG。
0条大神的评论