THUCTF 2018 和 Teaser Dragon CTF 2018 小记

终于可以公开 writeup 了,大家也可以去看 twd2 写的 writeup 。这次是我第一次打 CTF,发现题目还挺有意思的,虽然也有一些题目做不出来,有拿钱还是美滋滋。 这次也认识了好些会打 CTF 的人吧,如 0x00, user1, igoodvegetable 等队伍的同学。一开始被蛤力橙叫来打比赛,我觉得心里挺没底的,然后花了很多时间做题目,一点一点还是做出了不少题目来。最精彩的还是结束以后,当知晓没做出来的题目的做法时候,会不自觉感叹题目的巧妙。也学到了一些梗: #define 1000000007 twd2 接着就参与了一下 Teaser Dragon CTF 2018,是个在线赛,许多人一起做题,只有 24 小时。看了下题目,除了签到题,其它题都比 THUCTF 2018 难多了,我只能围观他们做题。最后看到别人写的 writeup,真是太巧妙了,一环接一环,真的想不到。不过也有很麻烦的题目,特别是有的逆向的题目,太考验人的耐心了。 接下来就等待官方的 writeup 和别人的 writeup,学习一下别人的做法吧。

Read More

绕过 GPGMail 的激活检测

前段时间 GPGMail 宣布不再免费,在三十天的试用期后就不给用了。唉,可能是官方实在没钱维护了,也可能是官方想赚钱了。不过,既然 GPGMail 采用的是自由的许可证,意味着我们可以自己对代码进行更改。和许可证验证相关的代码如下: - (BOOL)hasActiveContract { NSDictionary *contractInformation = [self contractInformation]; return [contractInformation[@"Active"] boolValue]; } 我们只要改成 return TRUE ,在自己的电脑上手动编译、并复制到 /Library/Application Support/GPGTools/GPGMail 下即可。 另:还有一个直接对二进制打 patch 的方法(仍然符合许可证),利用了最近打 CTF 学到的一些知识。找到以上这个函数,然后把返回值修改成非零即可。这里就不提供方法了。最后的更改: $ radiff2 -D --- 0x0000282f 410fbec7 - movsx eax, r15b +++ 0x0000282f 4c89e090 + mov rax, r12 + nop 当然了,还需要额外 codesign --remove-signature 一下。 谨慎对非自由软件采用这个方法。可能有法律风险。

Read More

在 macOS 的 VirtualBox 上从 USB 启动

做了一个 Windows 10 安装 U 盘,想测试一下能不能启动,于是想用 VirtualBox 起一个虚拟机。但是发现,一般情况下要从 ISO 或者把 U 盘克隆成一个 vdi/vmdk etc 再启动。不过找到了 Cem Arslan 的 VirtualBox - Booting From USB (MAC) 实验了一下,确实可以用,以 /dev/disk2 为例方法如下: $ diskutil unmountDisk /dev/disk2 $ sudo chown $(whoami) /dev/disk2 $ VBoxManage internalcommands createrawvmdk -filename PATH_TO_VMDK -rawdisk /dev/disk2 $ # Now boot from VirtualBox 对于其它平台,可以参考 Tu Nguyen 的 How to boot from USB in VirtualBox 。 研究了一下生成的 vmdk 文件,大概是这样的: # Disk DescriptorFile version=1 CID=12345678 parentCID=ffffffff createType="fullDevice" # Extent description RW 12345678 FLAT "/dev/disk2" 0 # The disk Data Base #DDB ddb.

Read More

在 Ubuntu 上跨版本迁移 MongoDB

由于 MongoDB 只支持当前版本和上一个版本的数据库格式,然后刚刚滚系统升级的时候升级到了 3.6.x,而数据库格式仍然是 3.2.x 的,于是需要先安装回 3.4.x 版本的 MongoDB,输入命令把数据库升级到 3.4.x 版本后,再用 3.6.x 的数据库进行升级。 以 从 Ubuntu 14.04 LTS 升级到 Ubuntu 18.04.1 LTS 为例,方法如下: $ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.4.17.tgz $ tar xvf mongodb-linux-x86_64-ubuntu1604-3.4.17.tgz $ cd mongodb-linux-x86_64-ubuntu1604-3.4.17/bin/ $ sudo ./mongod --config /etc/mongodb.conf & $ mongo > db.adminCommand( { setFeatureCompatibilityVersion: '3.4' } ) { "ok" : 1 } $ fg ^C $ sudo chown -R mongodb:mongodb /var/lib/mongodb $ sudo systemctl start mongodb $ mongo > db.

Read More

通过 SSH 隧道连接 ADB 和 Android 设备

