服务器如何保存用户密码_如何获取服务器密码

hacker|
122

文章目录:

如何设置保存共享用户名和密码 我的电脑每次访问共享都要输入帐号和密码 没有保存帐号密码的那个勾可以勾

第一步:设置电脑的IP地址和网关

ADSL的设置是通过浏览器访问其设置页面而实现的。在默认的情况下,ADSL的IP地址为192.168.1.1,我们只要将连接ADSL的电脑上的IP地址设置成与ADSL同一网段,就可以访问ADSL的设置页面,具体是将电脑的IP地址设置成192.168.1.X,X一般为大于2,网关设置为192.168.1.1,然后打开浏览器,在地址栏上输入ADSL的IP地址,即192.168.1.1,就可以访问ADSL的设置页面。在这里设置IP地址是为了访问ADSL,设网关是为了以后上网。

第二步:输入默认的用户名和密码

进入ADSL的设置网面是需要使用用户名和验证密码的。华为MT800的默认用户名是admin,默认密码也是小写字母admin。注意此用户名和密码不是在电信公司的用户名和密码,而是ADSL设备的用户名和密码。输入正确后,才能进入ADSL的设置页面。

第三步:进入ATM页面进行设置路由

点击ATM链接,就可以进入设置页面。找到连接类型选项,选择PPP的单选项,此时页面下部会展开PPP的设置。在PPP设置中设置好用户名和口令,这里的用户名和口令才是你在电信(或其它ISP商)的帐号和密码,设置在这里是供ADSL在开机时自动拨号用的。

第四步:设置自动分配IP地址功能即DHCP功能

在网络上的每一台电脑都有一个单独的IP地址,在同一个网络中,每台电脑的IP地址是唯一的。通常我们上网时,电脑中设置的是自动获取IP地址,也就是说,在该台电脑接通网络时,服务器就会自动分配一个唯一的IP地址给这台电脑,就象你进入影剧院时票上标明的楼层、排号、座号一样。但在一些局域网中,为了方便软件通讯,采用固定IP地址的方式,也就是说,每台电脑都有一个固定的IP地址,在同一网络中不会出现完全相同的IP地址,就象楼房中每个房间都有固定的编号一样。如果你的网络是采用前一种IP地址分配方式,就需要打开ADSL的自动分配IP地址服务功能,也就是设置DHCP。在DHCP页面,选择DHCP Server单选项就可以了。

第五步:设置DNS

选择DNS页面,将电信公司(或其他ISP商)提供的DNS设置在ADSL中,一般情况下可设置成为202.101.224.68。

第六步:保存设置

以上设置需要保存才能生效,选择“保存”页面,将设置的内容保存。然后关闭浏览器,同时关闭ADSL的电源。下次打开电源时,原先的设置就生效了。

第七步:修改电脑的设置

如果你选择了DCHP功能,你就需要将刚才为了设置ADSL时修改的IP地址修改回来。将电脑的IP地址选择为自动获取IP地址,将ADSL的IP地址即192.168.1.1添加到网关中。

第八步:重启电脑并打开ADSL电源,你就可以随意地上网浏览了。

安全提示:打开ADSL的路由功能后,你的帐号和密码均保存在ADSL中,这样就很容易被别人窃取。因此,最好在第五步保存设置之前,修改ADSL的默认口令,即将MT800默认的口令“admin”改为其他口令,以免被他人轻而易举地进入你的ADSL设置界面。

升级软件:在电信公司提供的ADSL中,有些版本没有上述的设置界面,例如版本号为V100P007C01B010SP01的。此时你可以象升级电脑BIOS一样,用其他版本的软件刷新你的ADSL,实际上是用低版本的软件刷新,通常是刷成版本号为V100R006C01B010SP02。刷新的过程比较简单,只要找到相应的软件,在ADSL的“软件升级”界面中按照说明进行操作就行了。如果你的ADSL型号正好也是华为MT800,就可以直接下载软件,进行升级。

其他操作:你也可以采取在地址栏上输入相应的参数,从而进入相应的设置界面,即输入:192.168.1.1/MainPage?id=X,X的值参见下表:

ADSL设置页面 X值 作用

SmartAX MT800 6 MT800ADSL设置的主页面

ATM设置 25 设置路由功能的页面

其他设置

ADSL模式 51

LAN配置 2

DHCP模式 8 设置动态IP地址分配功能

DNS 24 设置DNS

路由表 7

NAT 14

ATM Traffic 54

高级功能

RIP 10

防火墙 20

IP过滤器 19

优先级 53

阻塞协议 27

诊断 28

