grep、sed、awk命令在ctf杂项题中的使用

为什么想介绍这几个命令?

  • 原因是某次比赛中,当我还在写py脚本时,题目被一个师傅开局就秒了,比赛完才知道linux下还有各种专门用来文本处理的脚本,当时就被那长长的一条处理命令震惊到了。而ctf比赛中比较简单的杂项题有些是可以strings+正则匹配一把梭的。
  • 国外一些比赛的wp中会有人写shell脚本处理题目,经常看到这几个命令,早想学习但一直鸽。
  • 还有就是在读某些比赛的dockerfile时发现有出题人使用这些命令去完成docker容器的初始化,感觉还是很有用的。
    (当然最大的原因是为了装B)

关于这几条命令的参数

参见sed和awk的用法介绍

比赛中的使用例子

xman 2019 选拔赛

题目给了一个流量包文件
流量包内容
可以看到像是wifi的流量包,这里只有ssid很可疑,像是有flag,但整个流量包一共有9233行ssid,直接看是找不到的,需要正则匹配。首先strings一把梭

strings ctf.pcap

strings
发现有大量冗余信息neko,于是通过正则去除

strings ctf.pcap | grep -x '.\{32,33\}'

所有ssid都是32位的,这里只匹配一行的长度是32的字符串,得到ssid内容
ssid
下一步,我们通过观察,看到每行都有一个非字母数字的符号(^!&),于是很容易想到flag所在的行应该全是字母数字,没有特殊符号 (一点都不容易想到好吧,太脑洞了) 于是我们在之前的命令上加点细节,找到了flag

strings ctf.pcap | grep -x '.\{32,33\}'| awk '{print $1}'|grep -xno '[[:alnum:]]*'

flag
这里grep加-n所以显示了行号7662,也就是ssid在7662行,这就是flag了

another

另一个是某次比赛中一个图像隐写的题目
zsteg
zsteg可以看到输出有段base64,直接复制解密就得到flag了。为了练习这几个命令的使用,用sed命令+正则提取第二行的base64,然后解密

└─[$] <> zsteg flag.png | sed -n '2 p' 
b1,bgr,lsb,xy       .. text: "ZmxhZ3s1NDJmYjQzM2Y0YzhlYmYwMmY3OGUwZjA0MzZkMmU3Nn0="

加点细节

└─[$] <> zsteg flag.png | sed -n '2 p' | grep -o "\"[a-z,A-Z,0-9,=]*\"" | grep -o "[a-z,A-Z,0-9,=]" | base64 -d 
flag{542fb433f4c8ebf02f78e0f0436d2e76}%  

(当然对这个题来说这样做更麻烦了,但主要是为了演示下这几个命令)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值