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

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

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

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

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

主动扩大范围扫描x.x.95.x-x.x.110.x这些段,直接通过fofa api查询所有记录

然后使用我B哥的webalivescan扫描

https://github.com/broken5/WebAliveScan

发现这个站打开跳转

http://x.x.x.x:81/x.aspx

和某个内网靶标端口文件名都对上了

使用弱口令进入后台,但是任何功能都没有

2.寻找靶标系统源码

通过远海的套路从fofa寻找相同系统,有一百多个站基本备份就是稳得

webalivescan再扫一波备份,扫到一个web.rar

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-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。

你可能感兴趣的:(看我如何从外网直接拿下内网靶标)