PHP Taint - 一个用来检测XSS/SQL/Shell注入漏洞的扩展。从PHP语言层面去分析,找出一些可能的注入漏洞代码。
下面会演示如何安装。由于php的版本升级较快,现在已经升级到8.0的版本。PHP taint在7.3的情况下可以顺利的安装和运行。

php扩展下载

首先,我们来到php taint的下载地址,下载最新版本的taint。
https://pecl.php.net/package/taint
image.png
https://pecl.php.net/get/taint-2.1.0.tgz

系统沿用

我们找一个pikachu的靶场来做taint的改造。首先,我们先启动一个pikachu。来到/app的网站目录。

root@ubuntu:~# docker run -itd —name “taint” -p 80:80 -p 3306:3306 area39/pikachu af7d758177a205b7e38431f9051f3c54e18c0cbc3ee57f3edcd7979b0ca12891

root@ubuntu:~# docker exec -it af7 /bin/bash root@af7d758177a2:/#

image.png
丢一个phpinfo();的文件在/app的目录里,让我们可以在外面可以访问到。
image.png
外部看到的效果。
image.png
下载,并解压,然后进入目录:
image.png
wget https://pecl.php.net/get/taint-2.1.0.tgz
tar -xzvf taint-2.1.0.tgz
cd taint-2.1.0


phpize

先用phpize编译该模块目录,如果成功,我们就可以用场配置,编译等命令。
但此时此刻,我们会发现我们的系统里么有phpize这个命令。所以,我们下一个开发版来看下。
image.png
apt install php7.3-dev

image.png
提升错误,安不上去。(核心安装方法,现场指导。:))
image.png
直接版本降级后再安装。
apt install php7.3-dev


编译taint并配置

进入到taint的目录,然后进行编译。
image.png
./configure
make &&make install
image.png
配置PHP,使之加载taint。
image.png
image.png

由于之前我们对phpinfo的信息的了解,我们知道:
image.png
extension_dir 的位置就是对的。
cp zip.ini taint.ini
对taint.ini进行修改如下:
image.png
phpenmod taint 使之生效。
打开php.ini,设置下面的内容:

[taint] extension=taint.so taint.enable=1 taint.error_level=E_WARNING

重启apache服务。

/etc/init.d/apache2 restart


打开phpinfo页面看看效果:

image.png
成功在php7.3下面安装好了taint。

注意

测试的时候,记得遇到打开:
image.png
###附录

A. 验证的字符串
所有来自GET,GET,_POST, $_COOKIE的变量, 都被认为是Tainted String

B. taint检测的函数/语句列表, 当这些函数使用tainted string参数的时候, taint会给出警告:

  1. 输出函数/语句系列
    echo
    print
    printf
    file_put_contents
  2. 文件系统函数
    fopen
    opendir
    basename
    dirname
    file
    pathinfo
  3. 数据库系列函数/方法
    mysql_query
    mysqli_query
    sqlite_query
    sqlite_single_query
    oci_parse
    Mysqli::query
    SqliteDataBase::query
    SqliteDataBase::SingleQuery
    PDO::query
    PDO::prepare
  4. 命令行系列
    system
    exec
    proc_open
    passthru
    shell_exec
  5. 语法结构
    eval
    include(_once)
    require(_once)
    C. 消除tainted信息的函数, 调用这些函数以后, tainted string就会变成合法的string:

escapeshellcmd
htmlspecialchars
escapeshellcmd
addcslashes
addslashes
mysqli_escape_string
mysql_real_escape_string
mysql_escape_string
sqlite_escape_string
PDO::quote
Mysqli::escape_string
Mysql::real_escape_string
D. 调用中保持tainted信息的函数/语句, 调用这些函数/语句时, 如果输入是tainted string, 则输出也为tainted string:

=
.
“{$var}
.=
strval
explode
implode
sprintf
vsprintf
trim
rtrim
ltrim