Category Archives: 技术

ASLR总结

0x00 ASLR总结

对于Linux系统,有下表:

ASLR Level -fPIC -pie Code Stack Heap comment
0 Yes Fixed Fixed Fixed None
0 No Fixed Fixed Fixed None
1 Yes Rand Rand Rand Base address of heap is located immediately after the end of code segment
1 No Fixed Rand Fixed Base address of heap is located immediately after the end of code segment
2 (default) Yes Rand Rand Rand Base address of heap is fully randomized and has nothing to do with code segment
2 (default) No Fixed Rand Rand Base address of heap is fully randomized and has nothing to do with code segment

在Android上使用frida和cydia substrate

0x00 背景

Android上使用frida比iOS稍微麻烦些,这里仅说一下一些坑。另外再贴一个使用cydia substrate进行hook的文章链接。

0x01 注意点

  1. windows上安装frida时要用easy_install fridapip install frida的frida无法正常工作,frida-ps -U时会显示"failed to create process"。

  2. 启动frida-server后还要进行端口转发。

    adb forward tcp:27042 tcp:27042
    adb forward tcp:27043 tcp:27043
    
  3. frida使用了ptrace进行hook,如果要hook的程序有本身就attach了ptrace进程,则frida无法正常工作,此时我们采取以下策略:
    1. 在app启动前使用while循环一直尝试attach gdb debugger,然后启动app,这样可以保证app启动后我们的gdb先attach上,app自己的ptrace会attach失败。
    2. 把gdb detach掉,此时app已经没有任何ptrace attach了。
    3. 启动frida hook脚本,可以正常hook了。

0x02 使用Cydia Substrate

有些人不知道,其实cydia substrate不光能在iOS上用,还能在安卓上用。
非常好的文章:https://koz.io/android-substrate-c-hooking/

xxs相关的坑

0x00 总结一下xss相关的坑

  1. innerHTML写出的<script> tag 不会触发xss, 但是javascript scheme会被触发,下面这个例子里,只有alert(2)被触发了。
    <div id = "tag1"> </div>
    <div id = "tag2"> </div>
    
    <script> document.getElementById("tag1").innerHTML="<script>alert(1)<\/script>"</script>
    <script> document.getElementById("tag2").innerHTML="<iframe src='javascript:alert(2)'><\/iframe>"</script> 
    

    这个行为在HTML5中已经标准化https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#Security_considerations
    Continue reading

hook iOS的libcurl

0x00 背景

我们知道,为了防止中间人攻击(MITM ),一般iOS应用会使用SSL Pinning。大多数情况下,这些App会使用AFNetworking或者NSURLSession这两个库来做SSL Pinning。但是这两个库使用了iOS提供的AFSecurityPolicy类,该类又调用了SSLHandshake,SSLCreateContext等iOS的API,只要hook了这几个API(ssl-kill-switch2),即可bypass SSL Pinning。但是最近发现某App并未使用这两个库进行SSL Pinnig,而是使用了libcurl和openssl来做SSL Pinning,这两个库被编译成native代码,静态链接到App binary中,没有symbol了,让我们的分析与bypass难度大大增加。

0x01 寻找libcurl的位置

Continue reading

使用Packet Filter将iPhone流量转发到burp proxy上

0x00 背景

我们知道,如果想要用burp截取iPhone流量,可以将iPone接入mac的共享wifi,再将iPhone的wifi代理设置为burp的监听接口与端口即可。但是实际使用中,ssl等流量有时并不会被转发到burp上,我个人推测是只有使用iOS内置的NSURLSession等库的时候代理的设置才会被使用。除此之外的情况,我们需要使用路由表,强制将流量转发到burp上去。
Continue reading

iOS程序动态debug方法

0x00 背景

最近在做iOS程序的debug,将步骤记录一下。部分参考此文一步一步用debugserver + lldb代替gdb进行动态调试

0x01 各种安装

debugserver运行在iOS上,顾名思义,它作为服务端,实际执行LLDB(作为客户端)传过来的命令,再把执行结果反馈给LLDB,显示给用户,即所谓的“远程调试”。在默认情况下,iOS上并没有安装debugserver,

Continue reading