SQL ingect
方法:测试' " and+1=2
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。 一个严重的SQL注入漏洞,可能会直接导致一家公司破产! SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞: 1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入; 2.使用参数化(Parameterized Query 或 Parameterized Statement); 3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
XSS
方法:见框就插!
跨站脚本(Cross-Site Scripting,XSS/CSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是 由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括 HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶 意代码,对受害者可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
CSRF
方法: get post Token
跨站请求伪造
Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。 很多人搞不清楚CSRF的概念,甚至有时候会将其和XSS混淆,更有甚者会将其和越权问题混为一谈,这都是对原理没搞清楚导致的。
场景需求:
小黑想要修改大白在购物网站tianxiewww.xx.com上填写的会员地址。
先看下大白是如何修改自己的密码的:
登录---修改会员信息,提交请求---修改成功。
所以小黑想要修改大白的信息,他需要拥有:1,登录权限 2,修改个人信息的请求。
但是大白又不会把自己xxx网站的账号密码告诉小黑,那小黑怎么办?
于是他自己跑到www.xx.com上注册了一个自己的账号,然后修改了一下自己的个人信息(比如:E-mail地址),他发现修改的请求是:
【http://www.xxx.com/edit.php?email=xiaohei@88.com&Change=Change】
于是,他实施了这样一个操作:把这个链接伪装一下,在小白登录xxx网站后,欺骗他进行点击,小白点击这个链接后,个人信息就被修改了,小黑就完成了攻击目的。
为啥小黑的操作能够实现呢。有如下几个关键点:
1.www.xxx.com这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造;
---因此,我们判断一个网站是否存在CSRF漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造。
2.小白点击了小黑发给的链接,并且这个时候小白刚好登录在购物网上;
---如果小白安全意识高,不点击不明链接,则攻击不会成功,又或者即使小白点击了链接,但小白此时并没有登录购物网站,也不会成功。
---因此,要成功实施一次CSRF攻击,需要“天时,地利,人和”的条件。
当然,如果小黑事先在xxx网的首页如果发现了一个XSS漏洞,则小黑可能会这样做: 欺骗小白访问埋伏了XSS脚本(盗取cookie的脚本)的页面,小白中招,小黑拿到小白的cookie,然后小黑顺利登录到小白的后台,小黑自己修改小白的相关信息。
---所以跟上面比一下,就可以看出CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。
因此,网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:
--对敏感信息的操作增加安全的token;
--对敏感信息的操作增加安全的验证码;
--对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。
SSRF
方法:curl( file_get_contents( fsockopen(
**Server-Side Request Forgery:服务器端请求伪造**
其形成的原因大都是由于服务端**提供了从其他服务器应用获取数据的功能**,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。
RCE
RCE(remote command/code execute)
即远程命令/代码执行。可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台
系统。RCE分为远程命令执行ping和远程代码执行evel。
在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比
如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代
码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。
命令执行
方法:
应用程序有时需要调用一些执行系统命令的函数、如在PHP中,使用system、exec、shell_exec、 passthru、popen、proc_popen等函数可以执行系统命令。当黑客能控制这些函数中的参数时,就可 以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。 RCE 分成两种:
-
代码执行
-
命令执行
文件上传
方法:上传码图
在现代互联网的web应用程序中,上传文件是一种常见的功能,因为它有助于提高业务效率,比如社交 网站中,允许用户上传图片、视频、头像和许多其他类型的文件。然而向用户提供的功能越多,web应 用受到攻击的风险就越大,如果web应用存在文件上传漏洞,那么恶意用户就可以利用文件上传漏洞将 可执行脚本程序上传到服务器中,获取网站的权限,或者进一步危害服务器。 为什么文件上传存在漏洞? 上传文件时,如果服务器代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意 文件的情况,包括上传脚本文件(asp、aspx、php、jsp等格式的文件)。 会造成什么危害? 非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又称之 为webshell,也可将webshell脚本称为一种网页后门,webshell脚本具有强大的功能,比如查看服务器 目录,服务器中的文件,执行系统命令等。
LFI RFI
方法:include(),include_once(),require(),require_once()这些函数导致的
本地文件包含 Local File Include (LFI) 所包含文件内容符合PHP语法规范,任何扩展名都可以被PHP解析。 所包含文件内容不符合PHP语法规范,会暴露其源代码(相当于文件读取)。
远程文件包含 Remote File Include (RFI) 如果要使用远程包含功能,首先需要确定PHP是否已经开启远程包含功能选项(php默认关闭远程包含 功能:allow_url_include=off),开启远程包含功能需要在php.ini配置文件中修改。 远程包含与本地包含没有区别,无非是支持远程加载,更容易getshell,无论是哪种扩展名,只要遵循 PHP语法规范,PHP解析器就会对其解析。
XXE
方法:xml数据,抓包看是否传xml文件
XXE(XML External Entity Injection) XML外部实体注入。
如果我们传输的XML数据,没有做严格校验,导致了注入了非法的/能造成损害的 外部实体 =》 XXE漏洞
重点: XML 外部实体 注入 这三部分搞清楚
要想对XXE相关的概念没有盲点,必须了解掌握XML的结构
第一部分: 声明版本以及编码之类
第二部分: 可能会存在DTD(这部分是重点)
DTD里面包含<!ELEMENT>
<!ENTITY>
重点关注实体:ENTITY
内部实体:了解即可
外部实体:重点关注 =》 SYSTEM | PUBLIC
第三部分: 正常的标签(元素)
反序列化
方法:unserialize()
序列化,将数据结构或对象转换成二进制串的过程。 反序列化,将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
常见的几个魔法函数:
__construct()当一个对象创建时被调用__destruct()当一个对象销毁时被调用
__toString()当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup将在序列化之后立即被调用
漏洞举例:class S{
var $test = "pikachu";
function __destruct(){
echo $this->test;
}
}
$s = $_GET['test'];
@$unser = unserialize($a);payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
变量覆盖
方法:
变量覆盖漏洞是指攻击者使用自定义的变量去覆盖源代码中的变量,从而改变代码逻辑,实现攻击目的
的一种漏洞。通常来说,单独的变量覆盖漏洞很难有利用价值,但是在与其他应用代码或漏洞结合后,
可能会有很大的影响。
越权漏洞
方法:
越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,被OWASP列为Web应用十大安全隐患的第二名。
该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致越权漏洞。
此外越权属于逻辑漏洞。
什么是逻辑漏洞呢?
之所以称为逻辑漏洞,是因为代码之后是人的逻辑,人更容易犯错,是编写完程序后随着人的思维逻辑产生的不足。sql注入、xss等漏洞可以通过安全框架等避免,这种攻击流量非法,对原始程序进行了破坏,防火墙可以检测,而逻辑漏洞是通过合法合理的方式达到破坏,比如密码找回由于程序设计不足,会产生很多问题,破坏方式并非向程预防思路。
逻辑漏洞主要包括:
越权,未授权,验证码绕过,支付,密码找回等等
未授权访问
方法:
未授权:在未认证的前提下去做了不该做的事情。
越权: 在认证的前提下做了不该做的事情。
认证:登录
未授权访问是系统对用户限制不全,或者无限制,可以让任意用户或者限制访问用户,访问到需要权限
认证的地址。未授权访问通常是会泄露用户信息,系统信息。某些服务和系统中,未授权访问还可以执
行系统命令,操作系统文件,导致系统的整体安全遭到破坏。
验证码漏洞
方法:登录和注册
验证码的作用:防止机器人
验证码通常出现在:登录/注册
如果出现在登录:防止爆破
如果出现在注册:防止恶意注册
验证码(CAPTCHA)是"Completely Automated Public Turing test to tell Computers and Humans Apart'"(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式,我们利用比较简易的方式实现了这个功能。这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAP工CHA的问题,所以回答出问题的用户就可以被认为是人类。验证码五花八门,有中文字,纯数字,点击字符、数学运算…