指web应用程序对用户输入的数据合法性没有判断,导致攻击者可以构造不同的sql语句来对数据库数据库的操作。(web应用程序对用户输入的数据没有进行过滤,或者过滤不严,就把sql语句带进数据库中进行查询)。
Sql注入漏洞的产生需要满足两个条件:
①参数用户可控:前端传给后端的参数内容是用户可以控制的。
②参数代入数据库查询:传入的参数拼接到sql语句,且带入数据库查询。
①数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
②网页篡改:通过操作数据库对特定网页进行篡改。
③网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
④数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
⑤服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
⑥破坏硬盘数据,瘫痪全系统。
①过滤危险字符:例如,采用正则表达式匹配union、sleep、load_file等关键字,如果匹配到,则退出程序。
②使用预编译语句:使用PDO预编译语句,需要注意,不要将变量直接拼接到PDO语句中,而是使用占位符进行数据库的增加、删除、修改、查询。
③特殊字符转义、使用严格的数据类型。
恶意攻击者往Web页面里嵌入脚本代码(通常是JavaScript编写的恶意代码),当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。(恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。)
①盗取用户Cookie。
②修改网页内容。
③网站挂马。
④利用网站重定向。
⑤XSS蠕虫。
①过滤输入的数据:包括”’”、”<”、“<”、“>”、“on”等非法字符。
②对输出到页面的数据进行相应的编码转换,包括html实体编码、javascript编码等。
因为web应用程序在用户进行敏感操作时,如修改账号密码、添加账号、转账等,没有校验表单token或者http请求头中的referer值(如果您在网页1,点击一个链接到网页2,当浏览器请求网页2时,网页1的URL就会包含在 Referer 头信息中),从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。
Csrf攻击过程两个重点:
①目标用户已经登录了网站,能够执行网站的功能。
②目标用户访问了攻击者构造的URL。
①伪造HTTP请求进行未授权操作。
②篡改、盗取目标网站上的重要用户数据。
③未经允许执行对用户名誉或者资产有害的操作,比如:散播不良信息、进行消费等。
④如果通过使用社工等方式攻击网站管理员、会危害网站本身的安全性。
⑤作为其他攻击向量的辅助攻击手法,必须配合XSS
⑥传播CSRF蠕虫
①验证请求的referer值,如果referer是以自己的网站开头的域名,则说明该请求来自网站自己,是合法的。如果referer是其他网站域名或空白,就有可能是csrf攻击,那么服务器拒绝该请求,但是此方法存在被绕过的可能。
②csrf攻击之所以能成功,是因为攻击者伪造用户的请求,所以抵御csrf的关键在于:在请求中放入攻击者不能伪造的请求,例如,可以在HTTP请求中加入一个随机产生的token,并在服务器端验证token,如果请求中没有token或者token内容不正确,则认为请求可能是csrf攻击,从而拒绝该请求。
大都是由于服务器提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造。SSRF是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。
攻击者就可以利用该漏洞绕过防火墙等访问限制,进而将受感染或存在漏洞的服务器作为代理进行端口扫描,甚至是访问内部系统数据。
① 限制请求的端口只能为web端口,只允许访问HTTP和HTTPS请求。
② 限制不能访问内网的IP,以防止对内网进行攻击。
③ 屏蔽返回的详细信息。
④ 限制请求的端口为HTTP常用的端口,比如 80,443,8080,8088等。
就是未对用户上传的文件进行检查和过滤,导致某些别有用心的用户上传了一些恶意代码或文件(asp、php、jsp等),从而控制了网站。(当文件上传时,如果服务端的脚本语言没有对上传的文件进行检查和过滤,那假如,渗透者直接上传恶意代码文件,那么就有可能直接控制整个网站,或者说以此为跳板,直接拿下服务器,这就是文件上传漏洞。)
非法用户可以利用恶意脚本文件控制整个网站,甚至控制服务器。这个恶意脚本文件,又称为webshell,也可将webshell脚本称为一种网页后门,webshell脚本具有很强大的功能,比如查看服务器目录、服务器中的文件,执行绕过命令等。
①通过白名单方式判断文件后缀是否合法。
②对上传的文件进行重命名。
原理:由于服务器端没有做限制,导致攻击者可以通过暴力手段破解所需信息,如用户名、密码、验证码等。暴力破解需要一个强大的字典,如4位数字的验证码,那么暴力破解的范围就是0000~9999,暴力破解的关键在于字典的大小。
①用户密码被重置。
②敏感目录、参数被枚举。
③用户订单被枚举。
① 如果用户登录次数超过设置的阈值,则锁定账号。
② 如果某个IP登陆次数超过设置的阈值,则锁定IP。但存在一个问题,如果多个用户使用的是同一个IP,则会造成其他用户也不能登录。
原理:应用未对用户输入做严格的检查过滤,导致用户输入的参数被当成命令来执行。攻击者可以任意执行系统命令,属于高危漏洞之一,也属于代码执行的范畴。
①继承web服务程序的权限去执行系统命令或读写文件。
②反弹shell,获得目标服务器的权限。
③进一步内网渗透。
①尽量不要使用命令执行函数。
②客户端提交的变量在进入执行命令函数前要做好过滤和检测。
③在使用动态函数之前,确保使用函数是指定的函数之一。
④对php语言而言,不能完全控制的危险函数最好不要使用。
开发人员将需要重复调用的函数写入一个文件,对该文件进行包含是产生的操作。这样编写代码能减少代码冗余,降低代码后期维护难度,保证网站整体风格统一:导航栏、底部footer栏等。文件包含函数加载的参数没有经过过滤或严格定义,可以被用户控制,包含其他恶意文件,导致了执行非预期代码。
①获取敏感信息
②执行任意命令
③获取服务器权限
①建议白名单。
②指定访问一定的路径,再将参数拼接到路径当中。
指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付等功能处。
任意密码修改、越权访问、密码任意找回、交易支付金额任意修改…
关于越权访问:越权访问漏洞产生主要原因是没有对用户的身份做判断和控制,防范这种漏洞时,可以通过session来控制。例如,在用户登录时,将username或uid写入到session中,当用户查看个人信息时,从session中取出信息,而不是从GET或POST取出username,name此时取到的username就是没有篡改的。
XXE漏洞(XML 外部实体注入),XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。
①读取任意文件。
②执行系统命令。
③探测内网端口。
④攻击内网网站。
①进制使用外部实体,例如:
PHP:libxml_disable_entity_loader(true)
②过滤用户提交的xml数据,防止出现非法内容。