导图社区 漏洞总结思维导图
这是一篇关于漏洞总结思维导图的思维导图。主要从逻辑漏洞、SQL注入、命令注入、XSS见框就插、文件包含、文件上传、CSRF这几个方面的总结概括。
编辑于2021-12-03 16:10:28漏洞总结
SQL注入
定义:
通过把SQL命令插入到Web表单递交或输入域名或页面请求的查新字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有的应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者的本来的意图去执行SQL语句。
特性:
SQL注入是不挑位置的, 只要有注入点就可以, 为了获取数据库。 也就是说SQL注入是对Web数据库进行攻击。
分类:
显注 盲注
盲注:时间型盲注 布尔型盲注
判断:
如何判断SQL注入漏洞,可以给出真假条件,通过条件反馈的结果判断是否存在SQL注入漏洞。 例如:当给出一个1=2的假条件时,没有查询到结果是证明存在SQL注入漏洞。
工具及常用函数:
SQLMAP
常用函数:
mid() 从指定的字段中提取字段的内容 start() 开始的位置 length() 长度 limit() select * from table limit 1,1 返回结果中的第几条数据或者中间的数据 从第一位取第一个数据 concat() 可以链接一个或者多个字符。 concat_ws() 忽略空 group_concat() 分组拼接函数 count() 返回指定的列的数据(NULL忽略)
常用参数:
-u #注入点 -f #指纹判别数据库类型 -b #获取数据库版本信息 -p #指定可测试的参数(?page=1&id=2 -p “page,id”) -D “” #指定数据库名 -T “” #指定表名 -C “” #指定字段 -s “” #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s “xx.log” 恢复:-s “xx.log”
常用语句:
1. sqlmap -u "http://www.xx.com?id=x" 【查询是否存在注入点 2. --dbs 【检测站点包含哪些数据库 3. --current-db 【获取当前的数据库名 4. --tables -D "db_name" 【获取指定数据库中的表名 -D后接指定的数据库名称 5. --columns -T "table_name" -D "db_name" 【获取数据库表中的字段 6. --dump -C "columns_name" -T "table_name" -D "db_name" 【获取字段的数据内容
危害:
1.数据库内部的信息全部被外界窃取 2.数据库中的内容被篡改 3.登录认证被绕过 4.其他,例如服务器上的文件或服务被修改/服务器上的程序被执行。 5.Mysql是有备份功能的,只要有备份功能说明它可以在本地硬盘写入文件,当数据库可以还原的时候说明,它可以从本地上读取文件。所以除了数据库本身的东西,也可以对服务器本身的文件来进行操作,因为数据库对本地硬盘具有写入权限,那我们完全可以在服务器本地写一个定时拷贝的计划任务,这样Web的服务器所有数据库都将会被窃取,这样来说危害非常大。
如何防御:
SQL注入指的是利用设计上的漏洞,在目标服务器上运行SQL命令以及进行其他方式的攻击动态生成SQL命令,时没有对用户输入的数据进行验证是SQL注入攻击得逞的主要攻击方式。 可以通过最小权限原则进行防御,特别是不要用dbo或者sa账户,为不同的类型的动作或者组建使用不同的账户,最小权限原则适用于所有与安全有关的场合。 对用户输入进行检查,对一些特殊字符,比如单引号,双引号,分号,逗号等特殊字符进行转换或者过滤。使用强数据类型,限制用户输入的长度。 不要把数据库返回的错误信息全部显示给用户,错误信息经常会透露一些数据库涉及的细节。
XSS之见框就插
定义:
特性:
XSS是对位置比较的,访问量越大的位置, 可以拿到的cookie就越多,可以产生的危害就越大。
XSS的主要原因:过于信任客户提交的数据!
XSS是指攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。 从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
小结:
XSS不论是存储型还是反射型,在判定的时候就是要让浏览器产生歧义,最适合的方法就是构造一个弹窗。
分类:
反射型:
反射型xss攻击( Reflected XSS)又称为非持久性跨站点脚本攻击, 它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。 一个典型的非持久性XSS包含一个带XSS攻击向量的链接( 即每次攻击需要用户的点击)。
DOM型:
逻辑上等同于反射型,只是出现的位置不一样
存储型:
存储型XSS (Stored XSS)又称为持久型跨站点脚本,它一般发生在XSS攻击向量 (一般指XSS攻击代码) 存储在网站数据库,当一个页面被用户打开的时候执行。 每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大, 因为每当用户打开页面,查看内容时脚本将自动执行。 谷歌的orkut 曾经就遭受到XSS。两种类型实现的结果完全相同,不同的是前者需要点击,后者存在于网页的数据库内。
判断:
黑客发现一个存在XSS漏洞的接口或页面,构造恶意代码后, 将其插入到页面中使得所有浏览器的用户均受到安全威胁。 存储型与反射型的区别是,存储型又叫持久型, 反射型只能发动一次攻击。存储型会留在这个页面的数据库里, 逻辑上来说所有的漏洞都需要知道它怎么判定,再去利用漏洞。
手注:
常用手工注入方法,可以 使用特定语句进行测试有没有对标签忽略的限制。例如:<script>alert()</script> <img>alert</img>
常用函数:
onmouseover触发事件 onclickd javascript
危害:
其中最大的危害莫过于可以获取用户登录网站的cookie,我们通过恶意脚本拿到了网站某个用户的cookie,我们就可以通过这个cookie任意登录这个网站,前提是用户没有正常登出网站的前提下。 1、盗取各类用户帐号,如机器登录帐号、用户网银帐号,各类管理员帐号 2、控制企业数据,包括读取、篡改,添加、删除企业敏感数据的能力 3、盗窃企业重要的具有商业价值的资料 4、非法转账 5、强制发送电子邮件 6、网站挂马 7、控制受害者机器向其它网站发起攻击
防御:
从上面的介绍可知,XSS 漏洞是由于对用户提交的数据 没有经过严格的过滤处理造成的,所以防御的原则就是 不相信用户输入的数据,对输入进行过滤,对输出进行编码。
SELF XSS
SELF XSS在大多数情况下,不会构成太大的危害,但是发现SELF XSS的时候一定会想到CSRF,所以进行深挖,利用SELF XSS 与XSRF进行结合攻击那么就会产生很大的危害。
挖到漏洞之后需要确认的一个场景是,这个页面是否可以被其它用户看到。
XSS 盲打:
那么为什么要盲打,因为攻击并不知道后台有没有漏洞,随机传入一个,中了则证明有漏洞。 在这种情况下,如果管理员没有在数据库里清除这条记录,就算管理员改了密码,改一次cookie就丢一次。 存储型的特点就是在这个网站上一定有一个输入框在可以提交才可以实现。
CSRF
XSS与CSRF的区别是什么?XSS是跨站脚本攻击, CSRF是跨站请求伪造,其实重点是XSS攻击的是浏览器,CSRF攻击的是会话。
定义:
跨站请求伪造,就是盗用用户的cookie去登录, 进行恶意操作,对用户登录过的页面进行恶意操作。 CSRF是对位置极其挑剔的。如果挖到了SELF XSS , 那么可以进行下一步挖掘去挖掘CSRF,利用SELF XSS与CSRF进行配合利用。
浏览器的cookie策略
浏览器分发的cookie分为两种, 一种为Session cookie 又叫临时cookie,即用户关闭浏览器自动失效。 一种为本地cookie,本地cookie只有在浏览器指定的失效时间之外,才会失效。 谷歌 火狐 安卓浏览器默认不会拦截临时cookie
危害:
以受害者名义发送邮件,发消息,盗取受害者的账户,甚至购买商品, 虚拟货币转账,修改受害者的网络配置(比如修改路由器DNS,重置路由器密码)等等。 造成的问题包括:个人隐私泄露,机密资料泄露,用户甚至企业的财产安全; 一句话概括CSRF的危害: 盗用受害者身份,受害者能做什么,攻击者就能以受害者的身份做什么。
防御:
增加referer校验,在请求的地址中添加token并验证。token就是一个随机值
CSRF为什么可以攻击成功,其本质原因是重要操作的所有参数都是可以被攻击者猜到的。 攻击者只有预测出URL的所有参数与参数值,才能成功构造出一个伪造的请求,反之,则无法成功。 出于这个原因可以采用的方法是,对参数进行加密,或者使用一些随机数。应用不可预测原则。
攻击条件:
CSRF需要出现在重要的位置才能构成危害。 CSRF需要受害者点击才能完成攻击过程。 CSRF需要受害者用于cookie才可以,并且session未失效。 利用的是未失效的会话,如果现在发给用户的是钓鱼的链接 用户点击了但是与这个网站之间没有cookie,这个攻击是完成不了的。
文件上传
漏洞成因:
由于程序员在文件长传的功能上没有严格限制用户可以长传文件的后缀(也就是格式),导致用户可以越过本身原有的权限向服务器上传可执行的动态文件。 如果使用的是windows服务器并且是以php作为服务器的动态网站环境, 那么在用户上传的功能上,一定不可以具有上传php文件的权限。
利用方法:
如果程序里面存在这种漏洞,那么攻击者就可以直接向服务器上传webshell(ASP木马,PHP木马等,可以用来编辑服务器上的文件。)从而控制网站。
漏洞危害:
web应用开发人员在实现文件上传功能过程中, 如果没有对文件格式、后置严格校验, web存在文件上传漏洞,攻击者可能利用此漏洞直接上传病毒、 木马、钓鱼图片、包含脚本的图片、恶意脚本文件,webshell等, 再通过访问这些恶意的脚本中的恶意代码, 最终可能会导致用户信息泄露, 被钓鱼,甚至攻击者可以直接上传webshell到服务器, 进而得到自己想要的信息和权限,在服务器系统中为所欲为。
工具:
1.weevely 2.webacoo
防御:
1.上传的路径以及允许上传的类型。 2.针对以上两点进行防御,利用白名单限制只能允许上传的类型。 3.不要利用concent type 来辨别上传的类型,可以被修改绕过。 4.而是去校验图片的内容是不是图片,还是有其他恶意的内容。 5.针对路径防御:重命名文件,使上传之后的文件与攻击者原上传的文件名字不符, 并隐藏文件,使攻击者无法找到上传之后的文件。
文件包含
漏洞成因 :
文件包含是一种常见的依赖于脚本运行而影响Web应用程序的漏洞。 当应用程序使用攻击者控制的变量建立一个可执行代码的路径, 允许攻击者控制在运行时执行哪个文件时,就会导致文件包含漏洞。
漏洞分类:
远程文件包含(RFI):
当Web应用程序下载并执行远程文件的时候,会导致远程文件包含, 这些远程文件通常以HTTP或FTPURI的形式获取,作为Web应用程序的用户提供的参数。
本地文件包含(LFI):
本地文件包含类似于远程文件包含, 本地文件包含仅能包含本地文件, 即当前服务器上的文件以供执行。
漏洞危害:
1.Web服务器的文件被外界浏览导致信息泄露。 2.脚本被执行所造成的影响: 3.篡改网站 4.执行非法操作 5.攻击其他网站(垫脚石)。
常用函数:
require() require_once() include() include_once()
利用条件:
session的存储位置可以获取。 通过phpinfo的信息可以获取到session的存储位置 通过phpibfo的信息,获取到session.save_path为/var/lib/php/session session中的内容可以被控制,传入恶意代码。
防御:
①严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制; ②路径限制 :限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:“../”; ③包含文件验证:验证被包含的文件是否是白名单中的一员; ④尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include('head.php')。
命令注入
漏洞成因:
应用有时需要调用一些执行系统命令的函数,如PHP中的system/exec/shell_exec passthru/popen/proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令, 拼接到正常命令中,从而造成命令注入攻击,这就是命令注入漏洞。
利用条件:
1.应用调用执行系统命令的函数 2.将用户输入作为系统命令的参数拼接到命令行中 3.没有用户输入进行过滤或过滤不严。
漏洞分类:
1.代码层过滤不严 2.系统的漏洞造成命令注入 3.调用的第三方组件存在代码执行漏洞
漏洞危害:
1.继承Web服务程序的权限去执行系统命令或读写文件 2.反弹SHELL 3.控制整个网站甚至服务器 4.进一步内网渗透
常用函数:
PHP中的危险函数: system:成功则返回命令输出的最后一行,失败则返回FALSE。 exec:命令执行结果的最后一行内容。 shell_exec:命令执行的输出。如果执行过程中发生错误或者进程不产生输出,则返回NULL。 passthru:执行外部程序并且显示原始输出。 eval:将输入的字符串参数当做PHP程序代码来执行。 assert preg_replace call_user_func
防御:
1.尽量不要执行外部命令。 2.使用自定义函数或者函数库来代替外部命令的功能。 3.使用escapeshe||arg函数来处理命令参数。 4.使用safe_mode_exec_dir指定可执行文件的路径。(safe_mode_exec_dir指定路径时可以把会使用的命令提前放入此路径内。)
逻辑漏洞
漏洞成因:
逻辑漏洞是没有指纹的,逻辑漏洞可以将其理解为是跳出正常流程的逻辑去进行攻击。 也就是说,正常情况下,如果出现了一种正常的A事件, 那么下一个B事件就一定会根据上一个出现的A事件发生,通过B事件, 一定会得到C结果。但实际上,攻击者可能跳出正常的逻辑, 执行一个不正常的X事件或其他与正常逻辑不符的事件, 利用原有逻辑顺序的漏洞进行攻击。
越权:
垂直越权:
假如说网站后台有两个身份,一个是普通用户的身份,一个是管理员的身份。 在其中cookie当中的一个字段,代表得是一个参数值=0,等于=0的时候代表的是管理员,等于1的时候代表的是普通用户,但是系统中只有admin是管理员。所以假如说,我们爆破出了一个普通用户的权限。抓包之后看到了一个参数值,将0改为1或者把1改为0,就会变成0或者1代表的身份,因为现在服务器认为这个userid的值等于0那么服务器就会默认你是管理员,这就是所谓的垂直越权。(纵向越权)
水平越权:
比如电商的管理后台,可以查看自己的订单但是不能查看其他人的订单,但是如果现在我们去修改userid的值为1 2 3 4 5 6 7 ,那么就可以实现水平越权,查看别人的订单。 判定的条件是,只要URL和cookie是对的那么服务器就允许通过,这种类型的问题一般是这个资源与cookie所代表的用户是不是匹配的,有没有权限去查看.
前后文越权:
通过抓取对应页面的URL,跳过在认证过程中的步骤进行前后文越权。 也就是说,如果想要实行前后文越权,那我们可以查到在网站认证过程的中的步骤对应包之后,想要越过哪一步认证直接丢弃对应的包就好了。
定义:
如果一个本属于低权限的角色用户通过一些方法能够 获得高权限角色的能力,则发生了“越权访问”。
防御:
应该使用最小权限原则, 并使用默认拒绝的策略, 只对有需要的主题单独配置“允许”的策略。
挖掘思路:
整体的行为逻辑就是,先进行正常流程。 再破坏正常流程,进行抓包改包,使其暴露流程的漏洞。