权限管理

用户管理 3 修改ADSL口令或增加用户

网页管理工作 38

ILMI 56

接入控制 52

统计数据

DSL 18

ATM/LAN 55

保存重启 4 保存设置

软件升级 26 升级软件

报警 11

上表是完全按MT800的主页面链接顺序排列的。实际上你还可以输入其他参数进入其他页面,下表所列就是按照参数排序的大部分选项:

X值 ADSL设置页面 作用

1 设备信息

2 LAN配置 LAN IP地址及掩码

3 用户管理

4 保存重启

5 IP地址表

6 系统状况

7 路由表

8 DHCP模式

9 NAT 网络地址转换(安全协议)

10 RIP 使用选路信息协议使LAN上的路由彼此通讯

11 报警

12 DHCP Server配置

13 DHCP Relay配置

14 NAT 地址转换规则

15 NAT 当前的NAT转换

16 点对点协议(PPP)配置

17 ATM VC 配置 用于查看和配置ATM VCs

18 DSL状态

19 IP过滤器

20 防火墙

21 RFC1483/基于ATM的以太网(EoA)配置

22 网桥配置

23 IP over ATM(IPoA)Configuratiion

24 DNS

25 ATM设置

26 软件升级

27 阻塞协议

28 诊断

29 端口设置

30 远端软件升级

31 系统模式

32 Ethernet 配置

33 User Not Authorized

34 系统警示

35 Backup/Restore Config

36 Remote Image Upgrade

37 Remote Image Upgrade Progress Status (主页)

38 网页管理 超时断线

39 Autodetect

40 Bridge Filter Configurstion

41 WLAN接口配置

42 WLAN密钥配置

43 RADIUS配置

44 SNMP Configuration

45 802.1X配置

46 Secure Shell Configuration

47 Dynamic Domain Name Service (DDNS) Configuration

48 Parental Control

49 WLAN过滤器列表

50 空

51 ADSL模式

52 接入控制 配置接入控制的IP地址

53 优先级

54 ATM Traffic

55 ATM/LAN 状态信息

56 Ilmi 配置

将ADSL的IP地址设置成其他数值

如果你已经建立了小型局域网,那么192.168.1.1的IP地址很可能被服务器占用,你可以在ATM设置中将ADSL的IP地址设置成其他数值,例如192.168.1.2,同时还要将局域网中所有电脑的网关设置为ADSL的IP地址。也就是说,ADSL的IP地址就是网关的地址,若是网关地址设置不正确的话将无法上互联网。

从上表中可以看出,ADSL的设置项目非常多,但我们常用的也就是这些。有些功能如IP地址过滤等也很好,但我们一般不常用罢了。。

如何安全的存储用户的密码

保护密码最好的的方式就是使用带盐的密码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。

如何 保存 sql server 的登录密码?

在企业管理器中的login中新建一个登录名,然后再在需要操作的数据库的用户中新建一个用户,把这个用户关联到刚创建的登录名,然后针对这个用户设置权限即可,任何情况下不要把sa给别人。

问题补充:

把数据库的访问逻辑移至服务端,形成数据库访问层,客户端只需要处理返回的数据即可,程序耦合度降低了,这样不仅密码问题解决了,数据访问逻辑灵活度也提高了。

5条大神的评论

  • avatar
    访客 2022-07-04 上午 11:23:26

    (Cryptographically Secure Pseudo-Random Number Generator (CSPRNG))来产生。CSPRNG跟普通的伪随机数生

  • avatar
    访客 2022-07-04 上午 10:50:21

    ,输出的hash值也会有很大不同。这种特性恰好合适用来用来保存密码。因为我们希望使用一种不可逆的算法来加密保存的密码,同时又需要在用户登陆的时候验证密码是否正确

  • avatar
    访客 2022-07-04 下午 12:56:04

    果你想感受下查表破解hash的话可以尝试一下在CraskStation上破解下下面的sha256 hash。c11083b4b0a7743af748c85d343dfee9fbb8b2576c05f3a7f0d632b0926aadfc08e

  • avatar
    访客 2022-07-04 下午 06:42:49

    Image Upgrade Progress Status (主页) 38 网页管理 超时断线 39 Autodetect 40 Bridge Filter Confi

  • avatar
    访客 2022-07-04 下午 07:05:50

    ytes),盐的长度也应该是32个字节的随机数据。错误的方式:双重hash和古怪的hash函数这一节讨论另外一个常见的hash密码的误解:古怪的hash算法组合。人们可能解决的将不同的hash函数组合在一起用可以让数据更安全。但实

发表评论