#开始之前发个牢骚:完蛋这次除了miscAK其他全部把我撂倒,刷了两星期题白刷,狠狠刮自己几个大耳刮子清醒一下,才怪!撂倒了就站起来,腿又没断,可以再坚持一下。菜,就多练!!!

  1.下列关于用户口令说法错误的是(C)

  A. 口令不能设置为空

  B. 口令长度越长,安全性越高

  C. 复杂口令安全性足够高,不需要定期修改

  D. 口令认证是最常见的认证机制

  2.下列关于木马病毒的特性,不正确的是( B)

  A. 隐蔽性

  B. 主动传播性

  C. 自动运行性

  D. 破坏性

  3.鉴别的基本途径有三种:所知、所有和个人特征,以下哪一项不是基于你所知道的:(B)

  A. 全球排名第一wps下载 口令

  B. 令牌

  C. 知识

  D. 密码

  4.账号锁定策略中对超过一定次数的错误登录账号进行锁定是为了对抗以下哪种攻击?(C)

  A. 分布式拒绝服务攻击(DDoS)

  B. 病毒传染

  C. 口令暴力破解

  D. 缓冲区溢出攻击

  5.下面不属于常用的浏览器的安全措施的是(B)

  A. 删除和管理Cookies

  B. 不点击网站的广告

  C. 禁用ActiveX控件

  D. 删除浏览器历史纪录

  6.以下不能设置口令加密的文件是(D)

  A. ZIP

  B. PPT

  C. PDF

  D. TXT

  7.有关危害国家秘密安全的行为的法律责任,正确的是:(A)

  A. 严重违反保密规定行为只要发生,无论产生泄密实际后果,都要依法追究责任

  B. 非法获取国家秘密,不会构成刑事犯罪,不需承担刑事责任

  C. 过失泄露国家秘密,不会构成刑事犯罪,不需承担刑事责任

  D. 承担了刑事责任,无需再承担行政责任或其他处分

  8.在设计信息系统安全保障方案时,以下哪个做法是错误的:(C)

  A. 要充分切合信息安全需求并且实际可行

  B. 要充分考虑成本效益,在满足合规性要求和风险处置要求的前提下,尽量控制成本

  C. 要充分采取新技术,在使用过程中不断完善成熟,精益求精,实现技术投入保值要求

  D. 要充分考虑用户管理和文化的可接受性,减少系统方案障碍

  9.由于发生了一起针对服务器的口令暴力破解攻击,管理员决定对设置帐户锁定策略以对抗口令暴力破解。他设置了以下账 户锁定策略如下: 复位账户锁定计数器 5 分钟 账户锁定时间 10 分钟 账户锁定阀值 3 次无效登陆 以下关于以上策略设置 后的说法哪个是正确的(B)

  A. 设置账户锁定策略后,攻击者无法再进行口令暴力破解,所有输错的密码的拥护就会被锁住

  B. 如果正常用户部小心输错了 3 次密码,那么该账户就会被锁定 10 分钟, 10分钟内即使输入正确的密码,也无法登录系统

  C. 如果正常用户不小心连续输入错误密码 3 次,那么该拥护帐号被锁定 5 分钟, 5 分钟内即使交了正确的密码,也无法登录系统

  D. 攻击者在进行口令破解时,只要连续输错 3 次密码,该账户就被锁定 10 分钟,而正常拥护登陆不受影响

  10.为了防御网络监听,最常用的方法是(B)

  A. 采用物理传输(非网络)

  B. 信息加密

  C. 无线网

  D. 使用专线传输

  11.在网络安全中,在未经许可的情况下,对信息进行删除或修改,这是对(C)的攻击

  A. 全球排名第一telegram下载 wps下载 可用性

  B. 保密性

  C. 完整性

  D. 真实性

  12.使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务,这属于(A)漏洞

  A. 拒绝服务

  B. 文件共享

  C. BIND漏洞

  D. 远程过程调用

  13.能完成不同的VLAN之间数据传递的设备是(D)

  A. 中继器

  B. 二层交换器

  C. 网桥

  D. 路由器

  14.在 OSI 参考模型中有 7 个层次,提供了相应的安全服务来加强信息系统的安全性,以下哪一层提供了保密性、身份鉴别、数据完整性服务?A

  A. 网络层

  B. 表示层

  C. 会话层

  D. 物理层

  15.某单位人员管理系统在人员离职时进行账号删除,需要离职员工所在部门主管经理和人事部门人员同时进行确认才能在系 统上执行,该设计是遵循了软件安全哪项原则   B

  A. 最小权限

  B. 权限分离

  C. 不信任

  D. 纵深防御

  16.关于 linux 下的用户和组,以下描述不正确的是 C

  A. 在 linux 中,每一个文件和程序都归属于一个特定的“用户”

  B. 系统中的每一个用户都必须至少属于一个用户组

  C. 用户和组的关系可是多对一,一个组可以有多个用户,一个用户不能属于多个组

  D. root 是系统的超级用户,无论是否文件和程序的所有者都具有访问权限

  17.张三将微信个人头像换成微信群中某好友头像,并将昵称改为该好友的昵称,然后向该好友的其他好友发送一些欺骗消息。该攻击行为属于以下哪类攻击? D

  A. 口令攻击

  B. 暴力破解

  C. 拒绝服务攻击

  D. 社会工程学攻击

  18.以下网络地址中属于B类的可用IP地址的是(D)

  A. 192.12.31.2

  B. 191.12.255.255

  C. 55.32.255.0

  D. 128.34.255.9

  19.用IE浏览上网时,要进入某一网页,可在IE的URL栏中输入该网页的(D)

  A. 只能是IP地址

  B. 只能是域名

  C. 实际的文件名称

  D. IP地址或域名

  20.P地址能唯一地确定Internet上每台计算机与每个用户的(C)

  A. 距离

  B. 费用

  C. 位置

  D. 时间

  21.域名系统DNS的作用是(B)

  A. 存放主机域名

  B. 将域名转换成IP地址

  C. 存放IP地址

  D. 存放邮件的地址表

  22.子网掩码为255.255.0.0,下列哪个 IP 地址不在同一网段中(C)

  A. 172.25.15.201

  B. 172.25.16.15

  C. 172.16.25.16

  D. 172.25.201.15

  23.三个网段 如下所示: 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24 能够汇聚成下面哪个网段(D)

  A. 192.168.1.0/22

  B. 192.168.2.0/22

  C. 192.168.3.0/22

  D. 192.168.0.0/22

  24.与计算机硬件关系最密切的软件是( D)

  A. 编译程序

  B. 数据库管理程序

  C. 游戏程序

  D. OS

  25.用户在设置口令时,以下原则哪个是错误的( D)

  A. 严禁使用与账号相同或相似的口令

  B. 不要使用与个人有关的信息作为口令内容

  C. 不要设置短于6个字符或仅包含字母或数字的口令

  D.可以使用空口令

  26.下列关于CA的说法错误的是( D)

  A. CA是负责发布证书的一组机构

  B. CA负责为用户分配公共密钥和私人密钥

  C. CA可分为企业CA和独立CA

  D. 根CA可以没有证书

  27.下列关于漏洞的说法,不正确的是(D )

  A. 漏洞是指计算机系统在硬件、软件、协议的设计、具体实现以及系统安全策略上存在的缺陷和不足

  B. 安全漏洞是信息安全的核心问题

  C. 漏洞狭义的概念是指软件程序漏洞或缺陷

  D. 为了防止计算机的漏洞被黑客利用,我们可以关掉计算机的“自动更新”功能

  28.下列关于计算机病毒说法错误的是( C)

  A. 有些病毒仅能攻击某一种操作系统,如winD. Ows

  B. 病毒一般附着在其他应用程序之后

  C. 每种病毒都会给用户造成严重后果

  D. 有些病毒能损坏计算机硬件

  29.我国正式公布了电子签名法,数字签名机制用于实现( A)需求

  A. 抗否认

  B. 保密性

  C. 完整性

  D. 可用性

  30.在Windows 系统中可以察看开放端口情况的是:(D )

  A. Nbtstat

  B. Net

  C. Net show

  D. Netstat

  31.小明是某大学计算科学与技术专业的毕业生,大四上学期开始找工作,期望谋求一份技术管理的职位,一次面试中,某公司的技术经理让小王谈一谈信息安全风险管理中的背景建立的几本概念与认识,小明的主要观点包括: (1)背景建立的目的是为了明确信息安全风险管理的范围和对象,以及对象的特性和安全要求,完成信息安全风险管理项目的规划和准备; (2)背景建立根据组织机构相关的行业经验执行,雄厚的经验有助于达到事半功倍的效果 (3)背景建立包括:风险管理准备、信息系统调查、信息系统分析和信息安全分析 (4)背景建立的阶段性成果包括:风险管理计划书、信息系统的描述报告、信息系统的分析报告、信息系统的安全要求报告、 请问小明的论点中错误的是哪项:B

  A. 第一个观点

  B. 第二个观点

  C. 第三个观点

  D. 第四个观点

  32.下面选项中关于对称密码体制和非对称密码体质描述错误的是( C)

  A. 对称密码体制通信双方拥有同样的密钥,使用的密钥相对较短,密文的长度往往与明文长度相同。

  B. 非对称密码体制中使用的密钥有两个,一个是对外公开的公钥,可以象电话号码一样进行注册公布;另一个是必须保密的私钥,只有拥有者才知道。

  C. 与非对称密码体制相比,对称密码体制加解密速度较慢。同等安全强度下,非对称密码体制要求的密钥位数要多一些。

  D. 非对称密码体制主要是为了解决对称密码体制的缺陷而提出的,即为了解决对称密码体制中密钥分发和管理的问题,以及不可否认的问题。

  Misc

  一、看不到我

  打开压缩包后发现是一个gif

  用ezgif.com free online animated GIF editor分割gif动图得到flag

  ff7f3117b3fd425291c1545e9cd05e6c.png4b15e8d7df274bbf9fbf209308188b38.png 全球排名第一telegram下载285f45b9256f4bbbb9e8bdc96b799084.png

  gxctf{he11o hongke}

  二、我上早八

  打开压缩包发现是一张图片,用Stegsolve打开查看文件信息得到flag:

  eeb9ee8d78aa47d6863528d3f302af45.png

  gxctf{w0_5hang_za0_8}

  三、zip家族

  打开文件,发现第一个需要解码的hint

  5df4ac82a55c4f278d723db92c3fa2be.png

  用随波逐流base32解码

  dbecd9fc45804b77a9c420dce5eb2c79.png

  输入可以解压得到第二个hint

  ee09634aeafa4e45a3a2a0c44af64060.png

  一眼直接用ARCHPR暴力破解

  e4a9316ea86640e6858b2ee1179803aa.png

  输入密令得到一个flag压缩包,发现仍然需要密码,这里可以选择继续爆破或者直接用7-zip打开,我们直接用7zip打开拿到flag

  ca8dec072c5e4ea48803824891c22df4.png

  gxctf{a25c6eb46ad26bd4f8bf45ab3304d4558}

  然后我们再爆破发现爆破不出来,这个flag压缩包没有提示,用010editor打开看看是不是伪加密(为什么这里才开始常规?当然是因为提交flag更重要啊[狗头]):

  1744247906b04baa920f6833b49fca9d.png

  发现是伪加密,修改一下。

  这里贴一个其他大佬的压缩包隐写的总结:

  压缩文件隐写_zip隐写-CSDN博客

  搜索504B0102,其后五六字节就是加密字符,将“0900”改为“0000”取消加密状态:

  61f2a8f827a84b33b42a7d8b717c40c0.png

  此时可以解压得到flag:

  30fb2caeb94848089f1ebc4dfb783c5b.png

  四、BOT

  打开附件发现是个音频,用AU分析频谱:

  713deb619c624769896632712dca6649.png

  发现跟一般的音频频谱不同,由许多条状频谱组成,可能是摩斯密码或者电信号。用慢扫电视扫不出图片来,那大概率就是摩斯密码了。

  而一般音频频谱可能长这样(用我的一个音频为例)

  0f150f1407994a8daf435e7f1cd2ed6e.png

  用摩斯密码解码时搜索发现是BUUCTF原题:BUU-Crypto-robomunication_buuctf crypto robomunication-CSDN博客

  这里附上一篇大佬的翻译详解:

  密码学_robomunication – 简书

  翻译成摩斯密码:

  …. . .-.. .-.. — .– …. .- – .. … – …. . -.- . -.– .. – .. … -… — — .–. -… . . .–.

  附一张摩斯码对照图:

  598ab2bdcb8f4858a6567c8c423b8991.png

  用随波逐流解码:

  b0674fb8a4f54c08b105f3634cd040c1.png

  因为有原题,不用再尝试是itisboopbeep还是boopbeep,直接flag:

  gxctf{boopbeep}

  五、我不是舔狗

  下载附件,打开发现一张照片

  e3fd90630aab4fab9e8779e3c712ef55.png

  查看这张照片的属性,没发现有什么信息,根据镜像翻转,发现玻璃中有英文字母

  transcendence resort

  去浏览器搜索一下:

  8dc578a2b4cc4cccbb46d625d6d2df0a.png

  发现一家酒店网址就是这串英文字母,那不用说,小帅(小美)就在这里

  20c286492b4d4083b63ed9be2d09f558.png

  根据尝试拼音、英文和中文发现flag就是:

  gxctf{青城山心越温泉度假酒店}

  Web

  一、大圣在哪里

  打开网址:

  e02f655e44854dcfb56907bfbb327004.png

  查看源码:

  eb7285e711a34326a0fbbe30dff161f9.png

  根据提示跳转到这个页面得到flag:

  1d43939568e446709644791641eb9562.png

  gxctf{He1_SheNg_huA_5_kong!!}

  二、JS Challenge

  打开附件:

  9a3f887a0cee45b08a712c1b0904d123.png

  查看源代码(截图不完整,问就是因为url编码太长放不下)

  8c20025ce8494068a3f2bf1231f0000f.png

  用在线工具转换查看它的JavaScript脚本:

  6338c502237349d6838afc024fb46eae.png

  解出md5值是2020114,那2020114应该就是复活咒语,进行尝试

  4cdcf742aa5b4856b27c1d2002ef0985.png

  根据脚本提示用CyberChef计算出MD5值就是flag

  28c0be57e1b7466ca461bb40b50cbbe6.png

  gxctf{f3ece8a5133b36d6dd430b932b95e317}

  三、懂不懂什么叫传参啊

  根据题意同时进行get和post传参:

  4c671b0fd10f4b39a09855a6ea255634.png

  gxctf{336d4c373f1762a981d724d9934a59b2}

  四、黑手

  打开网址查看源代码

  77bb7e0a39ce4b8ca5e43ae66eb16b6b.png

  没有头绪,过了一会想到题目说“黑手“,web里面黑手。。。。。。。盲猜这题考robots.txt协议(吐槽:我真是无了大语,真的很抽象,出题人一看就是B站刷多了,从我上早八到将军gif隐写和我不是舔狗再到这个黑手,真是抽象。但是你别说,题挺好玩的hhhh),输入robots.txt尝试一下:

  f7aab29f3f82440282ccbb1edac96d85.png

  根据提示继续进入这个网页

  2bbafedefe1547da82e67c838886e0d4.png

  用随波逐流base解码

  b13d1d24be274cd286d51cc13abdce10.png

  gxctf{ni_shi_Bu_sh!_Me1_jianguo_he!@shou}

  五、EZ_RCE

  打开网址:

  df3e132f9bdd4f568331a6e185109cee.png

  这题考察RCE绕过,按我的思路做法应该是命令拼接(学艺不精啊,比赛的时候没拼出来,只能赛后复现了,结果赛后发现思路错了,这题是无参数RCE绕过)

  贴一篇大佬的命令执行漏洞总结:

  命令执行篇-CSDN博客

  看官方wp查了一点其他大佬的总结:

  PHP 执行外部命令函数:exec()、system()、passthru()、shell_exec()、popen()_php popon 和 exec-CSDN博客

  发现PHP一共四种常用内置函数执行系统外部命令:

  exec()、system()、passthru()、 shell_exec()

  被禁掉三种(你知道这对于一个初学web的人来说是多大的伤害嘛(蓝瘦香菇.jpg)打眼过去一看我知道的命令都给禁了,天都塌了啊!!!)

  命令执行的函数:

  又到了贴大佬总结的时候:

  Linux命令大全—-常用文件操作命令_基本文件命令操作有关闭和哪些项-CSDN博客

  Linux命令之文件内容查看(cat、tac、nl、more、less、head、tail)_cat打开文件后是什么字符集-CSDN博客

  总结rce(远程代码执行各种sao姿势)绕过bypass_远程命令执行绕过-CSDN博客

  无参数RCE绕过的详细总结(六种方法)_无参数的取反rce-CSDN博客

  命令执行RCE及其绕过详细总结(各情景下的绕过)_命令执行绕过-CSDN博客

  贴一个参考手册和对照表:

  HTML URL 编码参考手册

  URL编码对照表

  根据官方wp的做法,使用函数绕过

  payload=?cmd=passthru(%27nl%09/flag%27);

  330c49af1dbe4887a65d090c53781dd1.png

  gxctf{023299564b0db47d5f3e476a254d0c21}

  或者payload=?cmd=var_dump(file(chr(47).chr(102).chr(108).chr(97).chr(103)));

  读取根目录的 flag

  9eb5ee2ce906442a84d7131218ff887e.png

  Re

  一、pycc签个到

  这题考察py和pyc反编译的关系,反编译是一种逆向工程技术,它的目的是将已经编译后的二进制文件(如 pyc 文件)转换回类似于源代码(如 py 文件)的高级语言形式。

  用在线pyc反编译翻译一下:

  ea2b8cd6bd8d4cfda2262f50c234597a.png

  打开微信关注一波:

  ee34421cb1194c8f8f502efc03c9bd8b.jpeg

  be1e2525f7844e19a02560e51dfa172a.jpeg

  474d6ceb71c0482aa428cbb39b28339c.jpeg

  6b02f0330aee45acbf0a97d308867815.jpeg

  得到flag(早知道re这么简单我就不死磕RCE了,肠子悔青了.jpg):

  gxctf{1d1ffggd-fmfkdlnfh4-5fdkpffdjn-1djd465d}

  二、f5又签到

  根据提示用IDA打开该文件

  2dafe2e534e741f4bc7e55ab24618547.png

  按F5:将任意界面可用查看对应C语言代码(把一个函数转换成C语言伪代码)查看源码得到flag:

  484bcb1f91924481aac4b03a9651ccfe.png

  gxctf{d8ff1s5s1}

  三、Just_upx+xor

  下载附件,用die查壳:

  a54fb8384c974d968ede3bf9a8ed3603.png

  这里贴两篇de4dot教程以及逆向的知识清单:

  [分享].Net脱壳利器de4dot介绍-CSDN博客

  [入门级]de4dot参数详解 – 吾爱破解 – 52pojie.cn

  [原创]常见语言基础逆向方法合集-软件逆向-看雪-安全社区|安全招聘|kanxue.com

  用de4dot脱壳(到这里我就真的一点不会了,re没学过不太了解,de4dot不太会用。按我的思路这里应该用de4dot脱壳后放在dnSpy中分析,再打开IDA分析漏洞,编写exp得到flag)

  在这里贴上本题的官方wp

  查壳 小蓝盒分析,32 位,有壳,upx3.91,用万能脱壳工具直接脱壳 逆向分析 变量名和函数重命名后如下,主要分析 encrypt 函数.

  46b1b0e5ea064e20ba57c5a6eb65bd3f.png

  encrypt 函数 判断输入字符串的长度是否位 27.

  4fc504208f074e6a9a8141901c9abe47.png

  等效为如下代码

  异或加解密算法

  ab0a3acd6dc7445a9da3a3ceb0dd255f.png

  等效为如下代码

  脚本代码

  得到 flag:flag{Welc0me_t0_Ginkg0_ctf}。

  Pwn

  (我被pwnAK了,只能赛后复现。也是被自己蠢笑了,行吧,这被子就这样了,拉不长了)

  一、简单的溢出

  下载附件用装有pwn环境的虚拟机打开查看文件信息:

  515c52683a024e889e20720aac918427.png

  是64位程序,开启了NX保护。

  这里附上查看文件保护机制的意义:

  RELOR      got表与plt表

  ​                  got表储存的是函数的真实地址

  ​                  在IDA里看到的函数地址实际上是plt表的地址。调用函数时,先去plt再去got表找地址。为保护程序got表一般设置为不可写。

  Stack        Canary  对抗栈溢出的技术,在程序启动时随机生成,保存在比返回地址更低的位置。(栈溢出:由低地址向高地址进行覆盖)想要攻击指针就必须先覆盖到Canary,若程序权限被更改则程序已经被攻击,被攻击到的程序自动退出不可查看。

  NX              栈不可执行,可以防止攻击者获取权限后执行程序。

  ​                   开了NX保护,NX显示:NX  enabled

  ​                   没开NX保护,NX显示:NX   disabled

  ​                   权限:rwxp   可读可写可执行

  PIE             全局地址随机化,但第三位不会变,可以根据第三位去寻找一个函数地址。

  然后进行漏洞分析,打开ida pro 中进行分析,按F5后首先查看 main()函数:

  94fd9c01ea024b23a08848f54afdc533.png

  发现定义v4长48,但是输入__isoc99_sancf()函数存在明显的栈溢出。

  继续查看其他函数,发现fact()函数能直接返回shell:

  e8b2e126334c415a87debb7d7ebd93e4.png

  这里贴上官方wp的解题思路:

  解题思路:1. 通过__isoc99_scanf()函数构造溢出读取/bin/sh 字符串;

  2. 将 system 函数的地址覆盖返回地址;

  3.getshell

  在正式开始做pwn之前,贴几篇总结用来辅助理解(主要我太菜了,啥也不会,只能现学):

  (Pwn)CTF工具 ROPgadget 的安装与使用介绍_ropgadget –binary pwn strings information –strin-CSDN博客

  objdump命令详解-CSDN博客

  cyclic查看缓冲区溢出长度_cyclic gdb-CSDN博客

  rsp rbp 寄存器用途_rbp寄存器-CSDN博客

  C语言基础入门—-(3)垃圾字符回收及程序的三大基本结构-CSDN博客

  EOF的意义及用法(while(scanf("%d",&n) != EOF))-CSDN博客

  x64汇编第三讲,64位调用约定与函数传参. – iBinary – 博客园

  x86-64函数调用参数传递_x86-64关于参数传递-CSDN博客

  EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP 寄存器详解-CSDN博客

  GDB常用的两条命令:

  b 函数名    ——下断点

  r运行

  在终端查看各个函数和参数的地址:

  输入命令:ROPgadget –binary pwn1_soeasy 查看参数 rdi地址

  39117057ae824caab238634dc11a5a52.png

  输入命令:objdump -d -M intel pwn1_soeasy查看main函数和system

  b5caea7547c04f1cbd8980618e3d0b39.png

  a68ba798fdbe40bf997bbd62693b1a9c.png

  输入命令:ROPgadget –binary pwn1_soeasy  –string '/bin/sh'查看/bin/sh地址

  10e8770251084ca694edada1f6cfbe00.png

  计算溢出偏移量,使用gdb调试程序。

  输入命令:gdb pwn1_soeasy

  进入gdb调试之后,在函数处下断点,输入运行程序:

  e56c95f736c94c9c8064406f6afb2058.png

  用cyclic生成字符串用来计算偏移:

  54ad057bfada44e1848c3bf07cdc4b0d.png

  将生成的字符串复制下来,输入运行程序,粘贴字符串:

  1b4a5074af394f6192a6dfe096d34d5c.png

  (这一步中间属于输入错误,不要被干扰到。正确的输入长这样:

  9fa262ddffcf48a1a75eb020bb0583a7.png还有,做到这一步的时候不是很理解,问大佬,佬说:生成垃圾字符去填满,然后得到栈溢出的地址。)

  ok,我们用AI分析一下什么情况下会用到他说的这句话(这里AI我用的讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞):

  生成垃圾字符以填满栈并获得栈溢出地址

  为了生成垃圾字符以填满栈并最终获得栈溢出地址,我们需要理解和掌握几个关键概念和技术步骤。以下是详细的操作指南:

  1. 创建测试程序

  编写一个简单的C程序,包含易受攻击的函数,如下所示:

  在这个程序中,函数读取用户输入的字符串,不检查长度,因此可能会溢出。

  2. 编译程序

  使用GCC编译上面的C程序,启用调试信息:

  3. 使用GDB调试

  启动GDB并加载刚编译的程序:

  在GDB环境中,设置断点并运行程序:

  4. 触发栈溢出

  在GDB中断点处,输入一个足够长的字符串以触发栈溢出。例如,输入200个字符的字符串。观察到程序崩溃并显示出错信息:

  5. 分析栈帧和返回地址

  使用GDB命令查看当前的调用堆栈,了解程序的调用顺序:

  输出应类似于以下内容:

  可以看到,程序在处崩溃,这是由于未检查输入长度引起的。

  6. 查找返回地址位置

  使用GDB命令查看的汇编代码,找出返回地址在栈中的位置:

  输出应类似于以下内容:

  从上面的汇编代码可以看出,返回地址存储在处。

  7. 使用垃圾字符覆盖返回地址

  为了覆盖返回地址,我们需要发送足够的垃圾字符,再加上适当的 shellcode 来接管程序的执行流程。假设我们需要覆盖8字节的返回地址,可以使用以下输入:

  这将发送48个'A'字符,接着是8字节的NOP指令(),然后再跟8个'B'字符作为垫片。

  8. 测试和调整

  在GDB中,尝试多次输入不同的长度,以确定精确的溢出点。使用命令检查内存区域,验证返回地址是否被覆盖:

  如果返回地址被成功覆盖,输出应显示垃圾字符:

  通过不断测试和调整,逐步增加垃圾字符的数量,直到成功覆盖返回地址并执行shellcode,从而实现栈溢出。

  ok,看明白原理后,我们继续复现:

  3c36006b5d894fdc9384d06972f49918.png

  接下来查看的值,将地址后四个字节复制下来并用计算偏移量:

  b8634403f22e4628994fb879e9fa0cab.png

  计算得到的值为,即,所以偏移量为。

  48(十进制),即0x30(十六进制)

  在64位系统中,返回地址通常位于的上方,并且由于64位系统中指针的大小为8字节,因此返回地址相对于的偏移量通常为0x8(即8字节)。所以,为了覆盖返回地址,我们需要在填充了48字节(0x30)的垃圾数据后,再加上8字节(0x8)的偏移量,以确保我们能够准确地覆盖返回地址。

  exp:

  把脚本跟该程序都放在虚拟机里运行,输入ls查看列表后,输入cat获取flag:

  8258c8229874490d90f200dd7c2ac0cc.png

  flag{63214fab-ccf4-438e-ae54-3664b0d3d4c4}

  二、x64寄存器

  下载附件拖到虚拟机里分析一下:

  63caaf3f55a04da594265bd15963a329.png

  程序为64位elf文件,没有开启任何保护。

  将程序放到ida pro里分析,查看​函数:

  0f29d5fd16ae438f857f3d480bc77be2.png

  函数中有两个函数,分别是和。

  先进入函数中:

  ca29a347208d41259cb2a77e8ca4ce1e.png

  没问题,看函数:

  8f3fd01f8ed244069e841fe3c6882d13.png

  ​函数中有一个​函数,可以读取​个字节数据到​,而​的大小只有​,这里存在明显栈溢出。

  再用ida pro查看别的函数,发现程序还有一个函数,调用函数可以返回shell。

  79f1669ec8dc40d7b96680a07fbdf5f0.png

  接下来查看一下字符串,​:

  c2f972d6e7f34802bfaf0f370eafb951.png

  程序中存在能返回shell的函数和​字符串,将返回地址为​函数地址并将作为参数传入即可。

  解题思路

  计算溢出偏移量;运行程序进入​函数;根据偏移量输入占位字符,并覆盖返回地址为​函数地址并将作为参数传入;getshell。

  先计算溢出偏移量,使用gdb调试程序,使用cyclic生成字符串用来计算偏移:

  087471f9b07b4a40bc878668f0c2b082.png

  将生成的字符串复制下来,输入运行程序,粘贴字符串:

  d7fd03e8a6f647f9a3f07cc3a44404a8.png

  在窗口中可以看到一个地址,将地址后四个字节复制下来并用计算偏移量:

  8821f96157e6404096a7a2987ee5abdf.png

  计算得到溢出偏移为。

  因为程序文件为64位,需要寄存器传参,所以需要查询rdi寄存器的地址:

  在终端输入命令:ROPgadget –binary pwn2_x64 –only "pop|ret" | grep rdi

  cdd25ad60e704516b1723fd3e81da097.png

  再利用ida pro查看函数的地址和的地址:

  0b40ac64f26f42b1bde332106573fcb3.png

  30a817b951814af68eaea716637f8df1.png

  exp:

  将该脚本放在虚拟机里,输入ls和cat获取flag:

  7ccb271a3bed4240ad14ff64a5aaab6a.png

  flag{89fe6a52-7311-4da5-ae10-214f2c2aed79}

  三、ret2syscall

  下载附件拖到虚拟机里分析一下:

  4cfb2bf094f44c79a2e9261bc1ee2c38.png

  32位程序,没开文件保护机制。

  将程序放到ida pro里分析:

  6475dc8ee97448c18e89b21b0b96267d.png

  按F5切换一下,发现两个函数init_0()和door():

  cbc007ccc9d64911b33265ccdaac5a59.png

  先查看函数init_0():

  d8ed818881e44dffa95d5a40b6aa1ed5.png

  挨个点进去没有发现异常,查看door()函数:

  3861a119a111428283ad7276fc710ca9.png

  发现gets函数存在栈溢出,利用gets()函数的溢出,去构造execve("/bin/sh", 0, 0)

  使用命令查找eax,ebx,ecx,edx

  将该程序放在虚拟机里,输入命令查看寄存器地址:

  ROPgadget –binary pwn3_syscall –only 'pop|ret' | grep 'eax'

  21bd6205b5924acbb28e7a14ee131215.png

  ROPgadget –binary pwn3_syscall –only 'pop|ret' | grep 'ebx'

  412e4a33ffae44e7a484e0bd848bbb9f.png

  ROPgadget –binary pwn3_syscall –only 'pop|ret' | grep 'ecx'

  7c83aa162b4547d0a3c5620410b1b632.png

  ROPgadget –binary pwn3_syscall –only 'pop|ret' | grep 'edx'

  0bc8a7ea1f094a619e5237c63dbba6a6.png

  然后输入命令查找/bin/sh字符串:

  ROPgadget –binary pwn3_syscall –string '/bin/sh'

  398c7bb919ae4315a4e3d7a668971026.png

  输入命令查找int 0x80:

  ROPgadget –binary pwn3_syscall –only 'int'

  8d0ffe0797f84d6192feecba95984698.png

  exp:

  把脚本放虚拟机里运行一下,用ls命令查看程序内容,发现flag.txt,用cat命令查看它:

  a259c45c21a24ebbbdc5bc0f4c3e81c9.png

  flag{43df8351-ab5a-4071-8e37-40e36b3253c0}

  Crypto

  一、注意往下看

  打开该文本

  b0419e54ac664ec5b62320db21f5c38d.png

  目测base混合加密,用随波逐流一键解密

  93f336fcf9794986a8238ea4dd40159e.png

  发现还需要解码,应该是键盘包围,再次解码得到:

  DOYOULOVEIT

  用gxctf{DOYOULOVEIT}包裹提交

  二、EasyMath

  打开附件:

  发现是应用了类似于“中国剩余定理”的取余套路完成的加密,即主要实现了对  进行加密处理,并输出了一系列用于后续可能解密操作的参数。整体流程是先将  转换为长整型数值,然后生成了 10 个 256 位的素数,分别用这些素数对转换后的  数值进行取余操作,最后输出了这 10 个素数构成的列表  以及对应的余数构成的列表 。

  贴一个总结:

  RSA-CRT 使用中国剩余定理CRT对RSA算法进行解密_rsa crt-CSDN博客

  exp:

  放到pycharm64里运行得到flag8dab6fddd7484dd7b142a960f53079d3.png

  gxctf{H3@vNn_h@s_m@De_vS_t@LenTs,_w3_@re_n0t_m@de_in_v@in._A_th0usand_golD_coins_sp3nt,_m0re_wi11_tuRn_up_@g@in.}

  三、小小的也很可爱

  打开附件:

  这是一道RSA题目

  又到了贴大佬总结的时候:

  RSA加密原理详解,以及RSA中的数论基础-CSDN博客

  CTF中的RSA套路之低加密指数攻击和低解密指数攻击-CSDN博客

  深入浅出RSA在CTF中的攻击套路_658e,cc-CSDN博客

  exp:

  放到pycharm64里运行得到flag

  be0c55fb393b43e59cec676b459711d8.png

  gxctf{Th3_R3d_be@nS_Gr0w_in_THe_S0uTh3rN_1and}

  四、叽里咕噜说啥呢

  打开附件查看:

  30731abcf3f74a298b3e5e7c3fa691d9.png

  看不懂,没思路,过了会给了hint

  59dac4fa3e184c3eb3839c94882c1d8b.png

  贴个大佬总结:

  密码学(二):古典密码之维吉尼亚密码的破解_维吉尼亚密码如何解密-CSDN博客

  根据后续求教大佬,佬扔给我一个维吉尼亚词频分析在线网址:

  Vigenere Solver | guballa.de

  丢进去多分析两次得到:

  4a022a5e56e845e5958af9ccb0f35b59.png

  根据ai的翻译,这是变种凯撒加密

  fbef0ca157d345aaabd9fa2c9729ae69.png

  贴个大佬总结:

  BUUCTF-Crypto-变异凯撒解题思路_ctf 解开密码有下划线-CSDN博客

  根据这个贴,猜测flag是以gxctf{}包裹的,将 gxctf 转换成对应的 ASCII 值,与列表中对应位置的整数相减, 观察规律(当时到这里就没再做了,因为python零基础,只能赛后根据官方wp复现)

  再贴个ASCII码表:

  ASCII码对照表,ASCII码一览表(非常详细) – C语言中文网

  根据官方wp,发现加密规律:

  发现 diff=ord(s[i])-l[i] 从-15 递减 则可以通过 flag+=chr(l[i]+diff)还原出 flag

  64832591aec84faf9041d00dd127f917.png

  exp:

  放到pycharm64里运行得到flag

  aa8d53a9655f4f0198b9f39de2db3a57.png

  gxctf{You found the pattern}

  五、EasyRSA

  打开附件:

  官方wp说是dp泄露,先了解一下什么是dp泄露:

  RSA的dp泄露 [BUUCTF] RSA2_dp=d%(p-1)-CSDN博客

  让AI分析一下:

  回顾 RSA 相关原理及已知条件:

  在 RSA 加密算法中,涉及到公钥  和私钥 ,其中 ( 和  为两个大质数),并且满足 ,也就是  是  在模  下的乘法逆元。这里已知了公钥指数 、模数  以及泄露的 ()。利用  推导  的方法:

  基于数学关系推导:

  从  和  这两个关系出发,可以推导出一些等式来尝试找出  的值。有一种推导思路是通过设一个整数 ,存在关系 (这是经过一系列数学变换和推导得出的,利用了同余和整除等性质),那么可以通过在一定范围内(比如  )去爆破  的值,来计算 。具体代码实现就是  这个条件判断,如果满足这个条件,就尝试通过  来计算 。另一种利用选取与  互素的数  的方法:选取一个合适的整数 (这里题目中给定选取 ),根据一些数学构造和 RSA 原理,可以通过  来尝试计算 。其原理涉及到更深入的数论知识,简单来说就是利用了特定的同余关系以及 (最大公约数)运算来找出  的值,通过这个式子,如果计算结果使得 ,就找到了  的一个可能值。计算 :

  一旦得到了  的值,根据 ,很容易通过  计算出  的值。计算私钥 :

  有了  和  后,就能计算出 ,再利用  是  在模  下的乘法逆元这一关系,通过  来计算出私钥 。解密密文 :

  最后,利用计算得到的私钥 、已知的密文  和模数 ,通过  进行模幂运算,得到的结果就是原始的明文信息(这里就是 ),不过得到的结果是整数形式,还需要通过  函数将其转换为字节形式,以便正确显示出原始的  内容。

  ok,接下来可以写exp破解了:

  放到pycharm64里运行得到flag

  2a16de64c985467ca2f23e5dc27e760d.png

  gxctf{0n1y_on3_m0on_in_the_Sky,_0n1y_yoU_in_tHe_wor1d}

seo