NSSCTF Round#7 web
前言这个比赛好像是正月初几举办的,当时还报了名,可到了年后玩嗨了,给忘了。不用慌,题目环境还是有的,就花时间做了做,web四道题,严格来说,只做出了一道半。里面有些题还是比较有意思的,很有必要记录下来。
ec_RCE算是签到题,考察多参数的命令执行。题目给了源码:
<?PHP if(!isset($_POST["action"]) && !isset($_POST["data"])) show_source(__FILE__); putenv('LANG=zh_TW.utf8'); $action = $_POST["action"]; $data = "'".$_POST["data"]."'"; $output = shell_exec("/var/packages/Java8/target/j2sdk-image/bin/java -jar ja ...
2022西湖论剑部分web复现
前言第一次参加西湖论剑大赛,全程坐牢了。看着题目被其他师傅日穿,心里不甘啊,没办法,还是太菜,趁着还有比赛环境,抓紧复现一波赛题,详细记录一下。
Node Magical Login这题有附件,node.js代码,不过代码很好懂。主页面是个登录框。
看源码分析功能,
密码设置随机数,按常理不可能登录成功。
if(req.cookies.user === "admin") { res.setHeader("This_Is_The_Flag1", flag1.toString().trim()) res.status(200).type("text/html").send("You Got One Part Of Flag! Try To Get Another Part of Flag!") }
伪造cookie可得flag1,
关键在于flag2,输入正确的检测码,但是被toLowerCase()函数强制转小写。
i ...
java反射机制学习
java反射
java反射机制在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
java是一门静态语言,反射这一特性使其java有了动态性。这么说可能体会不到,那么就与javascript动态语言做个对比。看这么一小段javascript代码:
function f(){ var name = "var a =2;var b = 3;alert(a+b)"; eval(name);}
在代码运行过程中,eval函数能够访问到name的值,使其将字符串变成可执行的代码并执行,变量的自身结构发生变化,这就是语言的动态性。在加载完类之后,会生成class源文件,JVM启动后,会动态加载class文件,并将所有对象实例存放在堆中,将类型信息存放到方法区中。同时对象实例会保存指向类型信息的指针。也就是说,一个对象包含了完整的类的结构信息。反射就是通过一个类的实例能够知道该类的所有信息。
关于反射机制的相 ...
vm沙箱逃逸初探
前言前几天遇到一个考察vm沙箱逃逸的题目,由于这个点是第一次听说,所以就花时间了解了解什么是沙箱逃逸。此篇文章是对于自己初学vm沙箱逃逸的学习记录,若记录知识有误,欢迎师傅们指正。
什么是沙箱就只针对于node.js而言,沙箱和docker容器其实是差不多的,都是将程序与程序之间,程序与主机之间互相分隔开,但是沙箱是为了隔离有害程序的,避免影响到主机环境。为什么node.js语言要引入沙箱,这就要说说js语言中的作用域(也叫上下文)。说一大堆概念不如贴一段代码来的实在:
const a = require("./a") console.log(a.age)//a.js:var age = 100;------->输出undefined//-------------------------////a.js:var age = 100;exports.age = age;-------->输出100
若没有exports将需要的属性暴露出来,我们是访问不到另一个包内的属性的。包与包之间是互不相通的,也就是说每一个包都有自己的作用域。我们知道JavaScri ...
NCTF2022 calc题目
calc(环境变量注入getshell)经典计算器题目,看着有点眼熟,没错,就是buu三月赛的一道题目。由于那时候web可能都算不上入门,所以也就没有复现。比赛时就网上看了看三月赛的wp,但是没有什么用,因为过滤更加严格了,看题目代码:
@app.route("/calc", methods=['GET'])def calc(): ip = request.remote_addr num = request.values.get("num") log = "echo {0} {1} {2}> ./tmp/log.txt".format(time.strftime("%Y%m%d-%H%M%S", time.localtime()), ip,num) if waf(num): try: data = eval(num) os.system(lo ...
2022安洵杯web
前言个人觉得赛题质量蛮好的,只是自己太菜了,花了很长时间都在琢磨第一道web,因为一些细节上的问题导致一直解不出来。赛后就找师傅的wp重新去复现一下,总结自己的问题,在此记录一下,以便日后复习。
badyphp(pop链,原生类打ssrf和文件读取)打开题目就是源代码:
<?php//something in flag.phpclass A{ public $a; public $b; public function __wakeup() { $this->a = "babyhacker"; } public function __invoke() { if (isset($this->a) && $this->a == md5($this->a)) { $this->b->uwant(); } }}class B{ ...
DASCTF X GFCTF 2022十月挑战赛web
前言晚来的比赛web题解,这次buu的十月赛web部分的题目对于我来说质量还是蛮高的,因为这几天比较忙,一直没有去复现总结,不过该复现的还得复现,复现了这次比赛又能学到不少知识,嘿嘿嘿。
EasyPOP考察php的pop链,这题相比之下算是web中的签到题了。看题目源码:
<?phphighlight_file(__FILE__);error_reporting(0);class fine private $cmd; private $content; public function __construct($cmd, $content) { $this->cmd = $cmd; $this->content = $content; } public function __invoke() { call_user_func($this->cmd, $this->content); } public function __ ...
ssrf利用ftp被动模式打fpm
前言听别的师傅说ssrf打ftp已经是常考点了,所以今天结合陇原战“疫“的一道赛题学习一下ssrf利用ftp的被动模式攻击fpm的技巧。
什么是php-fpmfpm从字面意思理解就是php-fastcgi进程管理器,用于动态管理进程,也可以说是cgi程序。那么fastcgi又是什么?
什么是fastcgi前身是cgi,一个通用网关接口,当客户端发出的请求到http服务器,例如nginx或者apache,会通过匹配后缀知道该请求是一个动态的php请求,那么web服务器就会直接交给php-fpm进行处理,通过php语法分析处理该请求后的结果返回给web服务器,再返回给我们客户端。
这么说可能比较抽象,举一个例子,比如我们发送一个index.php?file=/etc/passwd,web服务器接收到url请求后,它会匹配index.php中的php后缀,并判断它是动态的php请求,然后通过网关接口发送给fpm,而参数file=/etc/passwd内容是由php解释器来执行。而cgi就是一个能够解析php语法的程序,fastcgi ...
DASCTF X CBCTF cbshop
前言这个是前几天buu的九月赛的一道web题,赛后根据官方出的wp也是复现了一下,当时打的时候没有看附件,以为就是一个逻辑漏洞,之后才知道是node.js的代码审计和原型链污染,原型链污染我也了解过,只不过一直没有练习对应的题目,所以说这一题对我来说也是有必要记录一下的。
题目复现打开题目是一个购买商店,登录普通用户有十点钱数。
但是flag要十一点,很明显买不起的。以为跟逻辑漏洞有关,其实给了附件,附件中有源码,审计js代码。
const fs = require('fs');const express = require('express');const session = require('express-session');const bodyParse = require('body-parser');const app = express();const PORT = process.env.PORT || 80;const SECRET = process.env.SECRET || &q ...
从一道ctf题学习LD_PRELOAD绕过函数禁用
前言前两天做了一道ctf题目,遇到比较陌生的知识点,利用LD_PRELOAD环境变量,调用新的进程来加载恶意的so文件,执行我们注入程序中的恶意代码,从而绕过函数限制。当然,这么说也比较抽象,后文会详细说明,先看我遇到的ctf题目。
[极客大挑战 2019]RCE ME打开题目,就是简单的无字母数字的命令执行代码:
<?phperror_reporting(0);if(isset($_GET['code'])){ $code=$_GET['code']; if(strlen($code)>40){ die("This is too Long."); } if(preg_match("/[A-Za-z0-9]+/",$code)){ die("NO."); } @eval($code);}else{ highlight_file(__FILE__); ...