简单的SQL注入学习
引贴:
http://blog.163.com/lucia_gagaga/blog/static/26476801920168184648754/
首先需要编写一个php页面,讲php页面放入/opt/lampp/htdocs目录下:
解释一下这个页面:
1.通过if语句判断变量是否初始化
2.if语句中通过mysql_connect()函数连接数据库
3.连接数据库成功后,选择一个数据库
4.选择完数据库后执行一条mysql查询
5.进行查询结果的处理
6.使用echo讲查询结果输出,便于查看
接下来配置数据库mululu_testdb,创建users表,并且造数据
然后使用 sql 语句取到指定的记录 参数从浏览器传入
取到的记录显示在指定的位置 效果就酱紫:
先来看看 and 注入和 or 注入:
再来看看加法注入和减法注入:
以上就是最简单的 SQL 注入示例;
通过传入人为构造的参数 取得本来拿不到的数据;
如果要攻击数据库 最起码要知道被攻击的是什么数据库
首先从 Web 应用技术上就可以获得一些线索:
如果是使用 ASP 或者 .NET 开发的系统 数据库就可能是 SQLServer
如果是使用 PHP 开发的系统 数据库就可能是 MySQL 或者 PostgreSQL
而如果是使用 Java 开发的系统 它挂的数据库就可能是 Oracle 或者 MySQL
除了 Web 应用之外 底层操作系统也可以提供线索:
比如安装 IIS 作为服务器平台 则后台数据库就可能是 SQL Server
而允许 Apache 和 PHP 的 Linux 服务器 就可能使用 MySQL 或者 PostgreSQL
另外还可以借助错误信息来判断数据库类型
因为报错中有可能直接显示数据库的类型:
为了获知某个表里面存在多少个字段 可以注入 order by 子句:
还可以通过 union 语句注入的方式 获得数据库的用户名和版本:
然后就可以通过注入语句 获得所有的数据库的名字:
select * from users where id = 1 union select null,schema_name,null from information_schema.schemata
上图所示 服务器上所有的数据库就这样暴露出来 。。。
有了数据库的名字 还可以进一步获取表的名字:
select * from users where id = 1 union select null,table_name,null from information_schema.tables where table_schema='bugfree'
有了表名字 获取字段名字也很容易:
select * from users where id = 1 union select null,column_name,null from information_schema.columns where table_name='bf_bug_info' and table_schema = 'bugfree'
至此 我们已经利用 SQL 注入的方式 获得了太多信息
然鹅 我们甚至还可以获得更多
在掌握数据库连接密码的情况下 我们来查询一下 mysql.user 表:
那么如果没有密码呢 通过注入的方式 也可以获得这些数据:
select * from users where id = 1 union select Host,user,password from mysql.user
以上展示的就是最为基础的 SQL 注入的实现形式了
假设 SQL 语句是 INSERT into 表名 values ('X',X,X);
那么就往数据库插入了非法数据了。。。。。
最新文章
- .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来
- LeetCode Reverse Vowels of a String
- ios启动载入启动图片
- iOS -- MJrefresh
- Centos Ping不通外网
- linux内核分析 第八周
- UVA 562 Dividing coins (01背包)
- cocos2d-x2.2.5 + cocos2d-x3.2鸟跳便宜源代码“开源”
- Binder机制,从Java到C (5. IBinder对象传递形式)
- Windows 8 卡在正在检查更新
- 【转】GPS静态观测网的设计指标
- zTree实现地市县三级级联Service接口
- ls file less
- Spring流行的十大理由
- 内存溢出和内存泄漏的区别(ZZ)
- Mac使用brew安装nginx,并解决端口访问权限问题
- OpenStack 图形化服务 Horizon使用(十三)
- MVC5 Entity Framework学习之实现主要的CRUD功能
- Linear Regression Using Least Squares Method 代码实现
- 【JS】逻辑运算符 非! 与&;&; 或||
热门文章
- ardunio I2C
- HeadFisrt 设计模式03 装饰者
- 查看win10的激活信息和版本号
- 第二百六十节,Tornado框架-内置模板方法
- 第二百五十八节,Tornado框架-逻辑处理get()方法和post()方法,初识模板语言
- NANDflash和NORflash的区别(设计师在使用闪存时需要慎重选择)
- 【noip模拟题】日历游戏(博弈论+搜索)
- C++ map修改指定key的value
- Linq------错误: Unable to determine the principal end of an association between the types
- 第十篇:Linux中权限的再讨论( 上 )