第九题SimpleRAR:

下载附件后得到一个压缩包打开后得到如下提示

文件头损坏,让我们打开winhex看一下

7a为子块而文件头为74,这里将7a改为74(这里我也不是很清楚,详细大家可以自行去查一下rar文件格式分析,等我搞明白会再给补上的)

改完后我们就能打开了

观察一下我们刚得到的图片,并没有发现什么奇怪的地方,也扔进winhex里看一下

看到此图片应为gif,改完后缀,后看题目有写着双图层,打开ps一看确实是有两个图层,这里用ps将两个图层分离(这里遇到很多问题,这道题有很多方法,可以用ps以及Stegsolve里的frame browser分离图层,但我前面两种方法都失败了,最后我用gif分离软件分离了图层,以后搞明白以后会进行补充)

分离出来两张空白图片

我们用Stegsolve将两个图片降低色域(软件下面的小箭头),得到以下来两张图片

再继续用Stegsolve将两张图片拼接(image combiner)

最后再用ps给二维码p上定位点扫描得到flag

第十题base64stego:

下载附件 得到一个压缩包,打开

得到一个stego.txt文件,打开得到如下界面

得到这么长一段base64的字符串,明显并不可能是直接的base64解码,那么应该就是base64隐写了

关于base64隐写:

先复习一下base64加密

众所周知一段字符串进行base64加密时,我们需要将每个字符串化为八位二进制数,并将所得的二进制字符串六位六位地分解,组合成新的字符串。

而六位六位分解后,不太可能每次都可以被正好分解,这时候就需要我们来加0来补位(这也就是我们base64加密后看到的=),补成既能被8整除(计算机中最小单位为字节,也就是8位二进制数,不能出现不为8位的情况)也能被6整除的个数(也就是加上8*n个0,结果是n为1,2)。

而(i为字节数)i*8%6有三种情况。余0的时候就是不用补位的情况,余2的时候我们需要补上16位0,前4位的0和刚刚剩下的两位正好组成一个六位,剩下两个六位正好组成两个等号,而余4的时候,只需加上8位0就可以了。只是说可能并不理解,这里举几个例子。

好说完base64加密的原理,我们来说一下

base64隐写的原理

我们来看看上面的第二个例子

第二个例子

没有标注的部分我们在解码(解码相当于加密的逆过程)的时候会将其丢掉,这样的话我们将0000,改成其他的数并不影响原先的密文,影响的只是加密后这个相应的字母会变化,但不会影响原先的密文。而如果改掉黄色标记部分的数字,如果改掉前面的数字就会改变密文,改掉后面的我们就会改变=的数量,从而影响解码,因此这里我们就可以改变未标注部分来隐藏一些信息,这样的话像第一个例子那种类型便不能隐写了。由于能隐藏的二进制数位最多为4位,所以我们需要许多句base64加密的密文来隐藏真正的信息,正如我们开始的时候看到的stego.txt一样,明白了这样的原理,我们可以用python写一个脚本来进行解密

# -*- coding: cp936 -*-
import base64
b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('stego.txt', 'rb') as f:
bin_str = ''
for line in f.readlines():
stegb64 = str(line, "utf-8").strip("\n")
rowb64 = str(base64.b64encode(base64.b64decode(stegb64)), "utf-8").strip("\n")
offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
equalnum = stegb64.count('=')
if equalnum:
bin_str += bin(offset)[2:].zfill(equalnum * 2)
print (''.join([chr(int(bin_str[i:i + 8], 2)) for i in range(0, len(bin_str), 8)]))

解密得到flag

未完待续……

ps:本人新手一枚,写的题解呢也是以新人的口吻写的所以有许多地方不够专业,也可能还有许多错误,也请各位大佬多多包容,也欢迎各位大佬的指导。

