• 搭建 git 本地中转站

    局域网内有多台开发机器,因为种种原因,与服务器同步代码有不便之处。于是打算在本地做一个 git 的镜像,所有机器都统一 clone 这个本地镜像库,然后由这个镜像库负责与服务器更新。

    1. 使用 –mirror 参数 clone

    cd /some/where/
    git clone --mirror git@server.com:user/someproject.git

    执行以上命令后,在本地的 /some/where/someproject.git/ 下建立了对应项目的镜像,它是一个裸版本库(不包含工作区,直接就是版本库的内容),对于我这样的新手来说不是很好懂什么是“裸版本库”,但是进去目录看一下就知道了。

    2. 本地操作

    在同一台机器上,我们这样写代码:

    cd ~/workspace/
    git clone /some/where/someproject.git

    这样 clone 出来的就是平时熟悉的、包含工作区的内容,平时怎么用就怎么用。
    阅读更多…

  • 申请 Let’s Encrypt 通配符 HTTPS 证书,并配置 Apache2

    3月中旬, Let’s Encrypt 终于正式发布通配符 HTTPS 证书了,赶紧去申请一个玩玩(然而我的网站暂时还不支持加SSL,只能先在VPS上试试了 /(ㄒoㄒ)/)。

    1. 安装 Let’s Encrypt 客户端

    系统为 Ubuntu 16.04,参照 Certbot 官网的教程,运行以下命令安装(我这里由于是用 root 用户,所以非 root 请自行加 sudo):

    # apt-get update
    # apt-get install software-properties-common
    # add-apt-repository ppa:certbot/certbot
    # apt-get update
    # apt-get install python-certbot-apache

    2. 获取通配符证书

    先查看 certbot 的版本是否 > 0.22,否则不支持通配符证书:

    # certbot --version
    certbot 0.22.2
    

    自带的 –apache 模式似乎并不能处理通配符证书的情况,所以需要手动获取。

    在对应的 support 页面[1]中,了解到还需要手动指定服务器,执行:

    # certbot -d *.xxxx.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory certonly

    之后按提示操作,并添加自己的域名的 TXT 记录,以通过 ACME 认证。完成后,可在 /etc/letsencrypt/live/xxxx.com/ 下看到几个 .pem 文件。

    阅读更多…

  • 在OpenWrt中使用iptables过滤特定字符串

    当前的需求如下:需要选择性地过滤掉远程客户端向NAT下的服务器发送的特定请求。
    网络拓扑:Client—Internet—WAN–OpenWrt Router–LAN–Server

    经过实践,方法如下:

    # 安装iptables-mod-filter
    opkg update
    opkg install iptables-mod-filter
    
    # 丢弃包含 abcd 字符串的数据包
    iptables -I FORWARD 1 -p tcp -m string --string "abcd" --algo bm -j DROP
    iptables -I FORWARD 1 -p udp -m string --string "abcd" --algo bm -j DROP
    
    # 恢复正常
    iptables -L --line-numbers
    iptables -D FORWARD 1   # 这个1是刚才输出的对应序号

    在执行命令后,在LAN抓包,发现对应的数据包果然不见了,证明命令生效。再执行后续的命令,在LAN抓包,又可恢复正常的不丢包状态。

    对于其他网络拓扑,可把FORWARD链改为INPUT或OUTPUT。

  • 在cmd中使用echo输出空行

    众所周知,在Windows的cmd中,echo可以用来输出信息,但如果想输出空行,用“echo 加空格”的方法,无论加多少个空格都是不行的,都相当于“echo”,而返回当前的echo状态(on/off)。

    找了一下,方法至少有10种:

    @echo off 
    
    echo= 
    echo, 
    echo; 
    
    echo+ 
    echo/ 
    echo[ 
    echo] 
    
    echo: 
    echo. 
    echo\

    这10种方法可以分为三组,每组的效率依次递减。至于为什么效率会低,可参考本文转载的出处。

    简而言之,要输出一个空行,用第一组的 “=” “,” “;” 紧接在echo后面,是最好的选择。

    转载自 http://www.jb51.net/article/30987.htm

  • 所有无线设备都不安全了?Wi-Fi加密被破解影响有限

    多年来保护我们无线连接安全的WPA2加密协议日前被成功破解。比利时鲁汶大学的Mathy Vanhoef发现了WPA2加密协议的漏洞,并披露了实施攻击的详细细节。Mathy Vanhoef计划将在11月1日举办的计算机和通信安全(CCS)2017会议和Black Hat欧洲会议上发表这一研究成果。

    WPA2被破解 全世界的WiFi设备都不安全了?

    在这一消息被披露之后,有些媒体认为,由于目前几乎所有的WiFi加密都使用了WPA/WPA2加密协议,这一协议被黑客破解之后,全世界的WiFi上网设备都不安全了。

    Mathy Vanhoef称,这一漏洞名为“KRACK”,是“Key Reinstallation Attack”(密钥重安装攻击)的缩写。Mathy Vanhoef表示,通过研发,其发现WPA2在四路握手(four-way handshake)时,允许拥有预共享密码的新设备加入网络。

    有中国黑客教父之称的goodwell对搜狐科技表示,这个KRACK ATTACK攻击应该是目前最取巧的针对WPA/WPA2的中间人攻击方法。这一攻击并不针对WPA加密本身,而是通过多次重播四次握手的信息3,来强制复位client本地保存的WPA2密钥,即把原来正确真实的WPA密码替换掉,不破解直接替换成全0密钥,这样就可以将受害者连到伪造的AP上,无需任何提示。再配合SSLStrip之类的工具做中间人,就圆满地实现了基于WIFI的无缝中间人攻击。

    goodwell称,攻击者并不能通过这种攻击手段达到蹭网的目的。主要是影响客户端而非路由器。最冤的是Linux系统,其只有wpa_supplicant,严格遵守IEEE“不能重复使用密钥”的提醒,密钥用后即刻清零。也因为如此,其连接密钥就真的变成全“0”,造成了比其他设备严重得多的问题。

    Mathy Vanhoef也确认,这种攻击对Linux和Android 6.0或更高版本是非常有破坏性的。这是因为Android和Linux可以被欺骗(重新)安装一个全零加密密钥。

    goodwell对搜狐科技表示,这种攻击并不能攻击WiFi路由器,而是在用户连接到路由器并正常使用后,攻击者切入进来,替换用户原来的连接,让其连到攻击者的路由器上去,从而达到数据挟持的目的。

    KRACK 攻击 Wi-Fi WPA2 加密演示视频

    业界厂商声明将尽快发布补丁

    这一漏洞披露之后,微软称于10月10日发布安全补丁,使用Windows Update的客户可以自动或手动升级补丁,达到自动防卫的目的。

    Google称,其已经了解到这一问题的存在,未来几周内会给任何受影响的设备打上补丁。

    而苹果也表示,已经证实iOS、MacOS、WatchOS、TVOS会受影响,在未来几周内会通过软件升级的形式提供修复补丁。

    Linksys/贝尔金称,已经了解到了KRACK漏洞的存在。安全团队正在确认这一漏洞的影响,会根据情况提供支持及升级。网件也称,已经为多款产品发布了修复补丁,公司也正在为其它产品开发相关补丁。用户可以在支持页面查询升级情况。

    KRACK攻击原理致其影响程度有限

    尽管这一漏洞几乎影响了所有的WiFi上网设备。但专注无线安全的RadioWar创始人SandMAN对搜狐科技称,利用KRACK漏洞,对于近端攻击或者劫持信息的人来说,这个手法很好用。但这一攻击手法并无法批量对无线客户端进行攻击,只能一个一个地攻击客户端,使用户在不知情的情况下连接到伪造的AP。因此,其攻击效率很低下。对动辄数以亿计的无线设备来讲,个人中招的机率非常低。

    SandMAN称,KRACK攻击的意义在于大型WLAN或者是特定的核心目标。另外,现有的WiFi防御对这种攻击也是可以做到预先防御的,因为攻击的套路本身是不会改变的。

    提高WiFi设备安全要做这样的功课

    360方面对搜狐科技表示,要避免受到KRACK攻击,用户需要做如下功课:

    1.及时更新无线路由器、手机,智能硬件等所有使用WPA2无线认证客户端的软件版本(在有补丁的前提下)。

    2.有条件的企业及个人请合理部署WIPS,及时监测合法WiFi区域内的恶意钓鱼WiFi,并加以阻断干扰,使其恶意WiFi无法正常工作。(WIPS的重要性)

    3.无线通信连接使用VPN加密隧道及强制SSL规避流量劫持与中间人攻击造成的信息泄漏。

    4.国标WAPI无线认证暂不受该漏洞影响。

    搜狐科技 文/丁丁

     

    我的总结:攻击者在抓到目标AP的BSSID和被攻击目标的MAC地址后,通过修改自身网卡的MAC地址为目标AP的MAC地址,以作为伪装的AP(伪装AP的密码与目标AP的密码无关);然后让被攻击目标神不知鬼不觉地转而连接伪装AP,连接成功后,所有的流量都会经过攻击者(MITM)。对于HTTP等不加密的协议,可以轻松抓下来;对于HTTPS,作者使用了sslstrip软件,把HTTPS降为HTTP,然后就可以抓取下来明文数据。

  • 神级视频软件FFmpeg你知多少

    尽管我们每天都在看视频,不过对视频播放背后的机理,恐怕并不是每个朋友都会去作了解。我们平时看到的小电影有着各种各样的格式,例如AVI、RMVB、MKV等等,但是这些格式并非是视频之间的本质区别——不同的格式往往只代表着不同的容器,容器内封装的具体视频流、音频流等内容,才是一个视频的本质所在。

    例如,AVI中可以封装H.264编码的视频流,MKV也可以封装H.264,但同时MKV还能够封装HEVC、VP9等视频流。因此,MKV和MKV之间的区别,可能要比某个AVI和某个MKV之间的区别大得多。当然,不同的容器也是有功能和性能上的区别的,例如MKV对各种编码的兼容性就非常好,而AVI则有所局限,且不支持流媒体播放等。

    要播放某段视频,播放软件所需要做的,首先要支持某种容器,然后把视频流、音频流等内容从容器中分离出来,接而解码,然后渲染,用户就可以播放出视频、音频乃至字幕等内容了。

    这个过程是比较繁琐而且颇有技术含量的,世界上有着茫茫多规格的编码格式,做一个播放器就意味着需要对这些东西吃得比较透,这无疑是相当费时费力的。因此,为数庞大的视频播放器实际上都使用了统一的解决方案——FFmpeg。

    阅读更多…

  • 0xC1900101-0x20017 在BOOT操作过程中的SAFE_OS阶段,安装失败 —— 我的解决方法

    给预装系统的笔记本升级系统,原来是Win10 1511,尝试升级1703多次,都提示“0xC1900101-0x20017 在BOOT操作过程中的SAFE_OS阶段”失败。

    今天经过以下操作后,升级成功。记录下来,不保证成功,希望可以帮到更多的用户。

    • 下载安装介质:从官网 https://www.microsoft.com/zh-cn/software-download/windows10/ 下载工具,用该工具下载.iso,注意版本匹配;下载完后把.iso文件放在非系统盘的根目录
    • 进入UEFI,把安全启动开启(我原来是关闭的,非常怀疑是这里导致失败),另外我没有开Legacy
    • 拔掉所有非必需的USB设备
    • 开启飞行模式,网络全断
    • 挂载.iso文件,双击.exe进行安装
  • Mac OS下安装使用串口工具minicom

    最近用Mac OS的电脑,需要使用串口进行简单的调试,用的是USB转串口的板子。

    首先用的是screen命令,直接运行:

    screen /dev/tty.usbxxxxxx 115200

    其中tty.usbxxxx因设备而异,115200是波特率。

    非常简单,但是对我来说有两个问题:①不能简单关闭,只能杀进程;②不能滚屏,以前的内容看不了(不知道是不是我的问题),后来就放弃了。

     

    后来还是找到了Linux下熟悉的minicom。

    安装:(需要先安装brew)

    brew install minicom

    配置:

    minicom -s
    1. 进入Serial port setup,
      Serial Device:按A,改为你的/dev/tty.usbxxxxxx;
      波特率:按E后,按实际情况改;
      关闭硬件流控:按F
    2. 设置完成,返回上一级,选择“Save setup as dfl”,非常重要,以后就不用再设置了
    3. 选择Exit

    屏幕上提示的按“Meta-Z”我按了一圈都没按出来,百度了一轮才知道是按“Esc-Z”…

    以后要使用,插上串口,在终端运行minicom即可。

  • 为OpenWrt/LEDE编译rpcapd 用于Wireshark远程抓包

    rpcapd是winpcap带的专门用来远程抓包的小工具,但是winpcap是给Windows用的,Linux下需要自己编译,如果要放到路由器上用,就要交叉编译了。

    以前编译都是直接在OpenWrt/LEDE的menuconfig里面选,现在不能选了,需要直接用toolchain手动编译。

    步骤如下:

    # 首先要把OpenWrt/LEDE的SDK下载或者编译出来
    # 以下的路径自行修改
    
    export PATH=$PATH:/root/lede/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16/bin
    export STAGING_DIR=/root/lede/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16
    
    export CC=mipsel-openwrt-linux-musl-gcc
    export CXX=mipsel-openwrt-linux-musl-g++
    export AR=mipsel-openwrt-linux-musl-ar
    export RANLIB=mipsel-openwrt-linux-musl-ranlib
    export ac_cv_linux_vers=4.4.61
    
    # 在https://www.winpcap.org/devel.htm 下载winpcap源码
    unzip source.zip
    cd winpcap/wpcap/libpcap
    chmod +x configure
    ./configure --build=x86_64-unknown-linux-gnu --host=mipsel-openwrt-linux --with-pcap=linux
    make
    
    # 在winpcap/wpcap/libpcap/pcap-int.h 里加上一行 #include <string.h> 否则在 strlcpy 处会报错
    cd rpcapd
    # 修改 Makefile
    # 修改编译器,改成CC=mipsel-openwrt-linux-gcc
    make
    
    file rpcapd
    # rpcapd: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked, interpreter /lib/ld-musl-mipsel-sf.so.1, not stripped

    相关参考:https://talpachen.github.io/2016/07/20/Net/rpcapd/

     

    附我编译的
      适用于LEDE(musl)的ar71xx版rpcapd:rpcapd_ar71xx.7z
      适用于LEDE(musl)的ramips版rpcapd:rpcapd_ramips.7z