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

成功登录到后台

+

网络渗透测试实训周笔记3.0相关推荐

  1. Kail Linux渗透测试实训手册第3章信息收集

    Kail Linux渗透测试实训手册第3章信息收集 信息收集是网络攻击最重要的阶段之一.要想进行渗透攻击,就需要收集目标的各类信息.收集到的信息越多,攻击成功的概率也就越大.本章将介绍信息收集的相关工 ...

  2. 记一次内网渗透测试实训总结

    原文连接 前言 时间很快就来到了学期的最后一个月,和上学期一样,最后的几周是实训周,而这次实训恰好就是我比较喜欢的网络攻防,因为之前学过相关的知识,做过一些靶场,相比于其他同学做起来要快些,不过内网渗 ...

  3. 【Linux_Kali网络渗透测试学习笔记总结(五)】社会工程学攻击

    网络渗透测试(五):社会工程学攻击 社会工程学时利用人性弱点体察,获取有价值信息的实践方法,它是一种欺骗的艺术.在缺少目标系统的必要信息时,社会工程学技术是渗透测试人员获取信息的至关重要的手段.对所有 ...

  4. 网络渗透测试实验三 XSS和SQL

    网络渗透测试实验三 XSS和SQL注入 实验目的:了解什么是XSS:思考防御XSS攻击的方法:了解SQL注入的基本原理:掌握PHP脚本访问MySQL数据库的基本方法:掌握程序设计中避免出现SQL注入漏 ...

  5. 【小迪安全】web安全|渗透测试|网络安全 | 学习笔记-终

    后续笔记仔细看了下,放出来铁过不了审核,等有时间一点点删了再放出来. [小迪安全]web安全|渗透测试|网络安全 | 学习笔记-8 已经被封了=.= 把目录写上,假装过审核了. 接下来是持续八天的-- ...

  6. 毕业论文开题报告 - 基于Linux的无线网络渗透测试研究

    目录 开题报告填写要求 1.毕业论文综述(题目背景.研究意义及国内外相关研究情况) 1.1 题目背景 1.2研究意义 1.3现阶段相关研究情况 2.本课题研究的主要内容和拟采用的研究方案.研究方法或措 ...

  7. 搭建渗透测试环境选自KaliLinux无线网络渗透测试教程

    第1章搭建渗透测试环境 许多提供安全服务的机构会使用一些术语,如安全审计.网络或风险评估.以及渗透测试.这些术语在含义上有一些重叠,从定义上来看,审计是对系统或应用的量化的技术评估.安全评估意为对风险 ...

  8. 带你了解无线网络渗透测试——无线网络嗅探工具Kismet

    如果要进行无线网络渗透测试,则必须先扫描所有有效的无线接入点.刚好在Kali Linux中,提供了一款嗅探无线网络工具Kismet.使用该工具可以测量周围的无线信号,并查看所有可用的无线接入点.本节将 ...

  9. 无线网络渗透测试(一)基础知识

    无线网络渗透测试这一板块文章,Evan将带给大家无线基础知识,如何监听WiFi,捕获并分析数据包,需要大家准备的实验环境是Linux kali,实验器材:无线网卡,实验工具:wirelessmon(点 ...

最新文章

  1. 颠覆性技术丨无人驾驶
  2. GitHub 标星 17 万:打破程序员“中年危机”的「编程面试大学」!
  3. Git搭建自己的网站服务器(Linux)
  4. xdeepfm算法思维导图与代码
  5. jdbc调用存储过程的方法
  6. lambda 分类聚合_使用Java 8 Lambda,流和聚合
  7. 如何查看Activity任务栈以及dumpsys_activity命令的简要使用及介绍
  8. CuteEditor 5.0 的使用
  9. Java常见OutOfMemoryError
  10. python 近期用到的基础知识汇总(主要是skimage的相关矩阵变化函数)(二)
  11. Comprehensive Python Cheatsheet
  12. 微软 Edge 浏览器被指共享隐私遥测数据
  13. Ubuntu之更新CMake的版本
  14. xstream-0 使用入门
  15. ubuntu MySQL-python 安装失败解决方法
  16. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_2_编码引出的问题_FileReader读取GBK格式文件...
  17. html渐变色原理,CSS渐变色效果的实现方法与效果演示
  18. 打算做知识付费,所有了解一下视频加密
  19. cad计算机配置要求,CAD对电脑硬件的配置要求
  20. 【DCANet2022】:DCANet: Differential Convolution Attention Network for RGB-D Semantic Segmentation

热门文章

  1. 传输层 SACK与选择性重传算法
  2. 以太网 TCP协议交互过程中出现丢包时的解决机制,超时重传、快速重传、SACK与DSACK
  3. Android persist类property 知识点
  4. 双向链表 建立和插入
  5. useCapture
  6. Must call super constructor in derived class before accessing or returning from derived const
  7. 基于PHP+MySQL的企业员工培训管理系统
  8. 23电工杯数学建模A题
  9. Microsoft Office Document Image Writer 和 Microsoft XPS Document Writer (Office组件轻松把PDF文件转成Word文档)...
  10. graphql_GraphQL简介