L3HCTF 2021 WriteUp

比赛感受:笑死,根本不会做 借用比赛群里发的一个表情包,Golang逆向属实给整麻了属于是 不过题目质量还可以,就做出来两个半题目,剩下的都是赛后复现 Web EasyPHP 从拿到Flag的内容来看,这道题貌似是要考察一个CVE:CVE-2021-42574,但其实这道题从很平常的代码逻辑角度去看也能做出来 打开网页直接有源码,按照代码高亮的一些规律很容易看出猫腻,如下图: 这里的猫腻在于普通的注释应该都是黄色的才对,而这里+!!直接被高亮成了运算符的绿色,L3HCTF也是呈现了不同的颜色,所以这里肯定有问题 把代码复制到VScode里面一眼就能看出来,存在不可见的Unicode控制字符: 所以这样去看,就会发现和网页中显示的代码逻辑不太一样了,if判断的条件变成了下面这样子(避免显示问题,控制字符用“字符x”代替): 1 2 3 4 5 if ( "admin" == $_GET[username] & 字符1 + !! 字符2 & "字符1CTF字符2l3hctf" == $_GET[字符1L3H字符2password] ) 这里的&变成单个出现,也就是按位与。所以需要做到三个条件均为1,最终才是1。第一个和第三个条件是由我们控制的,很简单;第二个条件尝试后发现是恒等于1的,所以只需要将Unicode控制字符做一下URLEncode再带入进去提交即可。URL-encode Unicode - Online Unicode Tools 最终Payload:username=admin&%e2%80%ae%e2%81%a6L3H%e2%81%a9%e2%81%a6password=%e2%80%ae%e2%81%a6CTF%e2%81%a9%e2%81%a6l3hctf Flag: flag{Y0U_F0UND_CVE-2021-42574!} 参考链接:Trojan Source Attacks,是和Flag一起出的,还有相关的研究论文可以参考 Misc a-sol We captured traffic in the IDC management network. Attachment 这题是一个流量分析题,是一个叫做IPMI的管理接口相关,好像是一套用来远程管理服务器的协议,文档可以在Intel官网找到:IPMI Specification, V2.0, Rev. 1.1: Document (intel.com)。用Wireshark查看协议细节,发现大部分协议包都是加密的,所以需要通过分析握手包来获取到解密的方法。 如上图,握手包一共有6个,分别是RMCP+ Open Session Request、RMCP+ Open Session Response以及4个RAKP Message,对应到文档中的第13.17-13.24节 在RMCP+ Open Session Request、RMCP+ Open Session Response的两个包中确定了整个过程中使用的完整性、保密性、认证算法,两个消息的这三个Payload格式是一致的,每个8字节共24字节位于数据的最末端。...

Nov. 15, 2021 · 5 min · 984 words

CNSS Recruit 2021 WriteUp - Web

