小维的博客

Pentest | Note | Security


  • 首页

  • 标签

  • 归档

  • 关于

  • 小维的安全导航

  • 搜索

记又又又一次拉练-php审计

发表于 2021-10-11
字数统计: 523字 | 阅读时长 ≈ 2分钟

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

小维

前言

这篇文章记述了又又又一次的CTF拉练,一道php审计题~

源码

1
2
3
4
5
6
7
8
9
10
11
<?php
# upload www-data rwx
if (isset($_GET['path']) && isset($_GET['data'])) {
    $data = "<?php\ndie('no php');\n?>\n";
    $content = $data.base64_decode($_GET['data']);
    file_put_contents($_GET['path'], $content);
    echo 'OK';
} else{
    highlight_file(__FILE__);
}
?>
阅读全文 »

记又又一次拉练-Node.js

发表于 2021-07-04
字数统计: 1.5k字 | 阅读时长 ≈ 8分钟

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

小维

前言

这篇文章记述了又又一次的CTF拉练,node.js的白盒审计题,跟上次的记又一次CTF拉练-Node.js基本逻辑一样,感觉是得到了很多非预期解进一步限制条件~

sourceCode1源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
process.on('uncaughtException', function (err) {
console.log('Caught exception: ', err);
});

var express = require('express')
var session = require('express-session');
var fs = require('fs');
var path = require('path');
var config = require('./config');
var marked = require('marked');
var morgan = require('morgan');
var bodyParser = require('body-parser');
var AccessControl = require('express-ip-access-control');
var getflag2 = require('./getflag2');
var getflag3 = require('./getflag3');

var port = process.env.PORT;
var app = express()
var sourceCode;

marked.setOptions({
highlight: function (code) {
return require('highlight.js').highlightAuto(code).value
}
})

fs.readFile('app.js', 'utf8', (err, data) => {
if (!err) {
markdown = `\`\`\`node\n${data}\n\`\`\``;
sourceCode = marked(markdown);
}
});

fs.readFile('package.json', 'utf8', (err, data) => {
if (!err) {
markdown = `\`\`\`json\n${data}\n\`\`\``;
packageData = marked(markdown);
}
});

var options = {
mode: 'allow',
denys: [],
allows: ['10.0.0.6'],
forceConnectionAddress: false,
log: function (clientIp, access) {
if (!access)
console.log(`${clientIp} denied.`);
},
statusCode: 404,
redirectTo: '',
message: '404 Not Found...Don\'t fuck me Please......'
};

app.use(AccessControl(options));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({ secret: 'xxx', resave: true, saveUninitialized: true, name: 'SID' }));
morgan.format('ctf', '[ctf] [:remote-addr/:req[x-forwarded-for]] - ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"');
app.use(morgan('ctf'));
app.use(bodyParser.urlencoded({ limit: '100mb', extended: true, parameterLimit: 1000000 }));

app.get('/', function(req, res) {
// console.log(sourceCode);
res.render('index', {code: sourceCode});
});
// 模块信息
app.get('/package.json', function (req, res) {
res.render('index', { code: packageData });
});
// 版本信息页面
app.get('/version', function (req, res) {
data = 'Node version is: ' + process.version;
res.render('index', { code: data });
});

app.use(function (req, res, next) {
if (isProtectUrl(req.originalUrl, req.query) && (typeof req.session['username'] == 'undefined')) {
res.redirect('/');
} else {
next();
}

function isProtectUrl(url, query_url) {
var isProtectUrl = true;
// 新增匹配有 ]* 需等于]= 或 ][
var ch = /\]./g
var seg = null;
var unProtectUrl = [];
unProtectUrl.push('/login');

while ((seg = ch.exec(url)) != null) {
if (seg[0] != ']=' && seg[0] != '][')
return isProtectUrl
}
//新增了对__proto__限制
for (var i = 0; i < unProtectUrl.length; i++) {
if (unProtectUrl[i] == url || (url.indexOf('__proto__') < 0 && url.indexOf('#') < 0 && url.indexOf(unProtectUrl[i]) >= 0 && JSON.stringify(query_url).indexOf(unProtectUrl[i]) < 0)) {
isProtectUrl = false;
break;
}
}
return isProtectUrl
}
});

