对VAuditDemo的一次审计

拿到代码,首先先观察index.php入口文件。

 1 <?php
 2 require_once(‘sys/config.php‘);
 3 require_once(‘header.php‘);
 4 ?>
 5 <div class="row">
 6     <?php
 7     /* Include */
 8     if (isset($_GET[‘module‘])){
 9         include($_GET[‘module‘].‘.inc‘);
10     }else{
11     ?>
12     <div class="jumbotron" style="text-align: center;">
13         <h1><b>VAuditDemo</b></h1>
14         <p>一个简单的Web漏洞演练平台</p><br />
15     </div>
16     <div class="col-lg-12">
17         <h2>用於演示講解PHP基本漏洞</h2>
18         <p></p>
19     </div>
20     <?php
21     }
22     ?>
23 </div>
24
25 <?php
26 require_once(‘footer.php‘);
27 ?>
1 if (isset($_GET[‘module‘])){
2          include($_GET[‘module‘].‘.inc‘);
3  }

首先这段代码是判断是否设置了变量module,如果设置了改变量就去包含$module.ini

因此去构造payload:

 127.0.0.1/index.php?module=1.txt);#

按道理应该会变成:

include(1.txt);# . ‘.inc‘);

#后面的全部会被注释,但是并没有成功的去包含1.txt文件。(感觉此处的确存在漏洞但是没有利用成功!)

紧接着发现文件包含了两个文件

sys/config.php   header.php

剩下的是一些html源码

Header发现全部都是html的源码直接跳过。

去观察sys/config.php这个配置文件,毕竟配置文件比较敏感!

 1 <?php
 2
 3 error_reporting(0);
 4
 5 if (!file_exists($_SERVER["DOCUMENT_ROOT"].‘/sys/install.lock‘)){
 6     header("Location: /install/install.php");
 7     exit;
 8 }
 9
10 include_once($_SERVER["DOCUMENT_ROOT"].‘/sys/lib.php‘);
11
12 $host="localhost";
13 $username="root";
14 $password="root";
15 $database="vauditdemo";
16
17 $conn = mysql_connect($host,$username,$password);
18 mysql_query(‘set names utf8‘,$conn);
19 mysql_select_db($database, $conn) or die(mysql_error());
20 if (!$conn)
21 {
22     die(‘Could not connect: ‘ . mysql_error());
23     exit;
24 }
25
26 session_start();
27
28 ?>

首先设置了一个关闭错误显示

 error_reporting(0);

一般的话,需要白盒审计的时候需要把错误回显打开,易与观察函数错误提示,易于调试漏洞!

方法:error_reporting(E_ALL);
 1 <?php
 2
 3 date_default_timezone_set(‘UTC‘);   #首先先定义了时区
 4
 5 if( !get_magic_quotes_gpc() ) {     #判断是是否开启了魔术引号转义,若果没有就调用自己定义的sec()去转义。
 6     $_GET = sec ( $_GET );
 7     $_POST = sec ( $_POST );
 8     $_COOKIE = sec ( $_COOKIE );
 9 }
