m4bln


  • 首页

  • 归档

  • 标签

  • hint

  • 关于

  • 搜索

Android中的目录穿越漏洞

发表于 2018-03-30 | 阅读次数:
概述在Linux/Unix系统中“..”代表的是向上级目录跳转,如果程序在处理到诸如用“../../../../../../../../../../../etc/hosts”表示的文件时没有进行防护,则会跳转出当前工作目录,跳转到到其他目录中,即目录穿越。 在 Android 中由于目录穿越造成任意文件写入的漏洞较为常见。首先是写文件的接口可能本身设计上就允许传入任意路径的参数,另一种情况就是直接拼接路径导致可以 “…/” 进行目录穿越。 由于存在目录穿越漏洞的代码执行者通常是应用本身(非webview沙箱进程),因此一旦存在任意文件写入漏洞,就有可能覆盖原有的文件。此时若应用中存在动态加载代码的逻辑,配合目录穿越则有可能实现任意代码执行。 add:后来又多个团队或研究人员研究目录穿越问题,并起来各式各样的名字,现留下链接以备参考: zip-slip总结了多个存在目录穿越的第三方语言或库,并包含了具体的代码实例 https://github.com/snyk/zip-slip-vulnerabilityhttps://snyk.io/research/zip-slip-vulnerability zipperdown iOS平台下多个APP存在目录穿越漏洞 目录穿越场景1. 下载文件到指定的路径该场景适用于下载路径由用户可控,例如一些下载工具、保存的目录为用户名等特殊情况。 2. 解压 zip 文件时未对 ZipEntry 文件名检查Android应用中通常会直接下载一些皮肤等资源文件,为了节约流量,一些资源文件通常打包成zip。 Java代码在解压ZIP文件时会使用到ZipEntry类的getName()方法。如果ZIP文件中包含“../”的字符串,该方法返回值里面会原样返回。如果在这里没有进行防护,继续解压缩操作,就会将解压文件创建到其他目录中。 漏洞代码如下:1 ...
阅读全文 »

常用的正则、搜索

发表于 2018-03-22 | 阅读次数:
转自:https://www.unix-ninja.com/p/A_cheat-sheet_for_password_crackers 提取E-mail1grep -E -o "\b[a-zA-Z0-9.#?$*_-]+@[a-zA-Z0-9.#?$*_-]+.[a-zA-Z0-9.-]+\b" *.txt > e-mails.txt 提取http url1grep http | grep -shoP 'http.*?[" >]' *.txt > http-urls.txt For extracting HTTPS, FTP and other URL format use1grep -E '(((https|ftp|gopher)|mailto)[.:][^ >" ]*|www.[-a-z0-9.]+)[^ .,; >">):]' *.txt > urls.txt 提取浮点数1grep -E -o "^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]+)?$" *.txt > floats.txt 提取信用卡号码1234567891011121314151617181920Visa # grep -E -o "4[0-9]{3}[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}" *.txt > visa.txtMasterCard # grep -E -o "5[0-9]{3}[ -]?[0-9]{4}[ -]?[ ...
阅读全文 »

蓝牙、BLE设备相关

发表于 2018-03-17 | 阅读次数:
标准蓝牙设备扫描经典蓝牙设备1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889final BluetoothManager bm = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); mBluetoothAdapter = bm.getAdapter(); if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { Toast.makeText(this,"please open bluttooth",Toast.LENGTH_LONG).show(); Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, 0); } //获取已经绑定的蓝牙 Set<BluetoothDevice> devices = mBluetoothAdapter.getBondedDevices(); //遍历已绑定设备 if (devices.size() > ...
阅读全文 »

文件后缀名枚举

