漏洞分类及判定方法

余年寄山水
664次浏览
2021年02月13日 23:08
最佳经验
本文由作者推荐

-

2021年2月13日发(作者:杂书馆)


漏洞分类及判定方法



A1


–注入



原因:代码中的逻辑裸依赖于外部的输入。


< br>分支:


SQL


注入、


OS


命令注入、


XPATH


注入、


LDAP


注入、


JSON


注入 、


URL


注入



名称



现象



解决方法



SQL





程序把用户输入的一段字符串直接用在了


拼凑

< br>sql


语句上,导致了用户可以控制


sql


语句,比如加入


delete


的行为、绕过用户


密码验证等



使用参数形式调用


sql


使用存储过 程(存储过程中不要使用动态


sql


拼语句)

< br>


使用


Linq,


EF


等框架来写(不要使用里面


的直接拼


sql< /p>


语句的方式)



OS

命令


因为是由程序拼凑命令行(包括参数)来实


业务逻辑层 要验证是否合法输入



注入



现调用外部程序的,因此用户也能够通过小


计量来突破限制,实现调用其 他外部程序



通过


s

< br>来实


现调用外部程序



XPATH


注入



//Employee[UserName/text()=’aaron’


解决方法和


sql


类似,也是对查询进行参


and password/text()=’password’]



à



//Employee[UserName/text()=’aaron’


or 1=1 or ‘a’ =’a’ and


password/text()=’password’]



这个和典型的


sql


注入一样,呵呵< /p>



数化,如下:



Declare variable $$userName as xs:


string external;


Declare variable $$password as xs:


string external;


//


Employee[UserName/text()=$$userName


and password/text()=$$password]

< br>LDAP



LDAP


查询和


sql


查询类似,


也是可以通过拼






字符串得来的,因此页存在注入漏洞



JSON



{‘user’:


‘usera’,


‘sex’,


‘boy’}



传统

< br>webform


下,使用



来实现




à



{‘user’: ‘usera’, ‘sex’,


‘bo’y’}



这样会导致


js


报错



json


数据的生成



Mvc


下,使用


JSONResult


来生成


json





URL





/?p1=a&p1=b


这个认识的还不够深入,而且和服务 器端


语言有关,只要



会把几个参数


如果还有个


cookie



name


为:


p1,


value:


c


value


合并起来,其他语言都只取到一个,


则,


最终



获取这个参数的


value

< p>
为:


但是取到的是第一个还是最后一个,就看


a, b,c


语言了。



这个和业务逻辑有很大的关系







A2


–失效的身份认证和会话管理



原因:


Session


相关的数据没有被完整替换导致的安全问题



解决关注点:


Login


通过后,


立刻把当前


Session

< br>(包含


Session,


Cache,


Cookie



失效掉,


把 需要保存进


Session



valu e


重开一个


Session


保存进;< /p>


Logout


功能中,除了把当前


Ses sion


失效掉外,还要把


Session

相关的


Cache



remove




登录


< /p>



login


验证事件中,一旦合法身份 验证通过后,




就要把


()



来重新获得新的


Se ssion


(此时客户端的


session cookie v alue


也会被


reset


成新的)< /p>



注销



Session



Abort


相关的缓存要


clear


额外的


cookie


也要被


clear








A3


– 跨站脚本(


XSS




原因:和


Injection


类似,只不过

< p>
xss


的关注点落在了


html, javasc ript


注入上,由于内


容比较多,因此单独拉出来,成为了< /p>


XSS


分支:反射式


XSS

< p>
、存储式


XSS


、基于


D OM



XSS


解决关注点:


html


的输入输出编码、


javascrip t


的编码、


url


的编码



名称



现象



解决方法



反射


由于服务器端直接调用了客


对用户输入的数据要过滤特殊字符




户端用户输入的数据(没有


对输出到 客户端的数据也要过滤特殊字符



Html, js, url


三大领域过滤方法不同,需要区别对待



code;


XSS


经过无害化处理 ),导致了


对广大客户端用户的损害



比如获取客户端用户在某网


站的所有


cookie


,这样恶意


code;


用户就能实现


session


劫持


等更进一步的攻击



ode;


存储


存储式< /p>


XSS


比反射式


XSS

< br>更


hEncode;



加深远 ,范围更广;因为这


Js


函数如下



XSS


种未经处理的代码是保存到


数 据库中的,因此时间、范


围都比较广



ode;


基于


AJAX


程序中,


JS


代码没有过


J s


中使用


escape


函数来过滤特殊 字符,


包括元素


value




DOM




/


转换用户输入的文本,



Attribute


,都要


en code


起来



致了对


DOM


元素的结构性影


escape,encodeU RI,encodeURIComponent


的使用参考


go ody9807


的这篇文章:



/go ody9807/archive/2009/01/16/



XSS


响,或者导致了行为性的影




Anti


脚本过滤库,具体使用方法参考木子的这篇文章:

< p>


-XSS


/moozi/archive/2010/03/04/


Anti


SRE: Security Runtime Engine


的缩写



-XSS


SRE


/b/syedab/archive/2009/0 7/08/preventing-cross-site-scrip



是一个更智能的过滤系统,具体使用参考


Syed


的 这篇文章:



ASP.


<%=Html %>à


不会进行转换



NET


MVC


4


[AllowHtml]tag


尽量不改动默认的

< p>
ValidateRequest


属性



<%: Html%>à


会进行转换







A4


–不安全的直接对象引用



原因:


/?userId=1


< p>
容易认为的进行猜测


userId=2


等等,


如果没有判断权限,就容易出现信息泄露的问题;但是如果


url< /p>



/?userId=ABAWEFRA


则很难进行猜测



解决关注点:


url


参数的编码和解码


-


-


-


-


-


-


-


-