app.get('/login', function(req, res) {
res.render('login');
});

app.post('/login', function (req, res) {
var username = req.body['username'];
var password = req.body['password'];
if (username == config.username && password == config.password) {
req.session["username"] = "admin";
res.send("login success.");
} else {
res.send('login failed.');
}
});
// 新增了getflag1,getflag2,getflag3 将flag分开放在3个页面
app.get('/getflag1', function (req, res) {
fs.readFile('getflag2.js', 'utf8', (err, data) => {
if (!err) {
markdown = `\`\`\`node\n${data}\n\`\`\``;
sourceCode2 = marked(markdown);
}
});
res.render('flag', { flag: config.flag1, code: sourceCode2});
});

app.get('/getflag2', getflag2);
app.get('/getflag3', getflag3);

app.listen(port, '0.0.0.0', () => {
console.log(`ctf app listening at http://0.0.0.0:${port}`);
})
阅读全文 »

记又一次CTF拉练-Node.js

发表于 2021-06-26
字数统计: 975字 | 阅读时长 ≈ 4分钟

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

小维

前言

这篇文章记述了又一次的CTF拉练,Node.js的白盒审计题…

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// 捕捉全局异常
process.on('uncaughtException', function (err) {
console.log('Caught exception: ', err);
});

////引入模块
var express = require('express')
var session = require('express-session');
var fs = require('fs');
var path = require('path');
var config = require('./config');
var marked = require('marked');
var morgan = require('morgan');
var bodyParser = require('body-parser');
var AccessControl = require('express-ip-access-control');

var port = process.env.PORT;
var app = express()
var sourceCode;

marked.setOptions({
highlight: function (code) {
return require('highlight.js').highlightAuto(code).value
}
})

// 系统文件读写操作
fs.readFile('app.js', 'utf8', (err, data) => {
if (!err) {
markdown = `\`\`\`node\n${data}\n\`\`\``;
sourceCode = marked(markdown);
}
});

var options = {
mode: 'allow',
denys: [],
allows: ['10.0.0.6'],
forceConnectionAddress: false,
log: function (clientIp, access) {
if (!access)
console.log(`${clientIp} denied.`);
},
statusCode: 404,
redirectTo: '',
message: '404 Not Found...Don\'t fuck me Please......'
};

// 访问控制'express-ip-access-control'
app.use(AccessControl(options));
// 设置views文件夹,应用程序视图目录 ejs后缀
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
//public下所有文件都会以静态资料文件形式返回(如样式、脚本、图片素材等文件)
app.use(express.static(path.join(__dirname, 'public')));

//session
app.use(session({ secret: 'ctf', resave: true, saveUninitialized: true, name: 'SID' }));

//morgan日志格式化 自定义format名ctf
morgan.format('ctf', '[ctf] [:remote-addr/:req[x-forwarded-for]] - ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"');
app.use(morgan('ctf'));

//配置body-parser中间件 application/x-www-form-urlencoded,extended: true 任何数据类型 设置数据限制100mb 参数限制1000000
app.use(bodyParser.urlencoded({ limit: '100mb', extended: true, parameterLimit: 1000000 }));

// 网站根路径
app.get('/', function(req, res) {
// console.log(sourceCode);
res.render('index', {code: sourceCode});
});

// 中间件处理
app.use(function (req, res, next) {
// 判断url中是否有/login 或者 session值是否未定义
if (isProtectUrl(req.originalUrl, req.query) && (typeof req.session['username'] == 'undefined')) {
res.redirect('/');
} else {
next();
}

// 判断url是否存在有/login
function isProtectUrl(url, query_url) {
var isProtectUrl = true;

var unProtectUrl = [];
unProtectUrl.push('/login');

for (var i = 0; i < unProtectUrl.length; i++) {
if (unProtectUrl[i] == url || (url.indexOf('#') < 0 && url.indexOf(unProtectUrl[i]) >= 0 && JSON.stringify(query_url).indexOf(unProtectUrl[i]) < 0)) {
isProtectUrl = false;
break;
}
}
return isProtectUrl
}
});

// login页面
app.get('/login', function(req, res) {
res.render('login');
});

