node.js koa实现命令注入漏洞

题目构思:一输入点,一输出点,带入执行的命令语句,实现命令注入漏洞。
上代码↓

test.js
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
const bodyParser = require('koa-bodyparser');

app.use(bodyParser());
app.use(router.routes());

router.get('/',async ctx => {
  let str = "";
  if(ctx.request.query.str!=null){
    str = ctx.request.query.str;//获取get提交的参数
  }
  try{
    require('fs').writeFileSync('/tmp/flag.txt','xxxxxx');//在目录中写入flag.txt
  ctx.body = `
  <!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<h1>在下框中输入任意文字</h1>
  <form action="/" method="get"><!--form表单,用来提交数据--!>
    <input name="str" type="text"  />
    <button type="submit">提交</button>
  </form>
  <h1>${require('child_process').execSync('echo '+str+' | xargs -dX').toString()}</h1>
  <!--执行命令: echo ${str} | xargs -dX --!>
</body>
</html>
`;
    }catch(e){
        ctx.throw(400,e.message);
    }
});

app.listen(3000)

下面是我在 Runkit 上运行的test
test
这道题比较简单,但是基本上是所有命令注入题的灵魂
答案在下面
答案
答案在上面


Runkit 用来跑 node.js 的测试页真的超级方便,不用自己安装任何库如何包,想用什么直接调什么。+++下面简单写个教程
先进去注册个帐号 Runkit官网
然后点 “+” 新建一个notebook页
在这里插入图片描述
把代码粘贴进去,然后等待左下角显示为 saved 就保存成功了(如果很长时间都没保存好就直接 F5 刷新页面吧)

点击页面上面的 endpoint 就可以打开预览页面了(每次重新编辑都要等左下角的saved保存成功,然后刷新打开的预览界面就可以看到效果了,很方便)
点击


ps:
我有个大胆的想法。。。用 Runkit 写一个单机的 CTF训练营(嘴角逐渐上扬)

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值