0
点赞
收藏
分享

微信扫一扫

网络渗透测试实训周笔记3.0

1.代码审计概念

  • 代码审计,是对应用程序源代码进行系统性检查的工作。目的是为了找到并且修复应用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给企业带来不必要的风险。
  • 代码审计不是简单的检查代码,审计代码的原因是确保代码能安全的做到对信息和资源进行足够的保护,所以熟悉整个应用程序的业务流程对于控制潜在的风险是非常重要的。

代码审计入门基础:html/js基础语法、PHP基础语法 ,面向对象思想,PHP小项目开发(Blog、注册登录、表单、文件上传、留言板等),Web漏洞挖掘及利用,Web安全工具基本使用(burpsuite、sqlmap等),代码审计工具(seay审计系、zendstudio+xdebug等)                                                 

代码审计两种基本方式

(1) 通读全文源码:通读全文发作为一种最麻烦的方法也是最全面的审计方法。特别是针对大型程序,源码成千上万行。当然了解整个Web应用的业务逻辑,才能挖掘到更多更有价值的漏洞。

(2) 功能点审计:根据漏洞对应发生函数进行功能行审计,常会用到逆向溯源数据流方法进行审计。

代码审计两种基本方法: 

(1)正向追踪数据流:跟踪用户输入参数 -> 来到代码逻辑 -> 最后审计代码逻辑缺陷 -> 尝试构造payload

(2) 逆向溯源数据流:字符串搜索指定操作函数 -> 跟踪函数可控参数 -> 审计代码逻辑缺陷 -> 尝试构造payload

2.代码审计环境

PHP源码部署环境:Phpstudy

集成开发环境:Zend Studio/Phpstorm

数据库管理工具:Navicat for MySQL

MySQL实时监控工具:MySQLMonitor

文本编辑工具:Sublime_Text3

代码审计辅助工具:Seay源代码审计系统、Rips

代码审计辅助安全工具:渗透版火狐、BurpSuite、Sqlmap

3.危险函数及关键字

SQL注入 select 、update、 insert into 、delete

(注:此处非函数,主要找常用的SQL语句)

本地文件包含

  • include() 向上包含,向下包含,如果包含出错继续向下执行
  • include_once() 同上,只进行包含一次
  • require() 向上包含,向下包含,如果包含出错不下向下执行
  • require_once() 同上,只进行包含一次

命令执行: system() 、exec() 、passthru()、 shell_exec()

XSS跨站脚本攻击: print、 print_r 、echo、 printf、die 、var_dump、 var_export

文件上传漏洞: move_uploaded_file()

文件下载: fopen() readfile() file_get_contents()

任意文件删除: unlink()

反序列化漏洞: unserialize()

4.代码审计工具

  1. RIPS(1)RIPS 是一个用 PHP 编写的源代码分析工具,它使用了静态分析技术,能够自动化地挖掘 PHP 源代码潜在的安全漏洞。渗透测试人员可以直接容易的审阅分析结果,而不用审阅整个程序代码。由于静态源代码分析的限制,漏洞是否真正存在,仍然需要代码审阅者确认。RIPS 能够检测 XSS, SQL 注入, 文件泄露, Header Injection 漏洞等。

RIPS官网:http://rips-scanner.sourceforge.net/ 下载完之后将该压缩包解压到本地网站的根目录下,然后在浏览器 localhost/Rips(你解压的文件名字)/就可以进去了。如下图:

(2).subdirs:如果勾选上这个选项,会扫描所有子目录,否则只扫描一级目录,缺省为勾选。 (3).verbosity level:选择扫描结果的详细程度,缺省为1(建议就使用1)。

(4).vuln type:选择需要扫描的漏洞类型。支持命令注入、代码执行、SQL注入等十余种漏洞类型,缺省为全部扫描。

(5).code style:选择扫描结果的显示风格(支持9种语法高亮)。

(6)./regex/:使用正则表达式过滤结果。

(7).path/file: 要扫描的目录。

(8).scan: 开始扫描。 

在path/file中输入需要扫描源码的目录, 其他使用默认设置,点击scan:扫描结果如下:

2.Seay源代码审计系统

是由国人开发的一款基于白盒测试的代码审计工具,具有自动代码审计功能。支持一件审计,代码调试,函数定位,自定义审计规则等强大功能。可以简化人工审计的繁琐流程,使代码审计更加智能简洁。

目前作者官网已不能访问,可以从如下地址下载:https://github.com/f1tz/cnseay 程序使用C# 编写,须要.NET2.0以上版本环境才能运行。 直接运行“Seay源代码审计系统.exe”即可安装,安装完直接运行,如下图所示:

 点击“新建项目”按钮新建一个审计项目。选择需要扫描的源码所在目录。 打开一个审计项目后,可以看到审计系统左侧列出了该项目的全部源代码文件,点击“自动审计”按钮进入审计操作。

 点击“自动审计”操作下的“开始”按钮,正式进入审计过程并等待审计扫描完成。

 当Seay源代码审计系统底部提示“扫描完成”时,点击“生成报告”生成本次审计报告并保存报告生成的html文件。

通常我们可以直接在审计工具里双击漏洞所在的行,跳转到相应文件审计。 

会高亮显示漏洞所在的行,后面就是需要人工来判断漏洞是否确实存在。

