‘壹’ 简述什么是sql注入,写出简单的SQL注入语句
SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。
‘贰’ sql注入语句
username="xxx"的目的是判读username字段中有没有xxx这条记录,有的话,整条语句为真值,页面正常。否则不正常。如果写成select id from XXX.dbo.admin where password>1,返回不管真值还是假值,无意义,得不到任何有用信息。另外,你是看到返回的密码的,SQL语句是被带到了程序中执行,程序并不会显示输出SQL结果。
‘叁’ 怎样使用sql注入语句
一般,SQL
注入是
SQL语句直接是从页面获得值进行拼接的。
如果
12
string
strUserid
=
"admin";
//从页面获得输入内容string
strSql
=
"select
1
from
users
where
userid='"
+
strUserid
+
"'
";
若
strUserid
正常输入,是没问题的。
1
select
1
from
users
where
userid='admin'
但,SQL注入时候会这样写
1
string
strUserid
=
"'
or
1=1
--";
这时,SQL为
1
select
1
from
users
where
userid=''
or
1=1
--'
这样永远返回验证通过的结果。
‘肆’ 写出SQL注入的方法和联合查询数据库所用到的SQL语句
注入方法:
a)寻找注入点,构造特殊的语句
传入SQL语句可控参数分为两类
1. 数字类型,参数不用被引号括起来,如?id=1
2. 其他类型,参数要被引号扩起来,如?name="phone"
b)用户构造SQL语句(如:'or 1=1#;admin'#(这个注入又称PHP的万能密码,是已知用户名的情况下,可绕过输入密码)以后再做解释)
c)将SQL语句发送给DBMS数据库
d)DBMS收到返回的结果,并将该请求解释成机器代码指令,执行必要得到操作
e)DBMS接受返回结果,处理后,返回给用户
因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活)
字数限制,剩下的你自己去教学网站看一下吧。
‘伍’ sql注入攻击,除了注入select语句外,还可以注入哪些语句
Insert、Update、Delete、Drop等都可以
例:参数id=张三';Delete From myTable where '1'='1
程序中SQL语句:strSql="Select * From myTable where name='" + strName + "'"
最终strSql中的语句就成了:Select * From myTable where name='张三';Delete From myTable where '1'='1'
‘陆’ 什么是SQL注入
SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。大家也许都听过某某学长通过攻击学校数据库修改自己成绩的事情,这些学长们一般用的就是SQL注入方法。
SQL注入其实就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。简单来说,就是数据“越俎代庖”做了代码才能干的事情。
这个问题的来源是,SQL数据库的操作是通过SQL语句来执行的,而无论是执行代码还是数据项都必须写在SQL语句之中,这就导致如果我们在数据项中加入了某些SQL语句关键字(比如说SELECT、DROP等等),这些关键字就很可能在数据库写入或读取数据时得到执行。
二、SQL注入的产生需要满足以下两个条件
1、参数用户可控:前端传给后端的参数用户可控。2、参数带入数据库查询:传入的参数拼接到SQL语句中,且带入数据库中查询。
1、按照注入点分类:
(1)数字型注入:许多网页链接有类似的结构 http://xxx.com/users.php?id=1 基于此种形式的注入,注入点id为数字,一般被叫做数字型注入点,通过这种形式查询出后台数据库信息返回前台展示,可以构造类似以下的SQL语句进行爆破:select *** from 表名 where id=1 and 1=1。
2)字符型注入:网页链接有类似的结构
http://xxx.com/users.php?name=admin 这种形式,注入点name为字符串,被称为字符型注入,可以用:select *** from 表名 where name='admin' and 1=1。
3)搜索型注入:主要是指在数据搜索时没有过滤搜索参数,一般在链接地址中有 "keyword=“关键字”",注入点提交的是SQL语句,select * from 表名 where 字段 like '%关键字%' and '%1%'='%1%'。
‘柒’ 写出sql注入的方法和联合查询数据库所用到的sql语句
sql注入是从前端注入的,一般是猜解后段的sql通过一些特殊的条件拼接,比如查询输入框和后段没有对查询参数校验,我写1=1或者2=2这些为true的条件带到sql中就能将一个表中所有数据查询出来
‘捌’ 什么是sql注入如何防止sql注入
SQL注入是一种非常常见的数据库攻击手段,同时也是网络世界中最普遍的漏洞之一,简单理解就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。
问题来源是,SQL数据库的操作是通过SQL语句来执行的,而无论是执行代码还是数据项都必须写在SQL语句中,也就导致如果我们在数据项中加入了某些SQL语句关键字,比如SELECT、DROP等,这些关键字就很有可能在数据库写入或读取数据时得到执行。
解决方案
方案一:
采用预编译技术
使用预编译的SQL语句,SQL语句的语义不会是不会发生改变的。预编译语句在创建的时候就已经将指定的SQL语句发送给了DBMS,完成了解析,检查,编译等工作,所以攻击者无法改变SQL语句的结构,只是把值赋给?,然后将?这个变量传给SQL语句。当然还有一些通过预编译绕过某些安全防护的操作,大家感兴趣可以去搜索一下。
方案二:
严格控制数据类型
在java、c等强类型语言中一般是不存在数字型注入的,因为在接受到用户输入id时,代码一般会做一个int id 的数据类型转换,假如我们输入的是字符串的话,那么这种情况下,程序就会报错。但是在PHP、ASP这些没有强调处理数据类型的语言,一般我们看到的接收id的代码都是如下等代码。
方案三:
对特殊的字符进行转义
数字型注入可以通过检查数据类型防止,但是字符型不可以,那么怎么办呢,最好的办法就是对特殊的字符进行转义了。比如在MySQL中我们可以对" '
"进行转义,这样就防止了一些恶意攻击者来闭合语句。当然我们也可以通过一些安全函数来转义特殊字符。如addslashes()等,但是这些函数并非一劳永逸,攻击者还可以通过一些特殊的方式绕过。
‘玖’ 跪求SQL手工注入语句及原理
先举个例子,你要登录一个网站,上面让你输入用户名字和密码。那么,假如你输入的用户名是
admin
,但是你不知道密码,你就输入了一个
1'
OR
'1'
=
'1
,那么,你就提交了两个参数给服务器。假如,服务器拿这两个参数拼SQL语句:SELECT
T.*
FROM
XXX_TABLE
TWHERE
T.USER_ID
=
'/*param1*/'AND
T.PASSWORD
=
'/*param2*/'那么,你提交的两个参数就使SQL文变成了:SELECT
T.*
FROM
XXX_TABLE
TWHERE
T.USER_ID
=
'admin'AND
T.PASSWORD
=
'1'
OR
'1'
=
'1'那么,这个SQL原来的校验功能就被你绕过去了,你的这种行为就称之为SQL注入。
‘拾’ 手动sql注入常用的语句有哪些
1.判断有无注入点
; and 1=1 and 1=2
2.猜表一般的表的名称无非是admin adminuser user pass password 等..
and 0<>(select count(*) from *)
and 0<>(select count(*) from admin) —判断是否存在admin这张表
3.猜帐号数目 如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个
and 0<(select count(*) from admin)
and 1<(select count(*) from admin)
4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称.