10 $_SERVER = sec ( $_SERVER );        #所有调用server的全局数据进行sec()转义
11
12 function sec( &$array ) {
13     if ( is_array( $array ) ) {      #用is_array()判断接受的$array是否为数组,如果是就循环遍历数组中的值,直到array中的值变成字符串或者数字
14         foreach ( $array as $k => $v ) {
15             $array [$k] = sec ( $v );
16         }
17     } else if ( is_string( $array ) ) {  #判断是否为字符串,如果是字符串就执行addslashes()函数进行转义
18         $array = addslashes( $array );
19     } else if ( is_numeric( $array ) ) { #判断是否为数字,如果位数字就用intval转为整形。
20         $array = intval( $array );
21     }
22     return $array;
23 }
24
25 function sqlwaf( $str ) {                #自己定义的waaf字符串替换函数,此处有可能去绕过!
26     $str = str_ireplace( "and", "sqlwaf", $str );
27     $str = str_ireplace( "or", "sqlwaf", $str );
28     $str = str_ireplace( "from", "sqlwaf", $str );
29     $str = str_ireplace( "execute", "sqlwaf", $str );
30     $str = str_ireplace( "update", "sqlwaf", $str );
31     $str = str_ireplace( "count", "sqlwaf", $str );
32     $str = str_ireplace( "chr", "sqlwaf", $str );
33     $str = str_ireplace( "mid", "sqlwaf", $str );
34     $str = str_ireplace( "char", "sqlwaf", $str );
35     $str = str_ireplace( "union", "sqlwaf", $str );
36     $str = str_ireplace( "select", "sqlwaf", $str );
37     $str = str_ireplace( "delete", "sqlwaf", $str );
38     $str = str_ireplace( "insert", "sqlwaf", $str );
39     $str = str_ireplace( "limit", "sqlwaf", $str );
40     $str = str_ireplace( "concat", "sqlwaf", $str );
41     $str = str_ireplace( "\\", "\\\\", $str );
42     $str = str_ireplace( "&&", "", $str );
43     $str = str_ireplace( "||", "", $str );
44     $str = str_ireplace( "‘", "", $str );
45     $str = str_ireplace( "%", "\%", $str );
46     $str = str_ireplace( "_", "\_", $str );
47     return $str;
48 }
49
50 function get_client_ip(){
51     if ($_SERVER["HTTP_CLIENT_IP"] && strcasecmp($_SERVER["HTTP_CLIENT_IP"], "unknown")){
52         $ip = $_SERVER["HTTP_CLIENT_IP"];
53     }else if ($_SERVER["HTTP_X_FORWARDED_FOR"] && strcasecmp($_SERVER["HTTP_X_FORWARDED_FOR"], "unknown")){
54         $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
55     }else if ($_SERVER["REMOTE_ADDR"] && strcasecmp($_SERVER["REMOTE_ADDR"], "unknown")){
56         $ip = $_SERVER["REMOTE_ADDR"];
57     }else if (isset($_SERVER[‘REMOTE_ADDR‘]) && $_SERVER[‘REMOTE_ADDR‘] && strcasecmp($_SERVER[‘REMOTE_ADDR‘], "unknown")){
58         $ip = $_SERVER[‘REMOTE_ADDR‘];
59     }else{
60         $ip = "unknown";
61     }
62     return($ip);
63 }
64
65 function clean_input( $dirty ) {
66     return mysql_real_escape_string( stripslashes( $dirty ) );
67 }
68
69 function is_pic( $file_name ) {
70     $extend =explode( "." , $file_name );
71     $va=count( $extend )-1;
72     if ( $extend[$va]==‘jpg‘ || $extend[$va]==‘jpeg‘ || $extend[$va]==‘png‘ ) {
73         return 1;
74     }
75     else
76         return 0;
77 }
78
79 function not_find( $page ) {
80     echo "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1>
81         <p>The requested URL ".$page." was not found on this server.</p></body></html>";
82 }
83 ?>
时间: 2024-11-04 17:36:09

对VAuditDemo的一次审计的相关文章

ABP官方文档翻译 4.6 审计日志

审计日志 介绍 关于IAuditingStore 配置 通过特性启用/禁用 注意事项 介绍 维基百科:“审计追踪(也称为审计日志)是与安全相关的按时间先后的记录.记录集合.记录的目的地和源,提供一系列活动的纪实证据,这些活动可能在任何时刻影响一个特定操作.过程或事件.” ABP提供了基础设施自动记录应用所有的交互.它可以记录方法调用的调用者和参数. 基本上,保存的字段有:相关的tenant id,调用者user id,调用者service name(调用方法的类),调用者method name,

数据库内置审计功能

