Loading... # 第二阶段竞赛项目试题 ## 第⼀部分 网络安全事件响应(140分) 任务1:应急响应 A 集团的 WebServer 服务器被⿊客⼊侵,该服务器的 Web 应⽤系统被上传恶意软件,系统⽂件被恶 意软件破坏,您的团队需要帮助该公司追踪此⽹络攻击的来源,在服务器上进⾏全⾯的检查,包括⽇ 志信息、进程信息、系统⽂件、恶意⽂件等,从⽽分析⿊客的攻击⾏为,发现系统中的漏洞,并对发 现的漏洞进⾏修复。 本任务素材清单:Server服务器虚拟机。 受攻击的Server服务器已整体打包成虚拟机⽂件保存,请选⼿⾃⾏导⼊分析。 注意:Server服务器的基本配置参⻅附录,若题⽬中未明确规定,请使⽤默认配置。 请按要求完成该部分的⼯作任务。  ## 题目答案解析 对题⽬进⾏简单的分析: - Web 服务器,那么⿊客流量的最先⼊⼝⼀定是 HTTP 服务,⾃然会留下 HTTP ⽇志 - 被上传恶意⽂件 (webshell,后⻔,rootkit…) - 对应的恶意进 (CPU 利⽤率)、恶意⽤⼾、攻击路径对应的服务漏洞,本地漏洞等 …. 首先打开环境:发现可能不知道密码,这里可以使用kali的三种方式爆破。也可以使用单用户模式尝试登录修改密码。 爆破方式一:hydra -e ns 尝试使用空口令 -f 找到密码就停止 -vV 显示详细信息 -l 小写l用户名 -L 大写L用户名字典 -P 密码字典 kali自带的字典一般在/usr/share/wordlists有很多  爆破方式二:xhydra 图形化支持非常的nice  爆破方式三:msfconsole  当然此时是针对于ssh遇到其他服务协议同理即可。 单用户模式修改密码,也是考点:别再傻傻的不知道了 [单用户模式修改密码](https://blog.csdn.net/yangshihuz/article/details/118161844) 重启按shift然后按e之后修改这一步是关键  上面的是ubuntu,遇到CentOS怎么办 https://blog.csdn.net/ywd1992/article/details/83538730 (下次试试成功了再回来补充) 以下这条连接亲测成功 [Linux解决忘记密码的方法\_linux系统忘记开机密码怎么办-CSDN博客](https://blog.csdn.net/qq_39794999/article/details/125059316)  ``` chroot /sysroot/ #进入命令模式 echo 000000 | passwd --stdin root #配置新密码 000000 touch /.autorelabel # 安全配置 exit #退出命令模式 exit # 退出编辑 ``` #### 题1 1、题⽬要求找到攻击者 IP,最为常⽤的⽅法是直接通过⼊⼝流量 (HTTP 流量) 进⾏过滤,直接找到访问 IP 次数最多的,百分之 99 是攻击者 IP 1:先来到对应的⽇志路径 我这里是用kali的ssh去连接的,这样看起来好看一些。  !进⾏ IP 统计与过滤,对应⼿法如下: `awk -F " " '{print $1}' access.log.1 | sort | uniq -c` awk -F “ ” 表示以空格分离,里面的$1是表示第一个参数(可以学习一下啊apache2的日志内容格式,如:通过空格分隔内容\$1是ip,\$7访问路径),最后是处理的文件名 sort 是以默认的方式对文本进行排序 uniq -c是检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数  特此去学习一下,awk,sort , uniq三条命令 [linux中awk命令详解(最全面秒懂) - 郑琰 - 博客园 (cnblogs.com)](https://www.cnblogs.com/zhengyan6/p/16290156.html) [Linux uniq 命令 | 菜鸟教程 (runoob.com)](https://www.runoob.com/linux/linux-comm-uniq.html) 很明显就是 192.168.1.7 了,为了百分百确认,我们可以观察其访问的 Web 路径,是否有恶意 ⾏为,⼿法如下: `awk -F " " '{print $7}' access.log.1 | sort | uniq -c`  基本可以确认,是使⽤了⽬录扫描,并且存在 0admin 这种特殊访问情况,则该 IP 确认为恶意 IP #### 题2,题3,题5 对于操作系统,我们可以直接从 User-Agent 字段查看,⼿法如下: `cat access.log.1 | grep "192.168.1.7"`  所谓 “找出攻击者资产收集所使⽤的平台” 即攻击者所使⽤第三⽅辅助进⾏资产收集,我们可以重点关 注第三⽅流量,⽽当我过滤攻击者 IP 后,发现其使⽤过滤 SHODAN ⾸次时间更为简单,这⾥不多赘述 #### 题4 常⻅⽬录扫描⼯具指纹dirsearch dirb gobuster dirbuster ffuf wfuzz 提交攻击者⽬录扫描所使⽤的⼯具名称,对应⼯具指纹  #### 题6,题7 1.php可以换成别的或者试试,感觉有运气才能像这样试出文件名吧,一看就很可疑,在命令执行  为了更加精准的判断,可以去网站目录下搜索文件内容 `.`的意思代表当前⽬录所有⽂件 (包括⽬录内的⽂件) find . -name "\*.php" | grep <guess_file_name.php> 也可直接检索内容,不过需要进⼊每个⽬录,因为该命令仅检索当前⽬录的⽂件 find . | xargs grep <what_you_want_to_find>  找到攻击者写入的恶意后门文件,提交文件名(完整路径)和后门密码:/var/www/html/data/avatar/1.php密码2022 隐藏在正常源码中的 webshell 恶意代码: /var/www/html/data/avatar/footer.php ⽂件中 > 做的时候发现把这玩意⼉全做了...怎么办呢? 对于这种题⽬,⼀般我们优先考虑 webshell ,因为其也是后⻔的⼀种,但是这⾥题⽬ 第七题 ,却明 显提⽰它才是我们要去找的 Webshell,所以第六题,我们去寻找的就是其他后⻔,⽽⾮ Webshell。 #### 题8 > 那么这⾥基本脱离 Web ⽇志,我们可以查看系统痕迹 > > 历史命令 history > > 恶意进程(进程情况) ps -ef (-aux) > > 外带链接 (netstat -tupan) 外带流量 CUP 占⽤率 > > 恶意⽤⼾ /etc/passwd /etc/shadow > > 恶意定时任务 … 该题,我们可直接从历史任务中发现,如下,我们可以看到明显的定时任务编辑痕迹  查看⼀下,每次重启会运⾏该命令  分析⼀下,可以看到明显的恶意代码:  history历史命令还发现关键线索   ./prism /root/.mal/prism 做完!!! ## 第二部分 数字取证调查(120分) 任务2: 网络数据包分析 A集团的网络安全监控系统发现恶意份子正在实施高级可持续攻击(APT),并抓取了部 分可疑流量包。请您根据捕捉到的流量包,搜寻出网络攻击线索,分解出隐藏的恶意程序, 并分析恶意程序的行为。 本任务素材清单:捕获的网络数据包文件。 请按要求完成该部分的工作任务  1、直接搜索ftp然后追踪TCP流admin/Root123  2、搜http,然后追踪TCP流量,橙红色是服务端,蓝色的是客户端。e45e329feb5d925b ps: 据说这是Bihinder(冰蟹)的经典流量分析,该密钥为连接密码32的MD5值的前16位,默认的连接密码是`rebeyond`下面这两篇文章写的挺好的 [冰蝎:命令执行操作的流量分析\_e45e329feb5d925b-CSDN博客](https://blog.csdn.net/weixin_52544058/article/details/127340035) [冰蝎、蚁剑、哥斯拉的流量特征 - 冬璃 - 博客园 (cnblogs.com)](https://www.cnblogs.com/-andrea/p/17473499.html) 3、也可以直接文件--导出对象--HTTP看到 shell.Php  4、搜http追踪Shell.Php的TCP流,(整个会话下拉框,选第二个流量变蓝)从画红线的地方一直复制到最后的AES解密,key就是第一题的答案。  然后再进行一次base64解密  `flag:`Windows NT WIN-935BICNFFVK 10.0 build 17763 (Windows Server 2016) AMD64 ## 第三部分 应用程序安全(90分) 任务3:代码审计 代码审计是指对源代码进行检查,寻找代码存在的脆弱性,这是一项需要多方面技能的 技术,作为一个高级软件开发者,代码安全作为你的日常工作中非常重要的一部分,因为大 部分代码从语法和语义上来说是正确的,你必须依赖你的知识和经验来完成工作。每个团队都 将获得一个代码列表,查看每一段代码然后回答答题卡里的问题。 本任务素材清单:答题模板上提供的代码片段。 请按要求完成该部分的工作任务。 这里有两个源代码C和Python的二选一还是比较人性化的 以下就是代码审计的葵花宝典了吧!!!能看完看完!!! [https://www.bookstack.cn/read/Tencent-secguide/spilt.8.C,C++%E5%AE%89%E5%85%A8%E6%8C%87%E5%8D%97.md](https://www.bookstack.cn/read/Tencent-secguide/spilt.8.C,C++%E5%AE%89%E5%85%A8%E6%8C%87%E5%8D%97.md) #### C: 这里是16行 别的编译器可能不是 按照比赛的时候来(问题不大)  **在对指针、对象或变量进行操作时,需要能够正确判断所操作对象的原始类型。 如果使用了与原始类型不兼容的类型进行访问,则存在安全隐患。** 错误: ``` const int NAME_TYPE = 1; const int ID_TYPE = 2; //该结构体根据msg_type进行区分,如果在对MessageBuffer进行操作时没有判断目标对象,则存在类型混淆 struct MessageBuffer { int msg_type; union { const char *name; int name_id; }; }; void Foo() { struct MessageBuffer buf; const char* default_message = "Hello World"; //设置该消息类型为NAME_TYPE,因此buf预期的类型为msg_type + name buf.msg_type = NAME_TYPE; //没有判断目标消息类型是否为ID_TYPE,直接修改nameID,导致类型混淆 buf.name = default_message; printf("Pointer of buf.name is %p\n", buf.name); buf.name_id = user_controlled_value; if (buf.msg_type == NAME_TYPE) { printf("Pointer of buf.name is now %p\n", buf.name); //以NAME_TYPE作为类型操作,可能导致内存读写 printf("Message: %s\n", buf.name); } else { printf("Message: Use ID %d\n", buf.name_id); } } ``` 正确: ``` void Foo() { struct MessageBuffer buf; const char* default_message = "Hello World"; // 设置该消息类型为 NAME_TYPE,因此buf预期的类型为 msg_type + name buf.msg_type = NAME_TYPE; buf.name = default_msessage; printf("Pointer of buf.name is %p\n", buf.name); // 判断目标消息类型是否为 ID_TYPE,不是预期类型则做对应操作 if (buf.msg_type == ID_TYPE) buf.name_id = user_controlled_value; if (buf.msg_type == NAME_TYPE) { printf("Pointer of buf.name is now %p\n", buf.name); printf("Message: %s\n", buf.name); } else { printf("Message: Use ID %d\n", buf.name_id); } } ``` **2 代码可能会受到的网络安全攻击类型** 内存破坏类型混淆漏洞 **3 结合代码简述漏洞产生的原因** 没有判断目标信息类型是否为ID_TYPE,直接修改了nameID,可导致类型混淆产生 #### Python: 1 存在脆弱性的代码行数  [Python3 url解析,urllib.parse\_urllib.splitquery-CSDN博客](https://blog.csdn.net/ZuoSuQu/article/details/90147557) **2 代码可能会受到的网络安全攻击类型** 任意文件读取漏洞 **3 结合代码简述漏洞产生的原因** **在do\_GET方法中,通过urllib.splitquery(self.path)获取到参数** **并给他赋值到uri\_c,再使用open()打开uri\_c中的内容,从而产生任意文件** # 第三阶段竞赛项目试题 #### 任务1:答题系统服务器(30分) 服务器场景:web2 IP地址:  哎,这个是多么似曾相识的题目呀,好熟悉,好像是上次金砖,没做出来。。。  看源码就知道了,计算一个运算时,然后提交给POST的请求的check.php的页面的answer参数。 看看check.php的源码  很简单,笑哭,自己这么久做不出来 由于运算表达式会一直自动变,所以手速要快,抓到点击提交按钮的请求包,而不是返回表达式的响应包哈(返回包要放掉,记得是抓请求包哈),然后记得停住哈浏览器代理的burp哈,不然的页面又变了session会变就不行。最后如下图计算结果提交即可  #### 任务2:渗透测试 C集团上新了一台新的服务器,需要您的团队对服务器进行风险评估,找出所有可能存在的漏洞,包 括但不限于敏感信息泄露、文件上传等漏洞。 本任务素材清单:Server服务器虚拟机、kali虚拟机 注意: 靶机ip地址为:192.168.100.100/24,靶机为vmware桥接,请自行更改本机ip地址与其联通 |1、|写 出 所 有 的 任 意 文 件 下 载 漏 洞 payload 并写出如何发现漏洞(注:写 出所有的解题步骤并截图)(30 分)| |2、|题目:写出所有的敏感信息泄露漏洞并 写出所有的payload(注:写出所有的解题 步骤并截图)(20分)| |3、|题目:写出mysql数据库中的mysql库中 的user表中user字段里d开头的用户名 (注:写出所有的解题步骤并截图)(20 分)| |4、|题目:写出wordpress的用户名以及密 码(注:写出所有的解题步骤并截图)(30 分)| |5、|题目:getshell并截图(注:写出所有的解 题步骤并截图)(40分)| |6、|题目:现在拿到了一个www-data权限的 webshell,接下来你会做什么操作,写 出你的操作思路(20分)| 1. 查看首页就有提示,有个文件路径,get请求,后面填上文件名即可下载文件  就像这样,目录穿越,下载任意的文件 `http://192.168.100.100/wp-content/plugins/zip-attachments/download.php?za_file=../../../../../../etc/passwd`  接着扫描一下目录  发现两个重要目录,等下可能就会用到 2. 这里我们访问以下rebots.txt明显的一堆的文件名,敏感信息泄露,但是我们不能一个一个访问,但是可以做个字典呀,全部复制下来保存到txt,然后跑字典目录一样呀  访问这三个呗,www.zip网站的备份源码都可以下载了呀。 Ddownload.php也很明明显了呀,审计一下,只是过滤了一些无关紧要的字符,可以直接访问wp-config.php。以后遇到wordpress的题目就记住,能看wp-config.php就看,关键信息一般就在这,重要配置文件。  左边是通过网页访问的可以看到关键信息,右边是下载的源码内看到的  3. 现在有了数据库的连接用户密码了,可以登录phpmyadmin直接查看了。  4. 继续看wordpress的数据库的wp_user表  第二行base64解码一下就是admin密码  5. getshell  写入之后即可访问`http://192.168.100.100/wp-content/plugins/akismet/index.php`getshell  6. 提权 操作 webshell 进⾏反弹 shell,先获得可交互式的 SHELL,然后对该系统进⾏⼀定的本地 信息收集,为本地权限提升做好准备,提权成功后对该 Web服务器留下后⻔,避免权限丢失⽆法对内 ⽹进⾏横向渗透,然后考虑对内⽹进⾏信息收集,若⽬标存在 AD 域环境,则进⾏域渗透,碰到⽆法 出⽹的 PC 则对其进⾏代理,使之出⽹,重复提权步骤,拿到最⾼权限后驻留后⻔控制更多 PC,考虑 定位域控,数据库等关键服务器,扩⼤攻击⾯的同时,拿到更多的⾁鸡和数据,最后维持⾃⼰的所有 权限,扫尾时进⾏⽇志清理,删除⽊⻢后⻔,断掉所有动态连 #### 任务三: Reverse(80分) 1.简单到哭泣,IDA一看直接就有  2.{hell0_w0rld}这么简单的题目竟然也是省赛题???  ![image.png] (https://www.oisec.cn/usr/uploads/2023/11/2278363536.png) 3.{hack1ng_fo1_fun}这么简单的题目省赛???   4. {i_l0ve_you}简单的base64,哎    #### 任务4:数据分析(100分) 1.从靶机服务器的FTP上下载capture.pcapng数据包,账号名: ftp,密码:空,使用Wireshark分析数据包找出telnet服务器 (路由器)的用户名和密码,并将密码作为Flag值提交。flag格 式:flag{密码} 2.使用Wireshark分析capture.pcapng数据流量包,telnet服务器是 一台路由器,找出此台路由器的特权密码,并将密码作为Flag值 提交。flag格式:flag{密码} 3.使用Wireshark分析capture.pcapng数据流量包,telnet服务器是 一台路由器,正在被192.168.181.141这台主机进行密码爆破,将 此主机进行密码爆破的次数作为Flag值提交。flag格式:flag{爆 破次数} 4.使用Wireshark分析capture.pcapng数据流量包,ftp服务器已经 传输文件结束,将登陆服务器后的第一条指令作为Flag值提交。 flag格式:flag{第一条指令 5.使用Wireshark分析capture.pcapng数据流量包,ftp服务器已经 传输文件结束,将建立FTP服务器的数据连接的次数作为Flag值提 交。flag格式:flag{连接次数} 6.使用Wireshark分析capture.pcapng数据流量包,ftp服务器已经 传输文件结束,将登陆服务器后第一次使用数据连接的端口号作 为Flag值提交。flag格式:flag{第一次连接端口} 7.使用Wireshark分析capture.pcapng数据流量包,web服务器地址 是192.168.181.250,其使用的脚本语言为php,将服务器使用php 的版本号作为Flag值提交。flag格式:flag{php版本号} 8.使用Wireshark分析capture.pcapng数据流量包,web服务器地址 是192.168.181.250,将web服务器软件的版本号作为Flag值提 交。flag格式:flag{web软件版本号} 9.使用Wireshark分析capture.pcapng数据流量包,找出数据包当中 所有HTTP状态码为404的报文,将这些报文的数量作为Flag值提 交。flag格式:flag{报文数量} 10.使用Wireshark分析capture.pcapng数据流量包,这些数据中有非 常多的 ICMP 报文,其中有一个设备是路由器, IP 地址为 192.168.181.25,将路由器上主动发出的ping请求的数量作为 Flag值提交。flag格式:flag{请求数量} 11.使用Wireshark分析capture.pcapng数据包文件,这些数据中有非 常多的ICMP报文,这些报文中有大量的非正常ICMP报文,找出类 型为重定向的所有报文,将报文重定向的数量作为Flag值提交。 flag格式:flag{重定向数量 12.使用Wireshark分析capture.pcapng数据包文件,这些数据中有 ssh报文,由于ssh有加密功能,现需要将这些加密报文的算法分 析出来,将ssh客户端支持的第一个算法的名称作为Flag值提交。 flag格式:flag{第一个算法名称} 13.使用Wireshark并分析capture.pcapng数据包文件,这些数据中有 ssh报文,由于ssh有加密功能,现需要将这些加密报文的算法分 析出来,将ssh服务器支持的第一个算法的密钥长度作为Flag值提 交。flag格式:flag{第一个算法密钥长度} --- 1.路由器交换器啥的吧,`>`是进入普通用户模式,`#`是进入特权模式,所以接下来就有思路了。直接搜telnet contains">"  2.直接搜索telnet contains"#"  3.认真审题哈,就是搜telnet看看报文,追tcp流,搜% Login invalid,即是搜telnet contains"% Login invalid"  4.搜ftp,追踪TCP流即可,都试试,说不定哪个  5.由于成功是230,所以直接搜ftp contains"230",好像就成功一次  6.这个20,21,23。。。。都试试 7.搜一波http contains"-By"或者"PHP"都行 PHP/5.5.38  8.在http里面翻找一波就能找到Apache/2.2.15  9.直接搜http contains"HTTP/1.1 404 Not Found",得到的也许是26或者52 10.搜索ip.src==192.168.181.25&&icmp,可能是2150,有些是不可达和重定向的不知道算不算,也可能搜ip.dst==192.168.181.25&&icmp试试 11.由于重定向的icmp的包的type等于5所以就可以直接搜icmp.type==5  12. 搜ssh,追踪下TCP流,有很多数据,第一个应该也就是都试试 13.搜ssh  最后修改:2023 年 12 月 21 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