// 登录post请求
app.post('/login', function (req, res) {
var username = req.body['username'];
var password = req.body['password'];
if (username == config.username && password == config.password) {
req.session["username"] = "admin";
res.send("login success.");
} else {
res.send('login failed.');
}
});

// getflag页面
app.get('/getflag', function (req, res) {
// console.log(config);
res.render('flag', {flag: config.flag}); //加载flag
});

// 侦听
app.listen(port, '0.0.0.0', () => {
console.log(`ksctf app listening at http://0.0.0.0:${port}`);
})
阅读全文 »

WEB批量请求器.md

发表于 2021-06-17
字数统计: 226字 | 阅读时长 ≈ 1分钟

本工具仅限技术研究与测试,严禁用于非法用途,否则产生的一切后果自行承担。

介绍

WEB批量请求器(WebBatchRequest)是对目标地址批量进行快速的存活探测、Title获取,简单的banner识别,支持HTTP代理以及可自定义HTTP请求用于批量的漏洞验证等的一款基于JAVA编写的轻量工具。

阅读全文 »

记一次CTF拉练-命令执行绕过

发表于 2021-05-20
字数统计: 601字 | 阅读时长 ≈ 2分钟

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

小维

前言

这篇文章记述了一次CTF拉练的一道php的白盒审计题…

源码

1
2
3
4
5
6
7
8
9
10
<?php
highlight_file(__FILE__); //对文件进行语法高亮显示
$filter = '/#|`| |[\x0a]|php|perl|dir|rm|ls|sleep|cut|sh|bash|grep|ash|nc|ping|curl|cat|tac|od|more|less|nl|vi|unique|head|tail|sort|rev|string|find|\$|\(\|\)|\[|\]|\{|\}|\>|\<|\?|\'|"|\*|;|\||&|\/|\\\\/is'; #定义黑名单
$cmd = $_GET['cmd']; # get方式传递数据
if(!preg_match($filter, $cmd)){ # 正则匹配并判断传递的数据
system($cmd."echo 'okkkkkk'"); #执行外部程序,并显示输出
}else{
die("ohhhhnnnoooooooooo....."); #输出一条消息,并退出当前脚本。
}
?>
阅读全文 »

蓝凌OA Getshell 0day

发表于 2021-04-25
字数统计: 18字 | 阅读时长 ≈ 1分钟
该文章已受密码保护, 请您输入密码查看。
阅读全文 »

通过Windows自带程序IMEWDBLD.EXE下载任意文件

发表于 2021-04-20
字数统计: 224字 | 阅读时长 ≈ 1分钟

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

小维
1
2
3
# 环境介绍
OS 名称: Microsoft Windows 10 专业版
OS 版本: 10.0.18363 暂缺 Build 18363
阅读全文 »

Wechat RCE 0day

发表于 2021-04-18
字数统计: 1.3k字 | 阅读时长 ≈ 6分钟

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

小维

漏洞描述

该漏洞是Google V8引擎历史漏洞的衍生关联漏洞。微信客户端(Windows版本)使用V8引擎解析JavaScript代码,并关闭了沙盒模式(–no-sandbox参数)。攻击者利用上述漏洞,构造恶意钓鱼链接并通过微信发送,在引诱受害者使用微信客户端(Windows版)点击钓鱼链接后,可获取远程主机的控制权限,实现远程代码执行攻击。

影响范围

微信PC客户端(Windows)< 3.2.1.141 (注:亲测较低版本可能不存在)

阅读全文 »

Shellcode 隐写像素RGB免杀上线到 CobaltStrike

发表于 2021-04-16
字数统计: 1.8k字 | 阅读时长 ≈ 10分钟

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

小维

写在前面

看到一篇推文隐写RGB来进行绕过杀软,记录一下~

阅读全文 »

Telnet 测试邮件协议

发表于 2021-04-14
字数统计: 1.2k字 | 阅读时长 ≈ 4分钟

本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

小维
smtp

image-20210414093817371

阅读全文 »
12…5下一页
小维同学

小维同学

努力努力再努力

44 日志
2 分类
22 标签
友情链接
  • 小窝
0%
© 2021 小维同学
❤ LZL