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