NSSCTF中的web

目录

[[第五空间 2021]WebFTP](#[第五空间 2021]WebFTP)

[[LitCTF 2023]PHP是世界上最好的语言!!](#[LitCTF 2023]PHP是世界上最好的语言!!)

[[SWPUCTF 2021 新生赛]PseudoProtocols](#[SWPUCTF 2021 新生赛]PseudoProtocols)

[[LitCTF 2023]导弹迷踪](#[LitCTF 2023]导弹迷踪)

[[NISACTF 2022]easyssrf](#[NISACTF 2022]easyssrf)


[第五空间 2021]WebFTP

1.进入页面,发现是登录页面,想到

弱口令;

sql万能密码;

webftp2011的漏洞;

扫目录;

看前端源代码有没有泄露些内容;

2.经过尝试,最后使用disearch来扫描,发现.git文件和phpinfo.php

3.访问phpinfo.php找到flag

[LitCTF 2023]PHP是世界上最好的语言!!

1.根据题目提示,flag在根目录下,所以在右边边框执行php代码,并且查看根目录

2.找到flag,使用cat命令得到flag

[SWPUCTF 2021 新生赛]PseudoProtocols

1.根据题目提示,需要用到php伪协议,构造payload+php://filter/read=convert.base64-encode/resource=hint.php,来读取文件

2.很明显是一串base64编码,解码可得test的php文件

3.访问这个文件,得到php代码

代码可翻译为:
 <?php
ini_set("max_execution_time", "180"); //脚本的最大执行时间为 180 秒。
show_source(__FILE__); //使用 show_source 函数显示当前文件的源代码。
include('flag.php'); //使用 include 语句包含另一个 PHP 文件 flag.php
$a= $_GET["a"];//从 GET 请求中获取名为 "a" 的参数,并将其值赋给变量 $a。
if(isset($a)&&(file_get_contents($a,'r')) === 'I want flag'){ //使用 isset 函数检查 $a 是否被设置,即它是否有一个值。使用 file_get_contents 函数读取由 $a 指定的文件的内容。如果文件的内容是 "I want flag",则条件为真。
    echo "success\n";
    echo $flag;
}
?> 

4.分析可得与文件包含有关,有两种解法

解法一:php://input

----可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。

php://input是php语言中一个只读的数据流;通过"php://input",可以读取从Http客户端以POST方式提交、请求头"Content-Type"值非"multipart/form-data​"的所有数据;

"php://input"一般用来读取POST上来,除已被处理以外的剩余数据。

说白了就是当遇到正则匹配时GET传参不能出现的敏感字符,可以通过php://input在POST上传最后绕过了检测。

解法二:data://

示例用法:

1、data://text/plain,

http://127.0.0.1/include.php?file=data://text/plain,\<?php%20phpinfo();?>

2、data://text/plain;base64,

http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2B
知识点:

file://伪协议 (读取文件内容)

通过file协议可以访问本地文件系统,读取到文件的内容

data://(读取文件)和php伪协议的input类似,碰到file_get_contents()来用

data:// 数据流封装器,以传递相应格式的数据。可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行

php://input(任意代码执行)

遇到file_get_contents()要想到用php://input绕过。

php://input 可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。

[LitCTF 2023]导弹迷踪

通过这道题,学到了新的解题思路,查看源代码时应该注意js文件(game.js)

1.通过查看js文件,找到flag

[NISACTF 2022]easyssrf

1.题目提示了使用 curl 连接输入的网站并返回响应包,想到使用php伪协议,使用file://伪协议 (读取文件内容)用法:

file://[文件的绝对路径和文件名]

了解什么是curl命令:curl是一个利用 URL 语法在命令行下工作的文件传输工具,该工具支持以下多种类型的传输方式,这当中包含多种协议,最常使用的有FILE、FTP、HTTP、HTTPS等协议。

资料参考:Linux curl命令最全详解-CSDN博客

强大的curl命令的介绍和一般用法_curl命令参数-CSDN博客

2.根据提示,查看/fl4g文件

3.访问这个php文件,得到代码

stristr()函数的介绍:

 <?php

highlight_file(__FILE__);
error_reporting(0);

$file = $_GET["file"]; //从 GET 请求中获取名为 "file" 的参数,并将其值赋给 $file 变量
if (stristr($file, "file")){  //使用 stristr 函数检查 $file 变量中是否包含 "file" 字符串。
  die("你败了.");
}

//flag in /flag
echo file_get_contents($file);  //使用 file_get_contents 函数读取 $file 变量指定的文件内容。

4.使用php伪协议,构造payload:url+?file=php://filter/write=convert.base64-encode/resource=/flag

或者进行依次的查找flag

相关推荐
SameX7 分钟前
初识 HarmonyOS Next 的分布式管理:设备发现与认证
前端·harmonyos
M_emory_34 分钟前
解决 git clone 出现:Failed to connect to 127.0.0.1 port 1080: Connection refused 错误
前端·vue.js·git
Ciito37 分钟前
vue项目使用eslint+prettier管理项目格式化
前端·javascript·vue.js
成都被卷死的程序员1 小时前
响应式网页设计--html
前端·html
mon_star°1 小时前
将答题成绩排行榜数据通过前端生成excel的方式实现导出下载功能
前端·excel
Zrf21913184552 小时前
前端笔试中oj算法题的解法模版
前端·readline·oj算法
文军的烹饪实验室3 小时前
ValueError: Circular reference detected
开发语言·前端·javascript
Martin -Tang4 小时前
vite和webpack的区别
前端·webpack·node.js·vite
迷途小码农零零发4 小时前
解锁微前端的优秀库
前端
王解5 小时前
webpack loader全解析,从入门到精通(10)
前端·webpack·node.js