limit后的注入点(Extractvalue语句用来返回报错信息)

2022-07-29,,,,

首先,看一下标准的select语句

SELECT
    [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr [, select_expr ...]
    [FROM table_references
    [WHERE where_condition]
    [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
    [HAVING where_condition]
    [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [PROCEDURE procedure_name(argument_list)]
    [INTO OUTFILE 'file_name' export_options
      | INTO DUMPFILE 'file_name'
      | INTO var_name [, var_name]]
    [FOR UPDATE | LOCK IN SHARE MODE]]

在limit后有注入点,则有两种可能,因为limit后只有PROCEDURE和INTO语句,因此考虑PROCEDURE语句的注入。MySQL默认可用的存储过程只有 ANALYSE;
一般注入会用到Extractvalue语句,这个语句是用来查询xml文件信息,有两个参数;
语法:extractvalue(目标xml文档,xml路径)
第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容(数据库里的内容显示出来),而这个非法的内容就是我们想要查询的内容。
查询时候,只要第二个参数的位置格式为 /xxx/xx/xx/xx ,即使查询不到也不会报错;

concat(var1,var2,...//连接两个或多个字符串

扩展:(在爆破数据库时,这些字段可以用来爆库、爆表、爆字段(列))

select schema_name
select table_name
select column_name

本文地址:https://blog.csdn.net/qq_37735779/article/details/108984368

《limit后的注入点(Extractvalue语句用来返回报错信息).doc》

下载本文的Word格式文档,以方便收藏与打印。