攻防世界-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注入的理解也不够深刻。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/97177.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter性能综合实战 —— 签到及批量签到

提取性能测试的三个方面:核心、高频、基础功能 签 到 请 求 步 骤 1、准备工作: 签到线程组n HTTP请求默认值n HTTP cookie 管理器n 首页访问请求n 登录请求n 查看结果树n 调试取样器l HTTP代理服务器 (1)创建线程组 &#xf…

多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile

一、回顾💛 谈谈volatile关键字用法 volatile能够保证内存可见性,会强制从主内存中读取数据,此时如果其他线程修改被volatile修饰的变量,可以第一时间读取到最新的值。 二、💙 HashMap线程不安全没有锁,HashTable线程…

【Kafka】Kafka Stream简单使用

一、实时流式计算 1. 概念 一般流式计算会与批量计算相比较。在流式计算模型中,输入是持续的,可以认为在时间上是无界的,也就意味着,永远拿不到全量数据去做计算。同时,计算结果是持续输出的,也即计算结果…

跳槽面试:如何转换工作场所而不失去优势

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【数学建模】清风数模正课7 多元线性回归模型

多元线性回归分析 回归分析就是,通过研究自变量X和因变量Y的相关关系,来解释Y的形成机制,从而达到通过X去预测Y的目的。 所以回归分析需要完成三个使命,首先是识别重要变量,其次是判断正负相关,最后是估计…

【大数据知识】大数据平台和数据中台的定义、区别以及联系

数据行业有太多数据名词,例如大数据、大数据平台、数据中台、数据仓库等等。但大家很容易混淆,也很容易产生疑问,今天我们就来简单聊聊大数据平台和数据中台的定义、区别以及联系。 大数据平台和数据中台的定义 大数据平台:一个…

Gradio入门(1)输入输出、表格、文本高亮

本文将会介绍gradio的入门使用,并结合大模型(LLM),给出三个使用例子。   Gradio 是通过友好的 Web 界面演示机器学习模型的最快方式,以便任何人都可以在任何地方使用它。其官网网址为:https://www.gradio…

手写一个简单爬虫--手刃豆瓣top250排行榜

#拿到页面面源代码 request #通过re来提取想要的有效信息 re import requests import re url"https://movie.douban.com/top250"headers{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/11…

Qt 查找文件夹下指定类型的文件及删除特定文件

一 查找文件 bool MyXML::findFolderFileNames() {//指定文件夹名QDir dir("xml");if(!dir.exists()){qDebug()<<"folder does not exist!";return false;}//指定文件后缀名&#xff0c;可指定多种类型QStringList filter("*.xml");//指定…

蓝蓝设计ui设计公司作品案例-中节能现金流抗压测试软件交互及界面设计

中国节能是以节能环保为主业的中央企业。中国节能以生态文明建设为己任&#xff0c;长期致力于让天更蓝、山更绿、水更清&#xff0c;让生活更美好。经过多年发展&#xff0c;中国节能已构建起以节能、环保、清洁能源、健康和节能环保综合服务为主业的41产业格局&#xff0c;成…

数据结构 day6

1->xmind 2->递归实现程序&#xff1a;输入一个数&#xff0c;输出该数的每一位

lab11 net

background 在开始写代码之前&#xff0c;回顾一下xv6book的第五章会有帮助你将使用E1000去处理网络通信 E1000会和qemu模拟的lan通信在qemu模拟的lan中 xv6的地址是10.0.2.15qemu模拟的计算机的地址是10.0.2.2 qemu会将所有的网络包都记录在packets.pcap中文件kernel/e1000.…

JVM 之字节码(.class)文件

本文中的内容参考B站尚硅谷宋红康JVM全套教程 你将获得&#xff1a; 1、掌握字节码文件的结构 2、掌握Java源代码如何在JVM中执行 3、掌握一些虚拟机指令 4、回答一些面试题 课程介绍 通过几个面试题初始字节码文件为什么学习class字节码文件什么是class字节码文件分析c…

做区块链卡牌游戏有什么好处?

区块链卡牌游戏是一种基于区块链技术的创新性游戏形式&#xff0c;它将传统的卡牌游戏与区块链技术相结合&#xff0c;实现了去中心化、数字化资产的交易和收集。这种新型游戏形式正逐渐在游戏行业引起了广泛的关注和热潮。本文将深入探讨区块链卡牌游戏的定义、特点以及其在未…

App与小程序工具总结

文章目录 前言Burpsuite抓包问题LPosedJustTrustMe 绕过 SSL Pining小程序的反编译APP脱壳&#xff0c;反射大师、frida反射大师Frida 总结 前言 在进行渗透工作的时候&#xff0c;遇到过的App、小程序也不少了&#xff0c;有简单的&#xff0c;也有加固的比较不错的&#xff…

Servlet与过滤器

目录 Servlet 过滤器 Servlet Servlet做了什么 本身不做任何业务处理,只是接收请求并决定调用哪个JavaBean去处理请求,确定用哪个页面来显示处理返回的数据 Servlet是什么 ServerApplet&#xff0c;是一种服务器端的Java应用程序 只有当一个服务器端的程序使用了Servlet…

Ansible学习笔记12

playbook&#xff1a; playbook&#xff08;剧本&#xff09;&#xff1a;是ansible用于配置、部署和管理被控节点的剧本&#xff0c;用于Ansible操作的编排。 使用的是yaml格式&#xff0c;&#xff08;saltstack、elk、docker、docker-compose、k8s都会使用到yaml格式。&am…

【数据结构】| 并查集及其优化实现

目录 一. 并查集基本概念处理过程初始化合并查询小结 二. 求并优化2.1 按大小求并2.2 按秩(高度)求并2.3 路径压缩2.4 类的实现代码2.5 复杂度分析 三. 应用LeetCode 128: 最长连续数列LeetCode 547: 省份数量LeetCode 200: 岛屿数量 一. 并查集基本概念 以一个直观的问题来引入…

vue3的hooks你可以了解一下

更详细的hooks了解参考这个大佬的文章&#xff1a;掘金&#xff1a;Hooks和Mixins之间的区别 刚开始我简单看了几篇文章感觉Hooks这个东西很普通&#xff0c;甚至感觉还不如vue2的mixin好用。还有export import 感觉和普通定义一个utils文件使用没什么区别。但是Hooks这个东西肯…

kotlin实现猜数游戏

游戏规则 1.程序随机生成一个1到100的数字&#xff0c;作为MagicNumber 2.用户根据提示输入数据&#xff0c;只有三次机会输入数据 代码 代码很简单&#xff0c;使用了let内置函数 fun main() {//生成随机数可以使用java的方法//val magicNumber Random().nextInt(11)val ma…