发表于 2018-03-15 | 阅读次数:
从一份恶意代码分析报告中抽取得,冥冥之中觉得以后有用,收藏以备用。 .000 .001 .1 .101 .103 .108 .110 .123 .128 .1cd .1sp .1st .3 .3d .3d4 .3dd .3df .3df8 .3dm .3dr .3ds .3dxml .3fr .3g2 .3ga .3gp .3gp2 .3mm .3pr .3w .4w7 .602 .7z .7zip .8 .89t .89y .8ba .8bc .8be .8bf .8bi8 .8bl .8bs .8bx .8by .8li .8svx .8xt .9xt .9xy .a$v .a2c .aa .aa3 .aac .aaf .aah .aaui .ab4 .ab65 .abc .abk .abt .abw .ac2 .ac3 .ac5 .acc .accdb .accde .accdr .accdt .ace .acf .ach .acp .acr .acrobatsecuritysettings .acrodata .acroplugin .acrypt .act .ad .ada .adb .adc .add .ade .adi .adoc .ados .adox .adp .adpb .adr .ads .adt .aea .aec .aep .aepx .aes .aet .afdesign .afm .afp .agd1 .agdl .age3rec .age3sav .age3scn .age3xrec .age3xsav .age3xscn .age3yrec .age3ysav .age3yscn .ahf .ai .aif .aiff .aim .aip .ais .ait .ak .al .al8 .ala .alb3 .alb4 .alb5 .alb6 ...
阅读全文 »

Unicorn使用

