web漏洞总结
分析平台:看他攻击流量应该返回什么东西,去检查返回页面,有的话就是攻击成功,没有就没成功
Table of Contents
1.sql注入
原理:通过浏览器把恶意的SQL语句传递给数据库,数据库执行恶意SQL语句的过程。
利用:先判断是否存在sql注入,通过页面回显的内容,进行不同方式的注入。
常见的注入方式:
1.union 联合查询
2.Boolean 型注入
3.报错注入
4.延时注入
5.二次注入
6.宽字节注入
7.cookie注入
8.万能密码
9.堆叠注入
10.文件读写
加固方式
1.严格规定传递数据的数据类型,限制数据长度
2.过滤敏感字符,对特殊字符进行转译
3.使用PreparedStatement(预编译)对SQL语句进行预编译
4.使用成熟的waf
5.限制访问数据库的权
6.文件读写my.ini文件secure_file_priv=''配置
2.xss
原理:向web页面插入恶意的script代码,用户浏览网页时,script代码执行,从而达到攻击者的目的。xss分为存储型、反射性、DOM型
利用:用户的输入可以回显到网页中,常见的有评论,留言,url,个人信息,搜索框等,用户输入可能在不用的标签中,可以查看页面源码
参考:xss利用方式 XSS – hello网安
加固方法:
1.字符过滤:对用户输入的数据进行关键字、大小写过滤,将特殊符号进行转译
2.html编码:对用户的输出进行html编码,将其转化为实体
3.cookie:设置cookie的HTTP Only属性,js就不能获取cookie信息了
4.尽量不要使用危险函数。
3.文件上传
原理:通过网页中上传文件功能将文件上传至服务器,比如头像上传、图片上传等,当后端对用户上传文件的格式和内容不做处理,攻击者就可以利用漏洞上传恶意文件,达到上传webshell后门文件的目的。
利用方式:绕过过滤的关键字,上传恶意文件或者是图片马
加固方式
1.前端校验,js检测后缀
2.后端禁用非法后缀名
3.Content-Type检测过滤
4.getimagesize()函数检测是否的正常的图片大小
5.图片二次渲染
6.文件重命名
4.文件包含
原理:后端代码文件中常常会有包含文件,如果这个包含的文件来源用户可以控制,且过滤不严,从而可以包含恶意文件达到攻击者目的
利用方式
1.JSP页面的文件包含:
函数:java.io.file()、java.io.filereader()、include
2.ASPX页面的文件包含:
函数:include file、include virtual
3.PHP页面的文件包含:
函数:include(),require(),include_once(),require_once(),fopen(),readfile()
include和require的区别是include报错仍然执行下面语句,require报错停止执行
远程文件包含的限制条件
allow_url_fopen ON
allow_url_include ON
被包含的变量前没有目录限制
文件包含伪协议
1.文件读取类:
file:// 读取本地文件
php://filter/read=convert.base64-encode/resource=xxx.php 读取php文件内容并将内容通过base64编码显示出来
2.命令执行类:
php://input post中写入一句话
data://text/plain,<一句话>
data://text/plain;base64,base64编码一句话
3.远程包含类:
http:// https://
ftp:// ftps://
4.日志包含:
/usr/local/apache/logs/access_log apache日志路径
/var/log/ngnix/access.log ngnix日志路径
加固方法
1.白名单过滤
5.命令执行
原理:通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。
利用:通常与文件上传一起使用,上传一句话通过命令执行达到目的。
php危险函数:
eval()
assert()
preg_replace()# 正则表达式/e
call_user_func()
call_user_func_arry()
create_function
array_map()
系统命令:
system()
passthru()
exec()
shell_exec()
popen()
``
ob_start()
加固方法
1.过滤危险函数
2.过滤命令拼接符
3.尽量减少命令执⾏函数的使⽤,并在disable_functions中禁⽤
4.在进⼊命令执⾏的函数或⽅法之前,对参数进⾏过滤
6.csrf(跨站请求伪造)
原理:攻击者盗取受信任用户的身份(比如cookie信息),伪装成受信任用户来发送合法请求,但该合法请求是为了完成攻击者的而已目的。
利用:在存在CSRF漏洞处构造链接,在链接里写入攻击代码,诱导已登录的用户点击。
加固方法
1.对敏感信息的操作增加安全的token;
2.对敏感信息的操作增加安全的验证码;
3.对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等
7.ssrf(服务端请求伪造)
原理:由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
利用
1. 可以对外⽹、服务器所在内⽹、本地进⾏端⼝扫描,获取⼀些服务的 banner 信息
2. 攻击运⾏在内⽹或本地的应⽤程序(⽐如溢出)
3. 对内⽹ WEB 应⽤进⾏指纹识别,通过访问默认⽂件实现
4. 攻击内外⽹的 web 应⽤,主要是使⽤ GET 参数就可以实现的攻击(⽐如 Struts2,sqli 等), 6379 redis 未
授权
5. 利⽤ file 协议读取本地⽂件
加固方法
1.限制协议,仅允许http和https请求。
2.限制IP,避免应用被用来获取内网数据,攻击内网。
3.限制端口,限制请求的端口为http 常用的端口,例如80 443 8080 8090
4.过滤返回信息验证,远程服务器对请求的响应是比较简单的方法。
5.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态
8.解析漏洞
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
原理:服务器默认不解析;后面的内容
Apache解析漏洞
1.文件名解析:
形式:/test.php.abc.def
原理:apache是从右往左解析文件的,如果后缀名不可识别,就再往左判断。.abc和.def都是不可解析的,则apache会把test.php.abc.def解析为test.php。
2.配置:
.htaccess文件配置
Ngnix解析漏洞
1.%00空字节截断:
形式:/1.jpg%00.php
原理:00截断
9.JAVA反序列化
原理:序列化即是把对象转变为字节流,存放在内存、文件数据库中,而反序列化即是把字节流转变为对象。在java中有一个ObjectOutputStream类的writeobject方法可以实现序列化,而ObjectInputStream类的Readobject方法可以实现反序列化。该漏洞的原因出自于如果应用对恶意构造的用户输入的数据进行反序列化,这样就会产生非预期的对象,从而有可能产生远程代码执行。或者应用中存在可以在反序列化过程中或者之后被改变行为的类,则攻击者可以通过改变应用逻辑或者实现远程代码执行攻击。我们将其称为对象和数据结构攻击。
加固方法
1:不接受来自不受信源的序列化对象,或使用只允许原始数据类型的序列化媒体。
2:反序列化之前,先进行严格的数据类型校验。由于校验规则容易被攻击者探索出来,进而容易被绕过,因此防御不能仅依赖这一个手段,但可以作为完整性校验防御方案的补充。
3:隔离运行那些在低特权环境中反序列化的代码。
4:对反序列化过程进行详尽的日志记录,监控反序列化过程,在发现疑似反序列化攻击时进行警报。