引贴:

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);

那么就往数据库插入了非法数据了。。。。。

最新文章

  1. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来
  2. LeetCode Reverse Vowels of a String
  3. ios启动载入启动图片
  4. iOS -- MJrefresh
  5. Centos Ping不通外网
  6. linux内核分析 第八周
  7. UVA 562 Dividing coins (01背包)
  8. cocos2d-x2.2.5 + cocos2d-x3.2鸟跳便宜源代码“开源”
  9. Binder机制,从Java到C (5. IBinder对象传递形式)
  10. Windows 8 卡在正在检查更新
  11. 【转】GPS静态观测网的设计指标
  12. zTree实现地市县三级级联Service接口
  13. ls file less
  14. Spring流行的十大理由
  15. 内存溢出和内存泄漏的区别(ZZ)
  16. Mac使用brew安装nginx,并解决端口访问权限问题
  17. OpenStack 图形化服务 Horizon使用(十三)
  18. MVC5 Entity Framework学习之实现主要的CRUD功能
  19. Linear Regression Using Least Squares Method 代码实现
  20. 【JS】逻辑运算符 非! 与&& 或||

热门文章

  1. ardunio I2C
  2. HeadFisrt 设计模式03 装饰者
  3. 查看win10的激活信息和版本号
  4. 第二百六十节,Tornado框架-内置模板方法
  5. 第二百五十八节,Tornado框架-逻辑处理get()方法和post()方法,初识模板语言
  6. NANDflash和NORflash的区别(设计师在使用闪存时需要慎重选择)
  7. 【noip模拟题】日历游戏(博弈论+搜索)
  8. C++ map修改指定key的value
  9. Linq------错误: Unable to determine the principal end of an association between the types
  10. 第十篇:Linux中权限的再讨论( 上 )