5. 测试环境搭建

 以熊海CMS1.0为例我们来进行实例审计,CMS下载地址:https://zdown.chinaz.com/201503/xhcms_v1.0.rar 为了复现我们审计出的漏洞,首先搭建熊海CMS站点测试环境。 此CMS运行需要的环境:php+mysql+apache,注意这里php版本需要5.x 这里使用phpstudy 2018来搭建,把压解的熊海CMS源码,复制到WWW目录下。 在切换版本里选择php-5.2.17+Apache

开启apache和mysql服务。 通过自带的MySQL管理器,这里使用MySQL-Front 登录进mysql,新建一个数据库xhcms

 

访问如下链接来安装http://127.0.0.1/xhcms/install/ ,确认提交后可以看到安装成功 

 

 6. CMS代码审计实战分析

开始审计 先查看一下网站的文件目录结构,了解一下大概文件夹的功能作用。

入口文件:index.php、main.php文件一般是整个程序的入口.

从中可以知道: 程序的架构 |、运行流程 、包含哪些配置文件、 包含哪些过滤文件和安全过滤文件 了解程序的业务逻辑

配置文件:一般类似config.php等文件,保存一些数据库相关信息,程序的一些信息。 先看数据库编码,如果是GBK可能存在宽字节注入。 若变量的值用双引号,则可能存在双引号解析代码执行的问题。 此CMS的配置文件为:inc/conn.php

过滤功能:通过详细读公共函数文件和安全过滤文件等文件,清晰掌握: 用户输入的数据,哪些被过滤,哪些无过滤如何过滤。在哪里被过滤了。 如何过滤,过滤的方式是替换还是正则,能否绕过过滤的数据。 

文件包含漏洞 首先就从网站入口index.php跟进,发现是一个单入口模式:

 介绍文件包含截断的2种方法

第一种是使用%00截断,但是php>5.3以后就不能使用了,开启了GPC的情况下也是不能使用的,因为此CMS这里用了addslashes函数同样不能使用。

第二种是点号截断:

 1.Windows下在文件名字后面加 “.” 不影响文件。

2.Windows的文件名的全路径(Fully Qualified File Name)的最大长度为260字节。但是这个是有利用条件的,在测试过程中, 发现必须同时满足 php版本=5.2.17、Virtual Directory Support=enable,这个在我们phpstudy2018搭建的环境里满足。

此CMS后台存在上传功能可以上传图片,通过上传写有php代码的图片文件,通过包含漏洞可以使我们的代码运行。 这里为了方便直接在此CMS根目录的upload\image\20150321目录,新建一个内容为<?php echo phpinfo();?> 的test.jpg文件,模拟上传的图片文件。

下面来构造利用poc,利用“../”来跳出限制的“/files”目录,跳到CMS根目录,然后再拼接成../upload/image/20150321/test.jpg 然后我们再利用点号截断来截断代码中.php后缀 最终poc如下:http://127.0.0.1/xhcms/index.php?r=../upload/image/20150321/test.jpg........................................................................................................................................................................................................

XSS漏洞

 从上面代码里我们看到139行 echo $page 直接输出$page内容,如果$page内容可控,并且没有过滤的话,就存在漏洞 从扫描工具显示的结果中可以看到$page变量来自外界输入,只是用addslashes做了过滤(过滤不全)

构造利用POC,如下如果POC里存在双引号,代码不能执行,会被转义 http://127.0.0.1/xhcms/index.php?r=contact&page=<script>alert("test")</script>

 把双引号修改成如下,代码可以成功执行 http://127.0.0.1/xhcms/index.php?r=contact&page=<script>alert(/test/)</script>

 SQL注入漏洞

扫出如下文件存在问题 File: /xhcms/files/content.php

 从上面代码可以看到,第20行$id并没有被单引号包裹 向上追溯看$id可以看到其值来自cid的赋值,cid是可控的,并且只是用了addslashes做过滤,单引号(‘)、双引号(“)、反斜线(\)与 NUL(NULL 字符)经过这个 addslashes函数后会在他们前面加上反斜线。这里是整型注入, addslashes对利用没有影响。

构造利用POC 先使用报错利用代码,获取数据名如下 http://127.0.0.1/xhcms/index.php?r=content&cid=1 and updatexml(1,concat(0x7e,(select database()),0x7e),1)

 使用sqlmap利用获取当前数据库名 python sqlmap.py -u "http://127.0.0.1/xhcms/index.php?r=content&cid=1" -p cid  --current-db

 业务逻辑漏洞-后台登录绕过

自动化代码安全审计往往无法查找业务相关的漏洞,比如支付漏洞、任意密码重置,优惠券叠加等。在了解代码和业务的基础上,来进行人工审计。 在进入到管理员首页时,首先会检测是否是登录的状态,漏洞代码位置:/xhcms/inc/checklogin.php 下面我们看下checklogin.php代码

判断登录的状态是通过截取cookie中user字段的值来判断是否进行了登录。如果COOKIE中user参数为空,那么就跳转到登陆的地方。如果修改user字段不为空,就会成功登录到后台。显然,这种写法是有缺陷的。

 我们来利用此漏洞来登录后台,访问如下地址,使用burp拦截 http://127.0.0.1/xhcms/admin/index.php 在cookie里添加;user=1

 成功登录到后台

 

                                                                                                               +

 

举报

相关推荐

实训周笔记

实训周记(4.18)

实训笔记7.19

实训笔记6.5

实训二 网络测试常用命令

网络渗透测试

网络渗透笔记

0 条评论