攻防世界——Misc新手练习区解题总结<3>(9-10题)的更多相关文章

  1. 攻防世界——Misc新手练习区解题总结<2>(5-8题)

    第五题gif: 下载附件后,解压得到这样一个文件 几经寻找无果后,发现是不是可以将gif中的黑白图片看做二进制的数字,进而进行解密 最后用二进制转文本得到flag 第六题掀桌子: 看起来是16进制的密 ...

  2. 攻防世界——Misc新手练习区解题总结<1>(1-4题)

    第一题this_if_flag: 第一题就不多说了,题目上就给出了flag复制粘贴就可以了 第二题pdf: 下载附件后,得到如下界面 Ctrl+a全选文字,复制出来看看是什么,粘贴后恰好得到flag ...

  3. 攻防世界——web新手练习区解题记录<1>(1-4题)

    web新手练习区一至四题 第一题view_source: 题目说右键不管用了,我们先获取在线场景来看一看,我们看到这样一个网页,并且右键确实点了没什么反应,而用到右键一般就是查看网页源码 用快捷键(F ...

  4. 攻防世界——web新手练习区解题总结<3>(9-12题)

    第九题simple_php: 看题目说是php代码,那必定要用到php的知识,让我们先获取在线场景,得到如下网页 仔细看这个代码,意思大概是: 1.当a==0且a为真时输出flag1 2.当b为数字退 ...

  5. 攻防世界——web新手练习区解题总结<2>(5-8题)

    第五题cookie: 所需工具:burpsuite(需自行下载) 老规矩看完题,先获取在线场景,得到如下网页 那么什么是cookie呢?大体上就是网站为了识别用户身份而储存在用户本地终端上的数据,类型 ...

  6. 攻防世界 Misc 新手练习区 stegano CONFidence-DS-CTF-Teaser Writeup

    攻防世界 Misc 新手练习区 stegano CONFidence-DS-CTF-Teaser Writeup 题目介绍 题目考点 隐写术 摩斯密码 Writeup 下载附件是PDF文件打开,研究一 ...

  7. 攻防世界 Misc 新手练习区 ext3 bugku Writeup

    攻防世界 Misc 新手练习区 ext3 bugku Writeup 题目介绍 题目考点 WinHex工具的使用 linux磁盘挂载mount命令 Writeup 下载附件拖进winhex分析一下,查 ...

  8. 攻防世界 Misc 新手练习区 gif Writeup

    攻防世界 Misc 新手练习区 gif Writeup 题目介绍 题目考点 仔细联想 字符转换 Writeup 下载附件并打开 104张黑白图 发现是一堆黑色和白色的图片,按某种规律排列,猜想flag ...

  9. 攻防世界 Misc 新手练习区 坚持60s Writeup

    攻防世界 Misc 新手练习区 坚持60s Writeup 题目介绍 题目考点 java反编译 jd-gui 的使用 Writeup 下载附件并打开 kali执行命令 java -jar 9dc125 ...

随机推荐

  1. 通过MyBatis操作数据库

    MyBatis是一款优秀的持久层框架,同样也是做OR Mapping的.与JPA不同,MyBatis里面需要我们自己来定制sql. MyBatis和JPA的选择 其实如果业务比较操作比较简单使用JPA ...

  2. 当Django模型迁移时,报No migrations to apply 问题时

    前言:当更改model时在次迁移是不是经常报此类错误,解决以下两点便可以更新成功 1. 删除修改模型对应的app应用下的migrations中的生成文件 2. 进入数据库,找到django_migra ...

  3. GitHub 热点速览 Vol.31:在?跑个 GitHub 评分如何?

    摘要:个性化的 GitHub README 自从 7 月上线之后一直风靡在各大技术平台,当中最有意思的莫过于代表你技术的 GitHub Readme Stats 了,除了能显示你提交的 pr.comm ...

  4. 自身写Android组合多个布局的经历

    今天不总结课程了,留着有时间补上. 今天的是ExpandListView,就是可以扩展的列表视图. 今天我做了个总结,然后模仿了扣扣的聊天界面,仅仅写了三个页面而已,用到的xml和活动就不下于10个, ...

  5. java 静态导入、可变参数、集合嵌套

    一 静态导入 在导包的过程中我们可以直接导入静态部分,这样某个类的静态成员就可以直接使用了. 在源码中经常会出现静态导入. 静态导入格式: import static XXX.YYY;   导入后YY ...

  6. 2020-05-29:redis怎么保证高可用,高可用模式有那些?对比下优缺点?

    福哥答案2020-05-29: Redis 高可用架构如下:1.Redis Sentinel 集群 + 内网 DNS + 自定义脚本.2.Redis Sentinel 集群 + VIP + 自定义脚本 ...

  7. 2020-04-11:A系统联机同步调用B系统(A和B不是同一公司系统,不能用分布式事务),如何保证系统间数据准实时一致性(设计思路即可)?提醒:需要考虑调用超时、并发、幂等、反交易先到等问题

    福哥答案2020-04-12: 可参考微信支付和支付宝支付.

  8. 封装react antd的form表单组件

    form表单在我们日常的开发过程中被使用到的概率还是很大的,比如包含了登录.注册.修改个人信息.新增修改业务数据等的公司内部管理系统.而在使用时这些表单的样式如高度.上下边距.边框.圆角.阴影.高亮等 ...

  9. 【Codeforces】CF Round #592 (Div. 2) - 题解

    Problem - A Tomorrow is a difficult day for Polycarp: he has to attend \(a\) lectures and \(b\) prac ...

  10. 几种定时任务(Timer、TimerTask、ScheduledFuture)的退出—结合真实案例【JAVA】

    工作中常常会有定时任务的开发需求,特别是移动端.最近笔者正好有所涉及,鉴于此,结合开发中的案例说明一下几种定时任务的退出. 需求说明:定时更新正在生成的文件大小和状态[进行中.失败.完成],如果文件生 ...