发表于 2018-03-15 | 阅读次数:
Unicore简介 Unocorn引擎是什么? 简单的来讲,一款模拟器。尽管不太常见,你不能用来模拟整个程序或者系统,同时它也不支持syscall。你只能通过手动的方式来映射内存以及数据写入,然后就可以从某个指定的地址开始执行模拟了。 用途 执行一些恶意软件中你感兴趣的函数而不必创建整个进程CTF比赛中也很常用Fuzzing[https://hackernoon.com/afl-unicorn-fuzzing-arbitrary-binary-code-563ca28936bf]GDB插件扩充,例如支持长跳转模拟混淆后的代码 框架代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849from unicorn import *from unicorn.arm_const import * import struct def read(name): with open(name) as f: return f.read() def u32(data): return struct.unpack("I", data)[0] def p32(num): return struct.pack("I", num) mu = Uc (UC_ARCH_ARM, UC_MODE_LITTLE_ENDIAN) BASE = 0x10000STACK_ADDR = 0x300000STACK_SIZE = 1024*1024 mu.mem_map(BASE, 1024*1024)mu.mem_map(STACK_ADDR, STACK_SIZE) mu.mem_write(BASE, ...
阅读全文 »

使用lief对ELF文件Patch

发表于 2018-03-13 | 阅读次数:
LIEFLIEF可以很方便的对elf, pe,MachO 文件进行parse和patch,由于其提供了python库,故可以实现跨平台。 这里以Android平台为例进行测试。 直接修改目标elf的导入符号注:直接修改符号一般适用于修改前后参数类型、个数完全相同的情况 二进制文件代码如下:123456789101112131415#include <stdio.h>int main(){ printf("id");}/*Android.mkLOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := lief_testLOCAL_SRC_FILES := main.cLOCAL_CFLAGS += -pie -fPIELOCAL_LDFLAGS += -pie -fPIEinclude $(BUILD_EXECUTABLE)*/ 编译完成后,push到手机中,运行如下图: 使用lief,直接将导入表中的printf符号替换为system12345import liefbinary = lief.parse("lief_test")puts_sym = filter(lambda e: e.name == "printf", binary.dynamic_symbols)[0]puts_sym.name = "system"binary.write("lief_test_patch"); 将lief_test_patch push到手机中,执行结果如下图: 修改 libc 中的相关符号,然后使用 LD_LIBRARY_PATH 加载修改后的库这里需要搞清楚elf加载的lib位置,例如我在一个64bit手机上做实验,那么加载的lib位于/system/l ...
阅读全文 »

Android Hook 之 Frida

发表于 2018-03-09 | 阅读次数:
一、Frida简介Frida是一款流行的hook框架,通杀android\ios\linux\win\osx等各平台,相比xposed和substrace cydia更加便捷。Frida的官网为:http://www.frida.re/,其核心原理是实现了一套inline hook框架,在Andorid平台的具体原理可参考这里。 本文重点介绍Frida在android平台的使用。 二、环境配置官方教程https://frida.re/docs/installation/,主要操作如下: pip install frida-tools 安装frida环境 在root的手机上运行frida server端 1.下载对应平台的frida-server (https://github.com/frida/frida/releases) 2.adb push frida-server /data/lcoal/tmp 3.chmod 755 frida-server 4.setenforce 0(运行前关闭SELinux) 5../frida-server & 建立调试通道 USB连接+默认端口号可直接略过 改变端口号需要 adb forward tcp:12345 tcp:12345 完成配置,直接在PC端运行hook脚本即可 需要注意的是,frida的客户端和服务度版本应该相同,否则会出现不可预知的其他错误。使用“frida –version” 查看frida的版本 三、免root实现frida hook(重打包)注意: 无root环境下frida的部分功能受限 apktool反编译apk 1$ apktool d test.apk -o test 将对应版本的gadget拷贝到/lib目录下载地址:https://github.com/frida/frid ...
阅读全文 »

RSA算法原理及应用破解

发表于 2018-03-06 | 阅读次数:

前言

RSA算法是现今使用广泛的公钥密码算法,也是号称地球上最安全的加密算法。在了解RSA算法之前,先熟悉下几个术语
根据密钥的使用方法,可以将密码分为对称密码和公钥密码
对称密码:加密和解密使用同一种密钥的方式
公钥密码:加密和解密使用不同的密码的方式,因此公钥密码通常也称为非对称密码。

阅读全文 »

curl用法

发表于 2018-03-06 | 阅读次数:

批量下载

  • -O表示下载后的文件名和服务端的文件名一样
    curl -O http://45.77.10.219/2018-02-2[6-8].html
  • -o指定下载后的文件名
    curl -o “#1.html” http://45.77.10.219/2018-02-2[6-8].html
    (#1表示可变参数,该命令结果为6.html,7.html,8.html)
    阅读全文 »

Android Https抓包实践

发表于 2018-03-05 | 阅读次数:
平时的安全研究经常会有抓包的需求,随着互联网厂商安全意识的不断提高,多数Android APP采用了https协议和服务端进行通信,增加了中间人攻击的难度。 在使用burpsuilt、Fiddler等工具抓https数据包时,通常需要在手机上安装一个证书,即便这样仍然还会出现抓不到包等各种各样的错误和问题,为了解决这些问题,有必要了解下https的原理和实现,方可在遇到问题时根据不同的情况来解决。 文章有点长,搞个图便于以后采坑定位: 什么是证书这里的证书是指https数字证书,为了防止被中间人挟持,整个互联网都在由http向https切换,证书是https协议中的一个重要角色,本质上证书被用来验证“一个站点是不是真正的站点”。下图是https的协议过程,其中第4阶段就是证书的校验阶段 那么如何通过证书来验证“一个站点是不是真正的站点”呢?首先从证书的内容说起。 使用openssl可以查看证书的内容,例如:12345678910111213141516171819202122232425262728293031323334353637383940openssl x509 -noout -text -in kubernetes.pemCertificate: Data: Version: 3 (0x2) Serial Number: 06:6c:9f:d7:c1:bb:10:4c:29:43:e5:71:7b:7b:2c:c8:1a:c1:0e Signature Algorithm: ecdsa-with-SHA384 Issuer: C=US, O=Amazon, CN=Amazon Root CA 4 Validity Not Before: May ...
阅读全文 »
1…567…9

m4bln

影后入林到驿前

84 日志
2 标签
© 2021 m4bln
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.3