作为一名dba,有时候,总会遇到数据库某个库,某个表,某个字段异常,或者数据被莫名的删除了,这个时候大家各种推断是不是bug了啊,是不是被黑了啊...这个时候一个审计功能就凸显出来了. mariadb数据库对审计插件(server_audit.so)支持比较良好,今天我们进行一个简单安装和测试 安装方法也很简单:INSTALL SONAME "server_audit.so" 这样就安装完成了,我们可以看看对应的参数变量 这些参数和变量都是可以动态设置的,具体参数说明,见官网:http

SQL Server 审计功能-记录所有的操作记录

SQL Server 审计-记录所有的操作记录 说到审计这个话题,相信作为一个企业管理员都知道,比如一般作为一个AD管理员的话,一般都会通过Policy开启审计功能,记录一些自定义的事务日志.对于SQL Server来说,审计也是一样的,SQL Server审计对象收集单个实例的服务器或数据库级的动作和行为监控组. 审计是在SQL Server实例级. 可以有多个审计/ SQL服务器实例.当你定义一个审计,你指定位置的输出结果. 这是审计目标. 审计是在创建的禁用状态,不会自动审计任何行动. 启

0816关于MySQL的审计 init-connect+binlog实现用户操作追踪

转自:http://blog.sina.com.cn/s/blog_605f5b4f01013xkv.html mysql 用init-connect+binlog实现用户操作追踪 做access 的ip的log 记录 在MYSQL中,每个连接都会先执行init-connect,进行连接的初始化.我们可以在这里获取用户的登录名称和thread的ID值.然后配合binlog,就可以追踪到每个操作语句的操作时间,操作人等.实现审计. 实验过程:1:创建登录日志库,登录日志表 CREATE DATAB

Kafka端到端审计

概述 Kafka端到端审计是指生产者生产的消息存入至broker,以及消费者从broker中消费消息这个过程之间消息个数及延迟的审计,以此可以检测是否有数据丢失,是否有数据重复以及端到端的延迟等. 目前主要调研了3个产品: Chaperone (Uber) Confluent Control Center(非开源,收费) Kafka Monitor (LinkedIn) 对于Kafka端到端的审计主要通过: 消息payload中内嵌时间戳timestamp 消息payload中内嵌全局index

使用Trigger审计一张表的DML操作

最近ogg的灾备端复制进程中的一张表老是报错ORA-04031,但是又查不到原因,于是想用审计的方法来看到底这张表是被谁做了DML操作,把数据搞没了.本来想用数据库自带的审计功能参考:http://hbxztc.blog.51cto.com/1587495/1870181 但是需要重启数据库,就放弃了,上网查资料看到有人用触发器来实现这个功能,于是自己也做了尝试. 平台11.2.0.4 [email protected]>select * from v$version; BANNER -----

mariadb操作审计

mariadb可以启用审计插件来对数据库的各种操作进行审计,以防运维背锅! 启用MariaDB的审计插件,并调整相关参数 MariaDB [(none)]> show variables like '%audit%'; Empty set (0.02 sec) 安装MariaDB审计插件 MariaDB [(none)]> INSTALL PLUGIN server_audit SONAME 'server_audit'; Query OK, 0 rows affected (0.41 sec

mysql审计插件设置

1.create database auditdb use auditdb 2.create table accesslog(ID int primary key auto_increment,ConnectionID int,ConnUser varchar(30),MatchUser varchar(30),LoginTime datetime) 3.保证所有连接用户对此表有写入权限 insert into mysql.db(Host,Db,User,Insert_priv) values

MySQL日志审计 帮你揪出内个干坏事儿的小子

MySQL日志审计 帮你揪出内个干坏事的小子 简介 Part1:写在最前 MySQL本身并不像MariaDB和Percona一样提供审计功能,但如果我们想对数据库进行审计,去看是谁把我的数据库数据给删了,该怎么办呢?我们主要利用init-connect参数,让每个登录的用户都记录到我们的数据库中,并抓取其connection_id(),再根据binlog就能够找出谁干了那些破事儿. MariaDB如何审计,可移步: http://suifu.blog.51cto.com/9167728/1857