由于本机算力不足,想要在远程编译 LineageOS ,其中有一步需要连接到已有的设备,于是突发奇想: adb 可以通过 网络连接 ssh 可以进行端口转发,这里是把 remote 的端口转发到 Android 设备上的端口。 方法如下: $ adb shell ip -f inet addr show wlan0 $ # remember the ip address here $ adb tcpip PORT1 $ ssh -R PORT2:ANDROID_IP:PORT1 REMOTE (remote)$ adb connect localhost:PORT2 # trust this device on Android 参考文档: How can I connect to Android with ADB over TCP? SSH PORT FORWARDING EXAMPLE

Read More

在 LEDE(OpenWrt)上启用 wpad

WPAD(Web Proxy Auto-Discovery Protocol)是一个可以利用 dhcp 分发 pac 配置的协议。方法如下: $ # ssh to router first $ vim /etc/dnsmasq.conf dhcp-option=252,"http://router_ip/wpad.dat" $ vim /www/wpad.dat # put pac here $ service dnsmasq restart $ # ensure proxy is available to lan $ # enable wpad on devices 参考文档: Web Proxy Auto-Discovery Protocol Automatic Proxy Configuration with WPAD Deploying WPAD Example PAC File

Read More

在 Xcode 9 上启用 Vim 模拟(XVim 2)

作为一个不用 vim 编辑会死星人,用 Xcode 总是止不住自己想 Escape 的心。于是找到了 XVimProject/XVim2 进行配置。 大致方法如下: 按照 Signing Xcode 对 Xcode 进行重签名。套路和对 GDB 进行签名一样。不过这次,签名完成的时间可长多了,毕竟 Xcode 这么大。 接着按照项目的 README,首先 git clone 然后 make ,第一次打开 Xcode 的时候选择 Load Bundle 即可。 终于可以满足我 Escape Xcode 的欲望了。

Read More

在 macOS 上读取移动硬盘的 S.M.A.R.T. 信息

之前想看看自己各个盘的情况,但是发现只能看电脑内置的 SSD 的 S.M.A.R.T 信息,而移动硬盘的都显示: $ smartctl -a /dev/disk2 smartctl 6.6 2017-11-05 r4594 [Darwin 17.7.0 x86_64] (local build) Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org /dev/disk2: Unable to detect device type Please specify device type with the -d option. Use smartctl -h to get a usage summary 一开始我怀疑是个别盘不支持,但换了几个盘都不能工作,问题应该出现在了 USB 上。查了下资料,果然如此。根据 USB devices and smartmontools ,获取 S.M.A.R.T 信息需要直接发送 ATA 命令,但是由于经过了 USB,于是需要进行一个转换,导致无法直接发送 ATA 命令。这个问题自然是有解决方案,大概就是直接把 ATA 命令发送过去(pass-through)。上面这个地址里写到,如果需要在 macOS 上使用,需要安装一个内核驱动。可以找到,源码在 kasbert/OS-X-SAT-SMART-Driver 并且有一个带签名的安装包在 External USB / FireWire drive diagnostics support 中可以下载。丢到 VirusTotal 上没查出问题,用 v0.

Read More

通过 Ipfilter Extension 实现 RFC8367

前几天无聊闲逛看到了一个很有趣的 RFC8367 - Wrongful Termination of Internet Protocol (IP) Packets ,看到日期大家应该都懂了,这是个粥客,不过里面还是反映了一些事情,咳。 之前看到闪客实现了 shankerwangmiao/xt_PROTO ,想到自己也可以做一个 iptables 扩展,于是就写了 jiegec/xt_EQUALIZE 。它是这样使用的: $ git clone git@github.com:jiegec/xt_EQUALIZE.git $ make $ sudo make install $ sudo iptables -t filter -A INPUT -j EQUALIZE $ sudo dmesg -w & $ # Make some random network requests to see the effect! $ ping 1.1.1.1 $ ping 8.8.8.8 $ ping ::1 目前还没有把参数都变成可以配置的。如果真的有人需要这个模块的话,我再改吧(逃

Read More

在 macOS 上 TAP Interface 上启用 IPv6 自动配置

由于 macOS 对 TAP Interface 不会自动出现一个设置中对应的服务,所以需要手动进行配置。一番测试后,发现可以通过: $ sudo ipconfig set [tap_if] automatic-v6 $ sudo ipconfig set [tap_if] dhcp 启用系统自带的 dhcp 和 ra 功能。也许有方法可以把这些 tap 搬到系统的设置中去。 UPDATE: 可以把 TAP Interface 加到系统的设置中去。方法参考Virtual network interface in Mac OS X。完成以后可以直接通过系统设置界面进行配置。

Read More