sql注入原理及拓展

一、SQL注入原理及拓展

1.1、什么是sql注入?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交、输入域名或者页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

简单的来说,网站新闻内容,会员中心,查询等都会和数据库进行关联,其中传输的语言代码就是sql语句,攻击者通过操作sql语句来达到sql注入攻击。

sql语句是各大数据库中的语言代码,而sql注入就是一种通过操作sql语句进行攻击目的的技术。

1.2、sql注入漏洞能造成哪些危害?

不管用什么语言编写的web应用,它们都有一个共同点,具有交互性并且多数是数据库驱动。在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞,其通常可造成网站数据库信息泄露,网站数据被修改,网站或服务器均被入侵等。

1.3、SQL注入是怎么样产生的?

漏洞产生条件:

  1. 提交的内容和web程序之间具有变量传递,且传递的变量值可控
  2. 变量带入数据库进行查询

后台的查询代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

$id=$_GET['x'];//接受get传递的参数名x的值并赋值给变量id

$conn=mysql_connect('127.0.0.1','root','root');//连接数据库并赋值连接请求给变量conn
mysql_select_db("xiaodi",$conn);//选择连接请求conn下的数据库xiaodi
$sql="select * from news where id = $id";//接受的变量id组合sql语句
$result=mysql_query($sql);//执行sql命令并返回结果给变量result
while($row = mysql_fetch_array($result)){//将结果进行显示
echo "用户ID:".$row['Id']."<br >";
echo "文章标题:".$row['title']."<br >";
echo "文章内容:".$row['content']."<br >";
}
mysql_close($conn);//关闭数据库连接
echo "当前执行的sql语句:".$sql;//输出sql命令

?>

结合上述代码进行说明:

  • 正常情况

    向服务器请求数据(浏览器地址栏):http://localhost/sqlilabs/Less-1/?id=3

    服务器的查询语句可能是:select usename,password from table where id=3

  • 干坏事(在正常传递的参数后面添加额外的内容)

    给请求语句加点料:http://localhost/sqlilabs/Less-1/?id=3 union select ...

    反应到了服务器查询的sql语句中select usename,password from table where id=3 union select ...

文章作者: TechOtaku
文章链接: http://techotaku.me/2018/07/23/sql注入原理及拓展/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徒然の博客