本文最后更新于:2019 , 八月 19日 星期一, 1:05 下午
扯淡
瞎搞了2个小时,盘Sql注入,发现有一个php文件可能存在
结果看到被函数过滤了,在这里求助了九世
说该处只有在GBK编码的情况下,才能进行注入绕过
九世测试了下,发现一个搜索型的注入
而我,则是发现一处注入结果在最后绕不过列表名的转义
总结:总有一天我要砍代码九条街
过程
刚刚学习代码注入,就从大局把握开始审计学习
index.php
require_once('sys/config.php');
require_once('header.php');
发现它开头包含了两个文件,我们进行跟进
config.php
error_reporting(0);
if (!file_exists($_SERVER["DOCUMENT_ROOT"].'/sys/install.lock')){
header("Location: /install/install.php");
exit;
}
include_once('../sys/lib.php');
对文件进行了判断,然后包含了lib.php
文件
lib.php
在该文件中,我们发现有一个自定义的sql注入过滤函数
function sqlwaf( $str ) {
$str = str_ireplace( "and", "sqlwaf", $str );
$str = str_ireplace( "or", "sqlwaf", $str );
$str = str_ireplace( "from", "sqlwaf", $str );
$str = str_ireplace( "execute", "sqlwaf", $str );
$str = str_ireplace( "update", "sqlwaf", $str );
$str = str_ireplace( "count", "sqlwaf", $str );
$str = str_ireplace( "chr", "sqlwaf", $str );
$str = str_ireplace( "mid", "sqlwaf", $str );
$str = str_ireplace( "char", "sqlwaf", $str );
$str = str_ireplace( "union", "sqlwaf", $str );
$str = str_ireplace( "select", "sqlwaf", $str );
$str = str_ireplace( "delete", "sqlwaf", $str );
$str = str_ireplace( "insert", "sqlwaf", $str );
$str = str_ireplace( "limit", "sqlwaf", $str );
$str = str_ireplace( "concat", "sqlwaf", $str );
$str = str_ireplace( "\\", "\\\\", $str );
$str = str_ireplace( "&&", "", $str );
$str = str_ireplace( "||", "", $str );
$str = str_ireplace( "'", "", $str );
$str = str_ireplace( "%", "\%", $str );
$str = str_ireplace( "_", "\_", $str );
return $str;
}
然而,该处的过滤函数存在着问题
$str = str_ireplace( "&&", "", $str );
$str = str_ireplace( "||", "", $str );
$str = str_ireplace( "'", "", $str );
利用这三个问题转义,我们可以成功绕过一些被该函数转义的关键字
例如:unio||n
,selec&&t
该文件下方,还定义了一个clean_input
函数进行过滤
function clean_input( $dirty ) {
return mysql_real_escape_string( stripslashes( $dirty ) );
}
其他的页面被该函数过滤了,绕了我好久都没绕过
我们此处可以进行全局搜索sql语句,进行注入(找到了过滤的,查看下能够进行sql注入)
Ps:千万不要和我一样一直盘一个地方,要多尝试
此处,我们的语句:select *
messageDetail.php
if ( !empty( $_GET['id'] ) ) {
$id = sqlwaf( $_GET['id'] );
$query = "SELECT * FROM comment WHERE comment_id = $id";
$data = mysql_query( $query, $conn ) or print_r(mysql_error());
此处并没有过滤就执行了,不过该注入点在留言板中,所以你需要一个留言
由于该出我们并不需要进行闭合,直接进行注入即可(盲注,延时注入)
id=1 an&&d if((1=2),1,500)
我这的靶场可能有点问题,所以这里的图暂时放不了,有空补上
搜索型注入
这里就交给九世了
https://422926799.github.io/2019/02/01/VAuditDemo-shooting-range-message-search-injection/