Signin 考点:HTTP,略 Flag: CNSS{Y0u_kn0w_GET_and_POST} D3buger 考点:F12,略 Flag: CNSS{Wh4t_A_Sham3le55_thI3f} GitHacker 考点:Git泄露 Git_Extract直接出,略 Flag: CNSS{Ohhhh_mY_G0d_ur3_real_G1th4ck3r} 更坑的数学题 考点:脚本提交,略 Flag: CNSS{w#y_5o_f4st?} Ezp#p 考点:md5弱类型比较、变量覆盖 开局给出源码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?php error_reporting(0); require_once("flag.php"); show_source(__FILE__); $pass = '0e0'; $md55 = $_COOKIE['token']; $md55 = md5($md55); if(md5($md55) == $pass){ if(isset($_GET['query'])){ $before = $_GET['query']; $med = 'filter'; $after = preg_replace( "/$med/", '', $before ); if($after === $med){ echo $flag1; } } $verify = $_GET['verify']; } extract($_POST); if(md5($verify) === $pass){ echo $$verify; } ?...

Oct. 10, 2021 · 6 min · 1268 words

《Black Hat Go》学习笔记(三)

中文翻译版:https://github.com/YYRise/black-hat-go 数据库和文件系统 对SQL数据库的操作 Go使用database/sql包来进行对SQL数据库的操作。不同于Python中对不同数据库使用不同的依赖包和调用不同的方法,Go官方文档中其实是要求开发者都使用database/sql中的方法来进行统一的数据库操作,而要操作不同的数据库则需要导入不同的数据库驱动即可: To use database/sql you’ll need the package itself, as well as a driver for the specific database you want to use. You generally shouldn’t use driver packages directly, although some drivers encourage you to do so.(In our opinion, it’s usually a bad idea.) Instead, your code should only refer to types defined in database/sql, if possible. This helps avoid making your code dependent on the driver, so that you can change the underlying driver (and thus the database you’re accessing) with minimal code changes....

Sep. 1, 2021 · 11 min · 2156 words

《Black Hat Go》学习笔记(二)

中文翻译版:https://github.com/YYRise/black-hat-go 接下来第六章是讲SMB和NTLM的,但其实原版书里面讲的主要是基于SMB协议数据结构编码和解码的处理方式,对于具体的协议交互方式和算法细节书里只给了个官方文档的名称,但自己也没深入去研究过SMB的东西,所以顺便也把SMB相关的细节都看了一遍,内容比较多,所以单独写一篇记录一下 这一章书里的实战项目实现了一个SMB登录的过程,并且基于此写了个密码爆破程序,所以我的学习过程也是基于这个项目的代码的,地址https://github.com/stacktitan/smb,参考的版本也和书上的一致,为SMB2.1。 首先是一些做参考的文档和RFC: MS-SMB2 - Server Message Block (SMB) Protocol Versions 2 and 3 MS-SPNG - Simple and Protected GSS-API Negotiation Mechanism (SPNEGO) Extension MS-NLMP - NT LAN Manager (NTLM) Authentication Protocol ASN. 1 语法和编码简介 - Win32 apps A Layman’s Guide to a Subset of ASN.1, BER, and DER RFC-4178 RFC-2743 SMB的工作流程 搭建SMB服务 通过抓包可以分析出SMB的交互过程。在分析之前首先需要搭建一个SMB服务 Kali可以直接通过apt安装:sudo apt install samba,然后启动smbd服务即可:sudo systemctl start smbd.service Windows通过开启Windows功能里的SMB有关项来开启SMB服务,然后设置文件夹属性里的高级共享即可启用文件夹的SMB共享 搭建好服务后,在运行框里或文件资源管理器地址栏输入\\IP\即可访问对应的SMB服务了。 SMB工作流程分析 搭建好服务之后,直接使用运行或文件资源管理器访问并抓包,可以获取到完整的SMB数据包细节: 因为这一章不太关心具体的SMB文件操作等细节,所以这些数据包其实就可以简单的分成以下的五个部分: Negotiate Session Setup Tree Connect 具体的文件操作 Tree Disconnect 其中在Session Setup过程成功后,就可以多次进行步骤3-5,用于访问不同位置的共享。...

Aug. 22, 2021 · 10 min · 1989 words

《Black Hat Go》学习笔记(一)

中文翻译版:https://github.com/YYRise/black-hat-go TCP、扫描器和代理 TCP扫描程序 单个端口扫描 通过net.Dial(network, address)来连接一个地址的特定端口(network参数支持TCP、UDP、IP以及Unix Socket) 1 2 3 4 conn, err := net.Dial("tcp", "scanme.nmap.org:80") if err != nil{ return } 使用goroutine实现并发扫描 信号量+循环 信号量使用sync.WaitGroup实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var wg sync.WaitGroup for i := 1; i <= 1024; i++ { wg.Add(1) go func(j int) { defer wg.Done() address := fmt.Sprintf("scanme.nmap.org:%d", j) conn, err := net.Dial("tcp", address) if err !...

Jul. 27, 2021 · 11 min · 2214 words

2021夏令营记录

前言 基本情况: 学校:西南某末流985 专业:软件工程 成绩:48/209(去年保研率16%)+2.5加分,保研边缘 项目:一个国二 由于成绩较为拉垮,所以没有报特别好的学校(还是不去当炮灰了吧) 报名与入营结果: 北京邮电大学网络空间安全学院:入营顺利参加面试,最后拿到优营和offer 四川大学网络空间安全学院:入营,笔试被刷 中国科学院信息工程研究所:入营,优营 电子科技大学网络空间安全学院:入营 武汉大学网络空间安全学院:未入营 Timetable: 北京邮电大学网络空间安全学院 整体体验一般 7月2号开营,但是1号上午还没出入营结果,打了三个电话才接,说是下午晚上陆续会出 然后下午出了,系统内确认参营,我填了三个志愿: 第一志愿:8组,方向漏洞挖掘、渗透测试、固件安全、5G安全 第二志愿:7组,方向漏洞挖掘与分析、车联网安全、大数据分析 第三志愿:3组,方向网络安全攻防、大数据安全、移动互联网安全 2号下午四点开营仪式,结果下午两点钟打个电话给我问我参不参营,说是夏令营系统坏了之前的选择没了要我再选一次,我??? 然后开营仪式先介绍,然后公布安排,后面两天组内单独安排面试,说是志愿里的组都有面试机会,结果等了一晚上只有3组打了电话给我安排了面试,7组和8组无消息,官网联系方式里的招生群也没法进,所以我就主动发邮件给7组8组的指导老师询问情况(不是陶瓷,单纯问面试情况),无回复,估计是给拒了(说好的志愿里的组都有面试机会呢?) 3号早上面3组,一共只有七个人面: 问了一个政治问题如何看待中美关系,想到啥就说啥了 问研究生的计划,按写好的说 中英文自我介绍,没啥好说的,背稿子 SDN的安全风险(因为我的比赛项目是SDN) 本科除了安全攻防还有其他的研究内容吗 为什么不跟着学校的战队打CTF 然后是问我有什么问题,我问了研究方向发现3组不怎么做攻防,以安全研究和灾备为主 整个面了20分钟左右吧,感觉老师还是很好说话,脾气也还可以,面下来还是很舒服的,但就是没有问什么专业问题,准备了好久的安全没用上,项目问题也没细问 面完之后几个小时老师打电话来,发了offer,主要从事的是网络安全的研究,不怎么搞攻防 面试第二天收到了7组的邮件,说我的报名信息不合适7组要求所以没给面试,还没收到8组的消息,可能是因为成绩太捞了把我刷掉了,听说每个组里面都20+人,3组只有7个人面试 5号原定闭营式取消,只在夏令营系统里面录入优营结果,不知道过了几天,有一天佛系登上去看发现给了优营 四川大学网络空间安全学院 7月4号出的入营结果,5号下午模拟面试 模拟面试要求很严格,环节也很多,要求双机位,而且要求有备用网络,同时是准备了两套会议平台(主WeLink,备用tx会议),三点钟开始整到了晚上八点 后面安排一天进行笔试,然后安排一天进行面试,中间穿插着有专家讲座,实际有内容的就两天时间 笔试考数据结构、OS、计网、数据库还有网络安全基础,通知说的是45分钟100个单选题,实际笔试的时候有180个题,搞得有点离谱,实在做不完只做了120个左右,好多知识也记不太清了属于是蒙的(说明专业课一定要准备到期末考前的水平,考的知识点很广而且很多) 当天晚上就出了笔试结果,我因为只准备了两天的复习所以意料之中的被刷了(刷了大概一半的人) 第二天的面试又刷了2/3左右,最终优营只给了20多个人(一共入营了120+人) 电子科技大学网络空间安全学院 直接发了封邮件就算入营了: 此次夏令营为线上开展宣传活动,主旨在于给导师和学生搭建交流平台,不涉及推免招生。2022年度的推免招生,预计九月中下旬开展,针对于获得就读学校推荐免试攻读研究生资格的优秀应届本科毕业生。具体要求安排以届时通知为准。 说白了就只有一些宣传介绍和导师交流这类的东西,没有面试的环节 中国科学院信息工程研究所 通知上说的是七月初出入营结果,然后在6号晚上十一点才收到入营邮件。去年都是线下,今年突然改线上了,只有优营才能去线下游学,正式的活动时间也就4天(12-16号) 前几天没啥事,主要是提交一些之前要求的材料,以及进行了个线上的心理测试 12号开营仪式,然后有一些专业讲座;13号是研究室介绍,每个研究室一个多小时吧,讲的很详细,然后最后一个小时是和导师线上交流,13号晚上就选志愿了,我果断冲了以攻防为主的六室 14号调试设备,yysy信工所的效率是真的比川大高了不知道多少倍(3个老师同时测,流程也很简单),上午一两个小时就调试完了快50号人的设备,下午直接机试,今年只有编程没有CTF,三个题目一个小时: 左旋转字符串:剑指 Offer 58 - II. 左旋转字符串 - 力扣(LeetCode) (leetcode-cn.com) 有效字符串:20. 有效的括号 - 力扣(LeetCode) (leetcode-cn.com) 最少硬币:322. 零钱兑换 - 力扣(LeetCode) (leetcode-cn.com) 最后一题想到了是用动态规划做,但是没怎么写过动态规划的代码所以没写出来,测试用例就过了一半...

Jul. 3, 2021 · 1 min · 89 words

渗透某培训平台经历

某天工作室小伙伴发了个某学校培训平台的URL给我说有注入,于是我们俩就开始了愉快的渗(mo)透(yu)旅程 0x00 从注入摸到XXE 首先这个站有一个学生登录口和一个管理登录口: 自然是先用学生身份注册一个账号,进去之后到处摸,然后在课程支付的地方找到一个注入点 因为这个培训平台的所有课程都是付费的,所以首先需要支付才能进行学习。在点击支付后会生成一个支付记录,然后跳转至另一个外部网站进行支付过程。然后就找到一个支付记录查询的页面: 对应HTTP包抓一下,发现user_course_id参数有注入: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 GET /student/apply/uc/uc_pay_log_list.jsp?user_course_id=1102089&returl=uc%5fuser%5fcourse%5flist%2ejsp&13952 HTTP/1.1 Host: xxx Cookie: xxx Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="90" Sec-Ch-Ua-Mobile: ?0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Accept: 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.9 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: iframe Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Connection: close 是一个MSSQL的bool盲注,数据库用户也是DBA,但是由于不知名原因没法堆叠注入,所以没法直接os-shell 然后跑一手admin表,直接出用户名密码(好家伙,密码直接明文保存)...

Jun. 23, 2021 · 3 min · 546 words

Tor+Redsocks+iptables实现透明代理

透明代理的意思是:客户端根本不需要知道有代理服务器的存在,只需要配置好网络即可实现代理功能,其经常用于渗透测试中,作用除去本文提到的Tor隐藏IP之外,还可以用于内网渗透,使得主机如同真正处于内网之中一样,使我们的渗透更加方便顺利。 本文的目标场景:一台主机作为网关,在该主机上搭建Tor服务并做好流量转发,实现所有以该主机网关的机器均可以直接访问Tor(不需要任何代理设置)。 由于Tor本质上是个SOCKS代理,所以理论上本文的内容对于所有的SOCKS代理均适用。 Tor的安装&配置 安装Tor: 1 2 3 4 5 6 # CentOS sudo yum install epel-release sudo yum install tor # Ubuntu, Kali sudo apt install tor 修改Tor配置文件/etc/tor/torrc: 1 2 3 4 5 6 # 定义Tor监听的SOCKS端口 SOCKSPort 9050 # 屏蔽五眼联盟国家节点 ExcludeNodes {fr} ExcludeExitNodes {us},{au},{ca},{nz},{gb},{fr} 启动Tor服务并设置为开机启动: 1 2 sudo systemctl start tor sudo systemctl enable tor Redsocks的安装&配置 仓库:GitHub - darkk/redsocks: transparent TCP-to-proxy redirector 1 2 3 4 5 sudo yum install libevent-devel git gcc # 安装依赖 git clone darkk/redsocks cd redsocks make # 编译源代码 cp redsocks/redsocks /sbin # 放置在任意包含在环境变量的路径中即可,便于后续输入命令 创建配置文件/etc/redsocks....

Apr. 15, 2021 · 3 min · 555 words