美文网首页
看我如何从外网直接拿下内网靶标

看我如何从外网直接拿下内网靶标

作者: CanMeng | 来源:发表于2020-11-29 12:45 被阅读0次

    1.拿到目标制定策略进行信息收集

    某地攻防演练拿到演习目标后,进行了一波常规信息收集,打了一个靶标。

    发现靶标分数有点高还是打靶标来得快,于是对所有靶标进行分析。但是大部分靶标都给的是内网地址,

    观察了一下收集的所有目标ip发现基本上存在于xx.xx.98.x-xx.xx.106.x这个范围

    3.任意文件上传结合目录浏览轻松拿下靶标

    .NET审计还得看远海,源码发给远海过了一会远海就审出一个RCE,具体过程如下

    通过代码审计发现一处文件上传

    主要在xxx/UploadPic.aspx下

    代码大致如下:

    很多人看到第97行出现了png jpg等字符就会认为是白名单效验,其实不然。大部分文件上传操作还是会存在一些小小的瑕疵的。

    例如

    stringtext=base.Server.MapPath("~/UpPic/xxxPic/");

    定义了文件的存储目录

    if(base.Request["id"]!=null&&base.Request["id"].ToString()=="1")

    当接收参数id的值等于1时。进入if条件语句:

    string[]array=files[0].ContentType.Split(newchar[]{'/'});stringarg=array[1].Equals("jpeg",StringComparison.CurrentCultureIgnoreCase)?"":array[1];stringtext2=HttpUtility.UrlEncode(HttpContext.Current.Request["name"],Encoding.GetEncoding("GB2312"));string[]array2=newstring[]{"jpg","png","gif","bmp"};

    其中,第5行进行了Content-Type 的效验 ,如果上传的Content-Type以/分割后的第一个值不为jpeg。那么arg的值为false。

    第6行接收一个参数name。值赋值给text2

    第7行定义了一个数组。为允许上传的文件类型。

    主要问题在于下方:

    for(inti=0;i<array2.Length;i++){intnum=text2.ToString().Substring(text2.Length-3,3).IndexOf(array2[i]);if(num>-1){text2=array2[i];}}

    将array2的内容进行循环判断。如果text2后三位的值中存在array的某个值。

    那么 num 为0 ,进入if语句。 text2被重写为后辍。

    这里有个问题就是只有存在的时候才进行重写。不存在就不重写。也就是说我传入的name为text.aspx。那么也不会进行任何改变。

    最终文件存储操作是在143行。

    其中fileanme的值为 text(目录名) + str3的值。

    str3的值主要根据if条件语句进行赋值。只要text2的值不为空,那么最终的文件名就会以name的值进行结尾。导致任意文件上传。

    文件地址:UpPic/xxxPic/+时间+随机数+text2(可控)

    构造请求包

    UpPic/xxxPic/ 存在目录浏览

    找到shell名字

    哥斯拉连接,执行ipconfig

    确定为靶标内网地址,至此拿下靶标shell。

    相关文章

      网友评论

          本文标题:看我如何从外网直接拿下内网靶标

          本文链接:https://www.haomeiwen.com/subject/cqqkwktx.html