NSSCTF

[SWPUCTF 2021 新生赛]gift_F12

在源代码界面找到了flag

[SWPUCTF 2021 新生赛]jicao

源码

<?php
highlight_file('index.php');
include("flag.php");
$id=$_POST['id'];
$json=json_decode($_GET['json'],true);
if ($id=="wllmNB"&&$json['x']=="wllm")
{echo $flag;}
?>

看的出来是有文件包含的,

id利用post传参id

json加密json get传参json

如果id= wllmNB json[x]=wllm 就可以得到flag

json_decode函数:

json_decode是php5.2.0之后新增的一个PHP内置函数,其作用是对JSON格式的字符串进行编码.那么这个函数该如何使用呢?

json_decode的语法规则:  ​json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

json_decode接受一个JSON格式的字符串并且把它转换为PHP变量 ,当该参数$assoc为TRUE时,将返回array,否则返回object。

JSON 格式的字符串

$json = '{"a":"php","b":"mysql","c":3}';

其中a为键,php为a的键值。

实例:

所以这个get传参就可以写成?json = '{"X":"wllm"}';

post传参是 id=wllmNB

得到flag

[SWPUCTF 2021 新生赛]easy_md5

源码

<?php
highlight_file(__FILE__);
include 'flag2.php';

if (isset($_GET['name']) && isset($_POST['password'])){
$name = $_GET['name'];
$password = $_POST['password'];
if ($name != $password && md5($name) == md5($password)){
echo $flag;
}
else {
echo "wrong!";
}

}
else {
echo 'wrong!';
}
?>

wrong!

简单的数组绕过

get传参name,post传参password,让他们两个值不同但是md5值相等,直接用数组绕过

get:name[]=2

post:password[]=1

得到flag

[SWPUCTF 2021 新生赛]easy_sql

在源码中找到了参数

url应该是注入点

找到了 看看sqlmap能不能用 发现可以

sqlmap命令:

常用命令:

  1. sqlmap -u url:对指定的 URL 进行 SQL 注入测试。

  2. sqlmap -r request_file:对指定的 HTTP 请求文件进行 SQL 注入测试。

  3. sqlmap -d database_url:对指定的数据库 URL 进行 SQL 注入测试。

  4. sqlmap --dbs:列出目标数据库中所有可用的数据库名称。

  5. sqlmap -D database_name --tables:列出指定数据库中所有可用的数据表名称。

  6. sqlmap -D database_name -T table_name --columns:列出指定数据表中所有可用的列名称。

  7. sqlmap -D database_name -T table_name -C column_name --dump:获取指定列中的所有数据。

高级命令:

  1. sqlmap --threads=num:指定使用的线程数。

  2. sqlmap --level=num:指定测试的深度级别。

  3. sqlmap --risk=num:指定测试的风险级别。

  4. sqlmap --batch:以批处理模式运行 sqlmap。

  5. sqlmap --random-agent:使用随机的 User-Agent 头部信息。

  6. sqlmap --tor:通过 Tor 网络进行测试。

  7. sqlmap --proxy=proxy_url:通过指定代理服务器进行测试。

  8. sqlmap --dbms=dbms_name:指定要测试的数据库管理系统类型。

  9. sqlmap --os=os_name:指定要测试的操作系统类型。

  10. sqlmap --technique=technique_name:指定要使用的 SQL 注入技术。

找一下flag信息 最后在test_db表test_tb列中找到flag字段

[SWPUCTF 2021 新生赛]include

传入:?file=flag.php 显示:

php伪协议

PHP 伪协议(PHP pseudo-protocols)是一种特殊的 URL 格式,用于在 PHP 中访问和处理各种资源和数据。它们不是真正的协议,而是由 PHP 解释器解析和处理的特殊 URL 形式。

常见php伪协议

  1. php://input:用于访问请求的原始数据。可以用于处理 POST 请求的原始数据或者处理上传的文件数据。

  2. 示例:

    php

  $data = file_get_contents('php://input');
  ```
  • php://output:用于输出数据到响应。可以用于将数据发送到浏览器或其他输出流。

    示例:

    php

  file_put_contents('php://output', 'Hello, World!');
  ```
  • php://stdin:用于从标准输入流(stdin)读取数据。

    示例:

    php

  $input = fgets(STDIN);
  ```
  • php://stdout:用于将数据写入标准输出流(stdout)。

    示例:

    php

  fwrite(STDOUT, 'Hello, World!');
  ```
  • php://stderr:用于将错误信息写入标准错误流(stderr)。

    示例:

    php

  fwrite(STDERR, 'An error occurred!');
  ```
  • php://temp:用于创建一个临时的内存数据流,可以读写数据。

    示例:

    php

    handle = fopen('php://temp', 'r+'); fwrite(handle, 'Hello, World!');
    rewind($handle);
    data = fread(handle, 1024);
    fclose($handle);

伪协议读取文件

1.读取本地文件

$fileContent = file_get_contents('php://filter/read=convert.base64-encode/resource=/path/to/file.txt');

```

上述代码会将指定路径 `/path/to/file.txt` 的文件内容读取到变量 `$fileContent` 中。`convert.base64-encode` 过滤器可以将文件内容进行 Base64 编码,如果不需要编码,可以省略该过滤器。

2.读取远程文件

$fileContent = file_get_contents('php://temp');

$remoteFile = fopen('http://example.com/file.txt', 'r');

stream_copy_to_stream($remoteFile, $fileContent);

fclose($remoteFile);

```

上述代码使用 `php://temp` 创建一个临时数据流,然后通过 `fopen` 打开远程文件 `http://example.com/file.txt\`,最后使用 `stream_copy_to_stream` 将远程文件内容复制到临时数据流中。

3.读取标准输入

$stdinContent = file_get_contents('php://stdin');

```

上述代码会将标准输入中的内容读取到变量 `$stdinContent` 中。

这道题就可以用

php://filter/read=convert.base64-encode/resource=/path/to/file.txt的形式进行读取

base64进行解码就得到flag了

[SWPUCTF 2021 新生赛]easyrce

get传参url

用system进行rce

system('ls') 是一个 PHP 的系统调用函数,用于在命令行中执行系统命令。在这个例子中,ls 是一个常见的 Unix/Linux 命令,用于列出当前目录中的文件和文件夹。

当你在 PHP 中调用 system('ls') 时,它会执行 ls 命令,并将结果输出到标准输出流。你可以在命令行中运行 PHP 脚本或者在 Web 服务器上执行 PHP 脚本以查看输出结果。

system('ls /')

找到了flag文件 得到flag

相关推荐
莹雨潇潇1 分钟前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
Jiaberrr10 分钟前
Element UI教程:如何将Radio单选框的圆框改为方框
前端·javascript·vue.js·ui·elementui
网络研究院14 分钟前
Android 安卓内存安全漏洞数量大幅下降的原因
android·安全·编程·安卓·内存·漏洞·技术
凉亭下21 分钟前
android navigation 用法详细使用
android
Tiffany_Ho1 小时前
【TypeScript】知识点梳理(三)
前端·typescript
安冬的码畜日常2 小时前
【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)
开发语言·前端·javascript·信息可视化·数据可视化·d3.js
太阳花ˉ2 小时前
html+css+js实现step进度条效果
javascript·css·html
小白学习日记3 小时前
【复习】HTML常用标签<table>
前端·html
john_hjy3 小时前
11. 异步编程
运维·服务器·javascript