PHPTaint-檢測xss/sqli/shell注入的php擴展模塊[轉]

web滲透者習慣採用黑盒或灰盒的方面來檢測一款web應用是否存在漏洞,這種檢測方法能夠屏蔽很多漏洞,特別是程序邏輯中的漏洞。但若是能配合白盒的源碼審計(也能夠叫漏洞挖掘),效果將會更好,固然人力成本也會增長,其中,對於源碼審計工做將交給誰作,是比較爭議的話題,是開發、測試仍是安全人員呢?php

我的以爲,開發若能作一下粗略的源碼自查,而後安全(弱沒有安全人員,就交給白盒測試人員)負責作總體的源碼審查,將是極好的安排。html

除了人力成本,還有一個信任的問題,是否願意將源碼開放給安全人員?這比較敏感,但從技術角度來看,掌握源碼審計的技巧是很是棒的加分點。mysql

本篇文章將介紹兩種開源的PHP源碼審計工具,其中Taint適合開發源碼自查,RIPS適合安全源碼審查。web

1、Taintsql

一、介紹shell

php taint一個用於檢測xss/sqli/shell注入的php擴展模塊,做者博客apache

原理,檢查某些關鍵函數(是否直接使用(沒有通過過濾或轉義處理)了來自$_GET,$_POST,$_COOKIE的數據,如使用則給出提示。vim

可用於php源碼審計,對快速定位漏洞有幫助安全

二、安裝網絡

第一步:下載安裝taint
wget http://pecl.php.net/get/taint-1.2.2.tgz (下載最新的taint
tar zxvf taint-1.2.2.tgz 
cd taint-1.2.2

phpize(若是找不到該命令,須要apt-getinstall php5-dev)

./configure

make

make install

第二步:修改php.ini配置文件,使其支持taint模塊

vim /etc/php5/apache2/php.ini 
增長
extension=/usr/lib/php5/20090626+lfs/taint.so
taint.enable=1

display_errors = On

error_reporting = E_ALL & ~E_DEPRECATED

apache2ctl restart

注意:只能在開發環境開啓該擴展

第三步:測試該模塊是否開啓

vim phpinfo.php
<?php
phpinfo();
?>

wps_clip_image-11020[4]

如上圖所示,則表示成功開啓該擴展

三、測試(以DVWA 爲主要測試對象)

實例1:sql注入漏洞

       $user = $_GET['username'];
       $pass = $_GET['password'];
       $pass = md5($pass);
       $qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
       $result =mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' );

運行頁面,警告信息以下所示

Warning: mysql_query(): SQL statement contains data that might be tainted in /var/www/dvwa/vulnerabilities/brute/source/low.php on line 11

若是PHP源碼使用如下函數,則不會發出警告

mysql_real_escape_string (不轉義%與_)
stripslashes
is_numeric

實例2:命令執行漏洞

<?php
if( isset( $_POST[ 'submit' ] ) ) {
   $target = $_REQUEST[ 'ip' ];
// Determine OS and execute the ping command.
if (stristr(php_uname('s'), 'Windows NT')) {
       $cmd = shell_exec( 'ping  ' . $target );
       echo '<pre>'.$cmd.'</pre>';
} else {
       $cmd = shell_exec( 'ping  -c 3 ' . $target );
       echo '<pre>'.$cmd.'</pre>';
}
}
?>

運行頁面,警告信息以下所示

Warning: shell_exec(): CMD statement contains data that might be tainted in /var/www/dvwa/vulnerabilities/exec/source/low.php on line 15

實例3:文件包含漏洞(常伴隨着目錄遍歷漏洞)

<?php
$file=$_GET['file'];
include($file);
?>

運行頁面,警告信息以下所示

Warning: include(): File path contains data that might be tainted in /var/www/dvwa/vulnerabilities/fi/index.php on line 35

實例4:xss漏洞

<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . $_GET['name'];
echo '</pre>';
}
?>

運行頁面,警告信息以下所示

wps_clip_image-18363[4]

實例5:代碼執行eval

<?php
$cmd=$_GET['cmd'];
eval("$cmd;");
?>

wps_clip_image-29204[4]

實例6:文件讀取操做

<?php
print "<h2>Number 3: file()  functions: </h2>";
$path=$_GET['path'];
$contents=file($path);
foreach ($contents as $line_num => $line){
echo "Line #<b>{$line_num}</b> : ".htmlspecialchars($line). "<br>\n";
}
?>

wps_clip_image-18569[4]

2、RIPS

Taint能夠在運行時提醒開發,未過濾參數帶來的危害。而集中性的PHP源碼安全審計工做仍是交給RIPS比較友好。 咱們將上面的實例代碼使用該工具檢查,報告以下所示

wps_clip_image-159[9]

上圖顯示了該工具找到了7種安全漏洞,效果不錯。

PHP源碼審計是個很成熟的問題了,網絡上有很多詳細介紹如何作源碼審計的資料,也開源了很多源碼審計工具,感謝這些信息分享的人。

相關文章
相關標籤/搜索