19-php审计工具&常见php站点搭建、审计
1、安装fortify并以pikachu靶场为目标进行练习熟练使用fortify
-
安装fortify
第一步:安装exe文件

安装完成

第二步:复制fortify-common-23.2.0.0023
将fortify-common-23.2.0.0023.jar文件分别覆盖下面中文件
C:\安装的路径\Fortify\Fortify_Apps_and_Tools_23.2.0\Core\lib
C:\安装的路径\Fortify\Fortify_SCA_23.2.0\Core\lib第三步:更新规则
解压FortifyRules_zh_CH_2023.1.1.0001(离线规则库).zip 规则库
先删除C:\..\Fortify\Fortify_SCA_23.1.0\Core\config目录下的ExternalMetadata和rules文件夹,然后把解压的ExternalMetadata和rules文件夹拷贝到该目录下。第四步:运行
C:\..\Fortify\Fortify_Apps_and_Tools_23.1.0\bin下的auditworkbench.cmd 即可开启GUI界面,可以通过鼠标右键将该文件的快捷方式发送到桌面;
也可以在【开始】> 【Fortify_Apps_and_Tools_23.1.0】里点击Audit workench开启

安装完成

-
扫描pikachu靶场

2、安装并使用rips、seay工具对pikachu进行审计
-
rips
-
安装rips:下载rips源码文件https://sourceforge.net/projects/rips-scanner/files/,将文件放入web目录下,创建网站。

-
使用:
subdirs:扫描所有子目录。
verbosity level:选择扫描结果的详细程度,缺省为1(建议就使用1)。
vuln type:选择需要扫描的漏洞类型。⽀持命令注入、代码执行、SQL注⼊等⼗余种漏洞类型,缺
省为全部扫描。
code style:选择扫描结果的显示风格。
/regex/:使用正则表达式过滤结果。
-
扫描pikachu源码对应的路径,生成扫描结果如下:

-
-
seay
-
安装完成后。点击新建项目,打开pikachu源码

点击【自动审计】> 【开始】,软件开始运行分析整个项目

查看扫描结果

-
3、复习php代码审计函数精讲相关内容,重点是SESSION验证绕过、urldecode二次编码绕过、str_replace绕过
-
变量覆盖extract( )函数
extract() 函数会自动解析所有参数,并按照对应 key=value 的方式进行赋值,因此,当我们输入代码中预定义好的变量名时,变量的值会被覆盖。 -
intval特性绕过
intval( )函数可以获取变量的「整数值」。常用于强制类型转换。 -
多重加密
如:拿到token,需要经过base64解码->字符串解压缩->反序列化,如果知道最终结果,那么只需逆过程序列化->字符串压缩->base64加密,便可以解出token值。
-
SQL注入WITH ROLLUP绕过
SQL注入中的WITH ROLLUP绕过是一种利用分组聚合函数特性绕过查询结果限制的攻击手法。
-
ereg正则%00截断
ereg正则%00截断是PHP中一种利用空字符截断绕过正则匹配的安全漏洞,常见于旧版本PHP环境(ereg函数在PHP 5.3弃用,7.0移除) -
sha()函数比较绕过
sha()函数比较绕过是利用哈希值的类型转换漏洞和魔法哈希(Magic Hash)特性,绕过身份验证的攻击手段。 -
密码md5比较绕过
md5比较绕过是利用PHP弱类型在松散比较(==)时的类型转换漏洞,通过构造特定哈希值绕过身份验证的手法。 -
SESSION验证绕过
<?php $flag = "123456"; // 服务器返回的 flag session_start(); // 开启 session // 检查用户是否提交了 password 参数 if (isset($_GET['password'])) { if ($_GET['password'] == $_SESSION['password']) { die ('Flag: '.$flag); // 如果匹配,返回 flag } else { print '<p>Wrong guess.</p>'; } } // 生成一个随机的 session 密码 $_SESSION['password'] = mt_rand(1000, 9999);审计
if ($_GET['password'] == $_SESSION['password'])这行代码发现,只需要session中的password值和用户传的一样,就可以成功拿到flag。
又由于session值是依赖Cookie来传递Session ID,如果我们删除 Cookie 的PHPSESSID,服务器就无法找到对应的 Session 文件,导致$_SESSION['password']为空,这时我们同样传入空的password就能绕过了。因此payload为http://localhost//TEST/seession.php?password=
-
urldecode二次编码绕过
<?php // 简单的关键字hack过滤 if(strpos($_GET['id'],"hack") !== false) { echo("<p>not allowed!</p>"); exit(); } $_GET["id"] = urldecode($_GET["id"]); if($_GET["id"] == "hack") { echo "<p>Access granted!</p>"; echo "<p>flag: This is hack flag!!!} </p>"; } ?>审计
if(strpos($_GET['id'],"hack") !== false)代码发现会对hack关键字进行过滤,想要拿到flag就需要绕过第一次过滤,由于浏览器会进行一次url解码,审计代码$_GET["id"] = urldecode($_GET["id"]);发现也会url解码,自此造成二次编码,可以实现绕过。方法:将hack的第一字母
h经过两次url编码,第一次:%68,第二次:%25%68,构造payloadhttp://localhost//TEST/urldecode.php?id=%2568ack。当传入参数%25%68ack时,经过第一次解码变为%68ack绕过第一次strpos函数的过滤,第二次解码变为hack,验证成功拿到flag。
-
str_replace绕过
经常出现在字符过滤等功能逻辑中,由于仅仅过滤⼀次,因此容易被绕过。如:
..././filename>../filename实现绕过
4、搭建并部署微商城系统并结合课件审计复习sql注入漏洞、文件上传漏洞
-
环境搭建:
-
源码放入web目录下,搭建站点(PHP版本:5.3.29)
-
创建数据库mall,右击【mall数据库】> 【输入】选择文件类型,导入对应数据文件到数据库(注意:创建数据库时选择utf8_unicode_ci,以免出现后续导入失败,数据乱码的情况;导入数据文件时,在字符集下拉框选择UTF-8方式导入)

-
修改数据库链接文件:/Mao/common.php

-
实现访问(其中后台IP:mall.com/Mao_admin)

-
-
sql注入漏洞
-
api\data.php文件代码中,直接使用户提交的search参数并拼接到了sql语句中,造成sql注入漏洞。

同理goods.php文件中的
id参数存在sql注入漏洞
总结:均是未对用户输入的参数进行过滤处理,直接拿来拼接到sql语句中
-
-
文件上传漏洞
api\api.php文件中的代码没有过滤用户上传的文件,导致任意文件上传

5、搭建bluecms并分析sql宽字节注入漏洞原理
-
搭建bluecms
环境:BlueCMS v1.6 + Phpstudy pro(php5.3.29)
-
用小皮创建名为bluecms的站点(源码放入网站根目录下)

-
安装:访问http://bluecms/install/,根据导航一步步安装即可,但是最后⼀步会出现空白页面 ,找到install/index.php文件,注释文件下step5中的incude代码,即可解决。

安装完成

-
-
bluecms宽字节注入漏洞
-
代码审计
首先来到登录界面 admin/login.php包含了如下文件
/include/common.inc.php跟进。
common.inc.php中又包含了mysql.class.php文件,接着实例化了一个mysql对象为$db

继续跟进mysql.class.php文件,并找到实例化对象的所在mysql类。实例化这个mysql类的对象会自动调用构造函数,构造函数接收了数据库的连接信息参数后传入connect()函数,发现了使用gbk编码即可能存在宽字节注入。

在执行登录查询验证的时候,先进行了数据库连接,而数据库连接中设置了GBK编码

-
测试
输入
admin'的时候,发现会在单引号的前面加上\,变成了admin\即存在宽字节注入
这时我们只需利用宽字节注入,便可以进入后台
当输入值有%df'时,后台过滤会在单引号前加
\进行转义,但又因为数据库读取时用的GBK编码,会把\即%5c与%df合成汉字運从而实现单引号的逃逸,使得过滤失效,sql注入成功。
-

浙公网安备 33010602011771号