• 攻防世界Web之fakebook


    打开题目,得到一个网页,包含一个表格、两个按钮。

    习惯性先查看网页源码,但没发现有效信息。

    
    <!doctype html>
    <html lang="ko">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Fakebook</title>
    
        <link rel="stylesheet" href="css/bootstrap.min.css" crossorigin="anonymous">
    <script src="js/jquery-3.3.1.slim.min.js" crossorigin="anonymous"></script>
    <script src="js/popper.min.js" crossorigin="anonymous"></script>
    <script src="js/bootstrap.min.js" crossorigin="anonymous"></script>
    
    </head>
    <body>
    <div class="container">
        <h1>the Fakebook</h1>
            <p>Share your stories with friends, family and friends from all over the world on <code>Fakebook</code>.</p>
    
        <table class="table">
            <tr>
                <th>#</th>
                <th>username</th>
                <th>age</th>
                <th>blog</th>
            </tr>
            <tr></tr>
        </table>
    </div>
    </body>
    </html>
    
    

    打开login.php,是一个登录页面,随手试了几个弱口令和SQL注入,没有成功,查看网页源码,也没有提示,估计问题不在这。

    打开join.php页面,随便输入一点东西提交,都提示错误:Blog is not valid.,说明对blog字段的格式有要求,从字面和题目信息上理解,就是分享你的故事,应该没什么限制才对。

    后来想了一下,可能是需要提交一个博客地址,尝试提交http://127.0.0.1http://localhost,均提示错误。

    猜测可能过滤了127.0.0.1localhost关键字,随手试一下www.baidu.com,此时提示成功。

    再次打开首页,发现多了一条记录。

    点击用户名111,打开一个页面,看到the contents of his/her blog,兴奋了一下,不会是ssrf吧?

    直接查看源码,发现是空的base64

    直接上DNSLOG试试,也不行。到这里思路就断了,重新整理了一下,发现被绕进去了,问题不一定在blog字段,这个用户名和年龄是有回显的,猜测是XSS或二次注入,直接排除XSS,试一下注入吧。

    好家伙,直接报错,把Web路径报出来了,明显是SQL注入。

    尝试了一下插入已存在的用户名时会提示用户名已存在,说明后台会先在数据库中查找用户是否存在,可以用图中的SQL注入绕过检测。

    猜测后台SQL语句如下:

    # 检查用户是否存在
    SELECT * FROM user WHERE username='';
    
    # 插入新的记录
    INSERT INTO user SET username='',passwd='',age='',blog='';
    

    但是插入数据时,注入的用户名会被直接写入数据库,说明写入的时候用SQL预编译,无法注入。

    直接用sqlmap跑,没发现flag,把users表dump出来,data这一列明显是PHP序列化,但是只能控制其中的字符串,不能控制整个反序列化字符串,所以不能使用反序列化。

    使用sqlmap的--sql-shell参数,进入SQL交互,尝试执行SQL语句,把源码dump出来分析,没分析出啥。

    select load_file('/var/www/html/index.php');
    select load_file('/var/www/html/user.php');
    select load_file('/var/www/html/db.php');
    select load_file('/var/www/html/view.php');
    

    随手试一下flag.php,居然成功了。

    select load_file('/var/www/html/flag.php');
    

  • 相关阅读:
    sort_action
    jedis
    ClassNotFoundException
    mysql-test-run.pl
    mysql 5.6 bug
    The basic principle of test case 修改引擎
    mysql 执行计划走索引
    mysql 执行计划走索引
    14.1.2 Checking InnoDB Availability 检查InnoDB 可用性:
    14.1.2 Checking InnoDB Availability 检查InnoDB 可用性:
  • 原文地址:https://www.cnblogs.com/zhuangshq/p/15509387.html
Copyright © 2020-2023  润新知