1.背景笔者从接触计算机开始就对网络安全产生了浓厚的兴趣。体验了这个扩展后,我发现它真的很好用;但是,当时我查了相关资料,发现关注这个扩展的人并不多;最近因为换了电脑,需要重新安装这个扩展,发现使用这个扩展的人还是比较少的,所以笔者把安装过程和测试结果记录下来,方便后续使用,也让更多开发者了解污点扩展。tainttaintextension的作者HuiXinchen曾经在他的博客上介绍过。参考文档:PHPTaint-Extension检测XSS/SQL/Shell注入漏洞的工具二、操作概述源码下载和编译Extension配置和安装功能检查和测试三、源码下载和编译TaintextensionPHP本身没有携带,我需要在linux或者mac系统下载源码自己编译安装3.1源码下载笔者的开发环境是mac系统,所以需要到PHPpecl扩展网站下载源码,其中taint的地址是:https://pecl.php.net/package/taint在扩展URL的末尾,可以看到一行下载地址。如下图,我需要选择一个合适的版本。我的开发环境使用的是PHP7.1,所以选择最新版本。对应的下载地址如下:https://pecl.php.net/get/taint-2.0.4.tgz使用wget下载源码,参考命令如下:wgethttps://pecl.php.net/get/taint-2.0.4.tgz笔者下载后需要解压,解压命令参考如下:tar-zxvftaint-2.0.4.tgz解压后进入目录,参考命令如下如下:cdtaint-2.0.43.2源码编译现在需要编译源码,编译前可以使用phpze检测PHP环境,参考命令如下:phpize返回结果如下配置为:PHPApiVersion:20160303ZendModuleApiNo:20160303ZendExtensionApiNo:320160303生成Makefile,为下一步编译做准备。/configure返回检查如何硬编码的结果程序库路径...立即检查是否可以剥离库...是检查libtool是否支持共享库...是检查是否构建共享库...是检查是否构建静态库...不创建libtoolappending配置标记“CXX”tolibtoolconfigure:creating./config.statusconfig.status:creatingconfig.h开始编译,并安装make&&makeinstall(cd.libs&&rm-ftaint.la&&ln-s../taint.lataint.la)/bin/sh/Users/song/taint-2.0.4/libtool--mode=installcp./taint.la/Users/song/taint-2.0.4/modulescp./.libs/taint.so/Users/song/taint-2.0.4/modules/taint.socp./.libs/taint.lai/Users/song/taint-2.0.4/modules/taint.la----------------------------------------------------------------库已安装在:/Users/song/taint-2.0.4/modules如果你碰巧想要链接到给定目录LIBDIR中已安装的库,你必须使用libtool,并指定库的完整路径名,或在链接期间使用“-LLIBDIR”标志并至少执行以下操作之一:-在执行期间将LIBDIR添加到“DYLD_LIBRARY_PATH”环境变量有关共享库的更多信息,请参阅任何操作系统文档,例如ld(1)和ld.so(8)手册页。---------------------------------------------------------------------构建完成。不要忘记运行“maketest”。安装共享扩展:/usr/local/Cellar/php71/7.1.14_25/lib/php/extensions/no-debug-non-zts-20160303/四、配置和安装编译扩展后,我还需要把Taint放进去指定位置,并修改配置文件使其生效4.1配置taint笔者首先需要知道PHP的配置文件,然后查看配置文件的扩展路径,将so文件放在对应的文件中。查看配置文件位置的命令如下:php--ini返回结果如下ConfigurationFile(php.ini)Path:/usr/local/etc/php/7.1LoadedConfigurationFile:/usr/local/etc/php/7.1/php.ini扫描额外的.ini文件:/usr/local/etc/php/7.1/conf.d额外的.ini文件解析:/usr/local/etc/php/7.1/conf.d/ext-opcache.ini可以看到php.ini放在/usr/local/etc/php/7.1/php.ini知道配置文件后,需要找到扩展文件夹的位置。参考命令如下:cat/usr/local/etc/php/7.1/php.ini|grepextension_dir命令执行结果如下,可以看到扩展文件夹的位置是/usr/local/lib/php/pecl/20160303extension_dir="/usr/local/lib/php/pecl/20160303";extension_dir="分机";确保正确设置extension_dir指令。;sql??ite3.extension_dir=4.2安装扩展现在我需要将扩展??文件复制到PHP中扩展文件的位置。参考命令如下:cp/usr/local/Cellar/php71/7.1.14_25/lib/php/extensions/no-debug-non-zts-20160303/taint.so/usr/local/lib/php/pecl/20160303/复制后需要编辑配置文件,将taint配置项复制到vim/usr/local/etc/php/7.1/php.ini中,将Tain配置项添加到php.ini文件中。参考配置如下:[taint]extension=taint.sotaint.enable=1taint.error_level=E_WARNING4.3安装结果验证通过后,保存配置文件并退出,说明笔者安装完成。现在需要重启php才能生效。参考命令如下brewservicesrestartphp@7.1重启完成后,可以通过命令查看PHP当前扩展是否有污点,参考命令如下:php-i|greptaint如果返回结果中有提示,则基本安装成功tainttaintsupport=>enabledtaint.enable=>On=>Onttaint.error_level=>2=>25.功能检查和测试,测试分为三个部分,首先使用taint作者的demo代码进行测试,然后使用渗透测试系统permeate进行测试,最后使用作者自己开发的代码进行测试。5.1demo文件测试demo文件测试的目的是检查作者安装的taint是否真的生效,确认taint是否有意义。5.1.1复制demo代码在作者的github上,有如下demo代码。笔者将其拷贝到web目录下,位置如下:/Users/song/mycode/safe/permeatedemo代码内容如下,读者实验时可以使用其拷贝:$action();返回真;}}在代码中作者看到一个require_once函数加载了文件,里面的参数使用了变量$model和$action。通过final变量source,在代码文件/Users/song/mycode/safe/permeate/home/router.php中发现这两个第一个参数确实没有被过滤,如下代码所示:
