利用PHP扩展Taint找出网站的潜在安全漏洞实践

news/2024/5/14 7:37:00/文章来源:https://blog.csdn.net/u013431141/article/details/81738042

一、背景

笔者从接触计算机后就对网络安全一直比较感兴趣,在做PHP开发后对WEB安全一直比较关注,2016时无意中发现Taint这个扩展,体验之后发现确实好用;不过当时在查询相关资料时候发现关注此扩展的人数并不多;最近因为换了台电脑,需要再次安装了此扩展,发现这个扩展用的人还是比较少,于是笔者将安装的过程与测试结果记录下来,方便后续使用同时也让更多开发者来了解taint

taint扩展作者惠新宸曾经在自己的博客上有相关介绍,参考文档:PHP Taint – 一个用来检测XSS/SQL/Shell注入漏洞的扩展

二、操作概要

  1. 源码下载与编译
  2. 扩展配置与安装
  3. 功能检验与测试

三、源码下载与编译

Taint扩展PHP本身并不携带,在linux或mac系统当中笔者需要下载源码自己去编译安装

3.1 源码下载

笔者的开发环境是mac系统,所以需要去PHP的pecl扩展网站去下载源码,其中taint的地址为:

https://pecl.php.net/package/taint

在扩展网址的的尾部,可以看到有一排下载地址,如下图

image

笔者需要选择一个自己合适的版本,笔者的开发环境使用的是PHP7.1,因此选择了最新的版本,对应下载地址如下:

https://pecl.php.net/get/taint-2.0.4.tgz

使用wget下载该源码,参考命令如下:

wget https://pecl.php.net/get/taint-2.0.4.tgz

下载下来之后,笔者需要解压,解压命令参考如下:

tar -zxvf taint-2.0.4.tgz

解压之后,进入目录,参考命令如下:

cd taint-2.0.4

3.2 源码编译

现在笔者需要编译一下源码,在编译之前可以使用phpze来探测PHP的环境,参考命令如下:

phpize

返回结果如下

Configuring for:
PHP Api Version:         20160303
Zend Module Api No:      20160303
Zend Extension Api No:   320160303

生成 Makefile,为下一步的编译做准备

./configure 

返回结果

checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... nocreating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h

开始编译,并安装

make && make install
(cd .libs && rm -f taint.la && ln -s ../taint.la taint.la)
/bin/sh /Users/song/taint-2.0.4/libtool --mode=install cp ./taint.la /Users/song/taint-2.0.4/modules
cp ./.libs/taint.so /Users/song/taint-2.0.4/modules/taint.so
cp ./.libs/taint.lai /Users/song/taint-2.0.4/modules/taint.la
----------------------------------------------------------------------
Libraries have been installed in:
   /Users/song/taint-2.0.4/modulesIf you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `DYLD_LIBRARY_PATH' environment variable
     during executionSee any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------Build complete.
Don't forget to run 'make test'.Installing shared extensions:     /usr/local/Cellar/php71/7.1.14_25/lib/php/extensions/no-debug-non-zts-20160303/

四、配置与安装

在编译扩展之后,笔者还需要把Taint放到指定位置,以及修改配置文件让其生效

4.1 配置taint

笔者首先需要知道PHP的配置文件是多少,然后通过查看配置文件的扩展路径,才能把so文件放到对应里面去,查看配置文件位置命令如下:

php --ini

返回结果如下

Configuration File (php.ini) Path: /usr/local/etc/php/7.1
Loaded Configuration File:         /usr/local/etc/php/7.1/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d
Additional .ini files parsed:      /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 | grep extension_dir

命令执行结果如下,笔者可以看出扩展文件夹位置是 /usr/local/lib/php/pecl/20160303

extension_dir = "/usr/local/lib/php/pecl/20160303"
; extension_dir = "ext"
; Be sure to appropriately set the extension_dir directive.
;sqlite3.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.so
taint.enable=1
taint.error_level=E_WARNING

4.3 安装结果验证

保存配置文件并退出之后,则代表笔者的安装已经完成,现在需要重启一下php让其生效,参考命令如下

brew services restart php@7.1

重启完成之后,可以通过命令查看PHP当前的扩展有没有Taint,参考命令如下:

php -i | grep taint

返回结果如果出现了一下信息,基本上已经安装成功。

taint
taint support => enabled
taint.enable => On => On
taint.error_level => 2 => 2

五、功能检验与测试

完成上面的两步操作之后,笔者安装阶段已经大功告成了,现在笔者需要用taint来检验效果,检验分为三部分,首先用taint作者的demo代码进行检验,之后用渗透测试系统permeate来检验,最后以笔者平时所开发的代码进行测试。

5.1 demo文件测试

用demo文件测试的目的是检验笔者安装的taint是否真的已经生效,并确认taint有没有意义。

5.1.1 复制demo代码

在作者的GitHub上面有下面的这样一份demo代码,笔者将其复制到web目录,位置如下:

/Users/song/mycode/safe/permeate

demo代码内容如下,读者实验时可以将其拷贝:

<?php
$a = trim($_GET['a']);$file_name = '/tmp' .  $a;
$output    = "Welcome, {$a} !!!";
$var       = "output";
$sql       = "Select *  from " . $a;
$sql      .= "ooxx";echo $output;print $$var;include($file_name);mysql_query($sql);

5.1.2 配置虚拟主机

当代码文件保存之后,笔者需要在nginx配置文件中增加一个虚拟主机,用于浏览器访问此文件,参考配置如下:

    server {listen       80;server_name  test.localhost;root  /Users/song/mycode/safe/permeate;location / {index index.html index.htm index.php; }location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}}

5.1.3 浏览器访问

接着笔者通过浏览器访问对应代码文件,URL地址如下:

http://test.localhost/taintdemo.php?a=1

浏览器访问页面之后,笔者能在页面中看到一些警告信息,内容如下:

Warning: main() [echo]: Attempt to echo a string that might be tainted in /Users/song/mycode/work/test/taintdemo.php on line 10
Welcome, 1 !!!
Warning: main() [print]: Attempt to print a string that might be tainted in /Users/song/mycode/work/test/taintdemo.php on line 12
Welcome, 1 !!!
Warning: main() [include]: File path contains data that might be tainted in /Users/song/mycode/work/test/taintdemo.php on line 14Warning: include(/tmp1): failed to open stream: No such file or directory in /Users/song/mycode/work/test/taintdemo.php on line 14Warning: include(): Failed opening '/tmp1' for inclusion (include_path='.:/usr/local/Cellar/php@7.1/7.1.19/share/php@7.1/pear') in /Users/song/mycode/work/test/taintdemo.php on line 14Fatal error: Uncaught Error: Call to undefined function mysql_query() in /Users/song/mycode/work/test/taintdemo.php:16 Stack trace: #0 {main} thrown in /Users/song/mycode/work/test/taintdemo.php on line 16

从警告信息当中可以看出,笔者的taint已经生效,给出了很多警告提示,提示参数可能受到污染,因为参数并没有经过任何过滤;

5.1.4 参数过滤测试

如果不想让taint给出警告提示,可以将demo代码中的第二行代码更改或增加一下过滤规则,参考代码如下:

$a = htmlspecialchars($_GET['a']);

再次回到浏览器当中,刷新当前页面,可以看到返回的信息已经发生了变化,返回内容如下

Welcome, 1 !!!Welcome, 1 !!!
Warning: include(/tmp1): failed to open stream: No such file or directory in /Users/song/mycode/work/test/taintdemo.php on line 15Warning: include(): Failed opening '/tmp1' for inclusion (include_path='.:/usr/local/Cellar/php@7.1/7.1.19/share/php@7.1/pear') in /Users/song/mycode/work/test/taintdemo.php on line 15Fatal error: Uncaught Error: Call to undefined function mysql_query() in /Users/song/mycode/work/test/taintdemo.php:17 Stack trace: #0 {main} thrown in /Users/song/mycode/work/test/taintdemo.php on line 17

因为笔者在代码中增加了参数转义,此时再次刷新浏览器,会看到taint不再给发出警告提醒。

5.2 渗透测试系统验证

用demo系统验证taint扩展生效之后,现在笔者将用一个渗透测试系统来做一个实验,在这个系统中本身存在了很多安全问题,使用taint来找出这些问题,使用的渗透测试系统为 permeate渗透测试系统,地址如下

笔者之前有写过一篇文章介绍此系统,参考文档:WEB安全Permeate漏洞靶场挖掘实践

https://git.oschina.net/songboy/permeate

5.2.1 下载permeate

笔者通过git将其源码下载下来,参考命令如下

https://gitee.com/songboy/permeate.git

下载下来之后,同样创建一个虚拟主机,可以参考上面的nginx配置

5.2.2 导入数据库

因为这个系统会用到数据库,所以笔者下载之后需要新建数据库给permeate使用

image

新建完成数据库之后,笔者需要将一些数据表结构以及初始化数据导入到数据库当中,在使用git下载下来之后,在其跟目录有一个doc的文件夹,笔者打开它之后,能看到有一个sql文件,如下图所示

image

打开此文件并将其里面的内容复制,将复制的内容到管理数据库的Navicat Premium当中,然后执行这些SQL语句,如下图所示
image

5.2.3 修改配置文件

导入数据库完成之后,笔者修改数据库配置文件,让permeate能够连接次数据库,配置文件在根目录 conf/dbconfig.php,里面的配置代码如下,将其地址账户以及密码和数据库名称一一对应填写

<?php!defined('DB_HOST') && define('DB_HOST','127.0.0.1');!defined('DB_USER') && define('DB_USER','root');!defined('DB_PASS') && define('DB_PASS','root');!defined('DB_NAME') && define('DB_NAME','permeate');!defined('DB_CHARSET') && define('DB_CHARSET','utf8');$sex=array('保密','男','女');$edu=array('保密','小学','初中','高中/中专','大专','本科','研究生','博士','博士后');$admins=array('普通用户','管理员')

5.2.4 验证安装结果

设置好数据库之后,笔者安装permeate便已经完成了,此时打开首页,看到的界面应该如下图所示:
image
如果在首页当中没有看到板块以及分区等信息,很有可能是数据库没有连接成功或者数据库没有正确导入数据所致。

5.2.5 挖掘漏洞

下面开始进行测试,笔者点击第一个板块SQL注入,并点击列表下发的下一页按钮,此时看到的页面如下图所示:
image
在这个板块列表页中没看到任何问题,但是实际上taint已经给笔者发出了警告提醒。

笔者可以通过查看源代码时候来看到这些问题,如下图所示,taint提示在代码文件 /Users/song/mycode/safe/permeate/core/common.php的50行,存在参数被污染的情况。

image

5.2.5 漏洞分析

笔者找到对应的代码位置,发现代码内容如下:

function includeAction($model, $action)
{//判断控制器是否存在$filePath = "./action/$model.php";if (is_readable($filePath)) {require_once $filePath;$class = new $model;if (is_callable(array($class, $action))) {$class->$action();return true;}}

在代码中笔者看到有一个require_once函数加载了文件,里面的参数使用了变量 $model$action ,通过最终变量来源,在代码文件/Users/song/mycode/safe/permeate/home/router.php发现这两个参数确实没有经过过滤,如下代码所示:

<?php
require_once "/core/common.php";
$model = !empty($_GET['m']) ? $_GET['m'] : 'index';
$action = !empty($_GET['a']) ? $_GET['a'] : 'index';includeAction("$model","$action");

最后需要提醒大家,Taint在开发环境安装即可,不要安装到生产环境当中,否则可能会把网站的安全问题直接暴露给攻击者。


作者:汤青松

日期:2018年08月16日

微信:songboy8888

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_792441.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速找出网站中可能存在的XSS漏洞实践(一)

一、背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程&#xff0c;课程当中有讲到XSS的挖掘方式&#xff0c;所以在录制课程之前需要做大量实践案例&#xff0c;最近视频已经录制完成&#xff0c;准备将这些XSS漏洞的挖掘过程记录下来&#xff0c;方便自己也方便…

通过Web安全工具Burp suite找出网站中的XSS漏洞实战(二)

一、背景 笔者6月份在慕课网录制视频教程XSS跨站漏洞 加强Web安全,里面需要讲到很多实战案例&#xff0c;在漏洞挖掘案例中分为了手工挖掘、工具挖掘、代码审计三部分内容,手工挖掘篇参考地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016…

通过代码审计找出网站中的XSS漏洞实战(三)

一、背景 笔者此前录制了一套XSS的视频教程&#xff0c;在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完&#xff0c;内容有一些关联性&#xff0c;其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践…

通过代码审计找出网站中的XSS漏洞实战(三)

一、背景 笔者此前录制了一套XSS的视频教程&#xff0c;在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完&#xff0c;内容有一些关联性&#xff0c;其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践…

阿里云快速网站搭建详解

一、网站建站流程 主要步骤: 要有一个域名购买主机要有数据库,一般购买主机赠送解析域名下载网站程序(演示用的WordPress)上传程序安装程序(配置数据库、网站基本信息、管理员信息等)二、DNS服务器快速入门 DNS服务概述 DNS(Domain Name System)域名系统,在TCP/IP 网…

网易易盾推出政企网站安全方案 主打主动治理、防篡改

今天&#xff0c;网站已经成为企业、政府、教育等机构必备的“生产资料”&#xff0c;它是信息展示、服务提供、营销宣传以及企业形象的重要渠道。然而&#xff0c;如此重要的对外窗口&#xff0c;在今天仍遭受连绵不绝的网站篡改等安全事件。 网页篡改是指恶意破坏或更改网页内…

VS2012 发布网站步骤

VS2012中发布网站的方式与以往有了不同&#xff0c;前面的版本发布如图 而2012点publish的时候弹出框有所不同&#xff0c;这边需要新建一个profile名字随便起&#xff0c;发布的方式有好几种&#xff0c; 当然不同的方式配置不同&#xff0c;用的最多的就是files system了 选择…

在Github上搭建自己的博客网站

程序员都应该有写博客的习惯&#xff0c;博客可以作为知识管理&#xff0c;提升自己。当然写博客的地方有很多&#xff0c;CSDN&#xff0c;博客园以及新浪&#xff0c;网易等等。但是如果使用Github Pages来搭建一个有自己域名的独立网站&#xff0c;会不会更加炫酷呢&#xf…

使用七牛云存储在网站中进行图片外链

在CSDN中写博客&#xff0c;如果想在文章中插入一张图片&#xff0c;其实是非常简单的&#xff0c;只要从你本机进行图片选择&#xff0c;然后选择上传&#xff0c;图片就会上传到CSDN的服务器&#xff0c;到时候在文章显示的时候就会读取该图片。但是如果是在自己的搭建的网站…

使用百度统计对网站进行流量分析和统计

在自己建立一个网站后&#xff0c;最关心的问题就是到底有多少人访问了我的网站&#xff0c;也就是我的网站的流量到底是多少。以此可以不断进行完善和优化。这里将会使用百度的两个统计工具&#xff1a;百度统计和百度站长来进行分析。以我自己的建立的基于Hexo博客网站 : htt…

按钮制作网站收集

As Button Generator is the Button Generator 网站地址&#xff1a;http://jirox.net/AsButtonGen/ FlashButton.com free Animated Flash Buttons Menu Generator 网站地址&#xff1a;http://www.flashbuttons.com/ Da Button Factory Create pretty buttons online, quickl…

Logo在线制作网站收集

Supalogo - create nice logo 简单的Logo在线生成器 网站地址&#xff1a;http://supalogo.com/ 效果&#xff1a; 网站预览图&#xff1a; 说明一点就是&#xff0c;该网站也支持中文&#xff0c;日文等等。不过格式只有一两种。 Logo Ease -Free Logo Design Logo Ease…

0days最好的破解网站

best 0days ,0days,crack,patch,keymaker,keygen,bbl,download Search result!不知道有没有人知道这个东西&#xff0c;号称最好的破解&#xff0c;补丁&#xff0c;序列号生成等等之类的。网站地址&#xff1a; http://0days.51cc.net/

歌词搜索网站收集

LRC123 LRC歌词搜索引擎 网站地址&#xff1a;http://www.lrc123.com 飞叶歌词网 -全球最大中文LRC歌词搜索引擎 网站地址&#xff1a;http://lrc.aspxp.net 歌词搜索的网站蛮多的&#xff0c;LRC123网站不错。

图片特效制作网站收集

3D-box maker 3d-box & package on-line for free 网站地址&#xff1a;http://3d-pack.com / 效果图&#xff1a; Preloaders.net | Free AJAX animated loading gifs | 3 dimensional (3D) 三维进度条、Load图案制作 网站地址&#xff1a;http://preloaders.net / 缩略…

11个超棒的iOS开发学习网站

我相信&#xff0c;要想从一个"还不错"的人变成一个卓越的人&#xff0c;我们需要不停地向他人学习&#xff0c;同时还得尽早地适应最新的技术和工具。除了苹果官方文档网站之外&#xff0c;列举了一些能获取有价值的文章和资源的网站&#xff0c;这些网站能够帮助我…

mysql is null 性能_「isnull」MySql数据库的优化-MySql中is NULL、ISNULL()和IFNULL()运行速度的比较 - seo实验室...

isnull在查询过程中&#xff0c;我们经常用到非空和is null的查询&#xff0c;为了更高效的查询&#xff0c;我们应该知道那种方法更快。在上一篇中&#xff0c;我们已经添加了一些数据。根据这些数据我们就可以来做一些验证。第一步&#xff0c;is NULL要比ISNULL()的比较SELE…

modelandview跳转页面404_404页面对网站SEO有什么影响?小看它可能让你吃大亏

前两天有个朋友找到我&#xff0c;让我帮他看一下他的网站关键词排名为什么突然暴跌&#xff0c;后来在检查原因的时候才发现&#xff0c;原来是他把404页面给去除了。在他将404页面恢复之后&#xff0c;许多关键词又重新有了一定的排名。因此在做网站SEO优化的时候也不要忽略了…

微软法国一网站被黑

微软法国的网站&#xff1a; http://experts.microsoft.fr/被黑&#xff0c;我这里现在无法访问。据黑客称&#xff0c;他来自土耳其&#xff0c;下一个目标就是microsoft.com。看截图&#xff1a;

速卖通关键词挖掘工具_利用SEO工具挖掘同行竞争对手关键词数据快速布局网站词库...

工欲善其事必先利其器&#xff0c;这句话告诉我们&#xff0c;善用工具&#xff0c;往往会起到很好的效果。对于SEO来说&#xff0c;做排名有很多方面的工作&#xff0c;这其中网站内容是非常重要的部分。而网站内容是围绕关键词的布局而展开。所以一个网站的关键词布局&#x…