渗透测试-工具篇


dirsearch-网站目录结构扫描器

dirsearch是一个基于python的命令行工具,旨在暴力扫描页面结构,包括网页中的目录和文件。

安装与使用

#安装:
git clone https://github.com/maurosoria/dirsearch.git

#使用:
cd dirsearch/
#运行需要python3环境:
python3 dirsearch.py -u "http://localhost/" -e *     
# 扫描网站需要指定网站的脚本类型,* 为全部类型的脚本

用法示例


扫描结果
扫描时间,状态码,大小,扫描的目录,重定向的地址

GitHack -一个git泄露利用脚本

GitHack是一个.git泄露利用测试脚本,通过泄露的文件,还原重建工程源代码。

当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。

Git信息泄露的危害很大,渗透测试人员、攻击者,可直接从源码获取敏感配置信息(如:邮箱,数据库),也可以进一步审计代码,挖掘文件上传、SQL注射等安全漏洞。

安装与使用

下载地址:
版本1:https://github.com/lijiejie/GitHack.git 文件夹重建源代码,同时保持目录结构不变。

版本2:https://github.com/BugScanTeam/GitHack .git 泄漏利用工具,可还原历史版本

使用

# 1. 切换到GitHack的路径下
cd GitHack-master
# 2.执行py脚本
 python GitHack.py http://111.198.29.45:57559/.git/

脚本的工作原理:

1. 解析.git/index文件,找到工程中所有的: ( 文件名,文件sha1 )
2. 去.git/objects/ 文件夹下下载对应的文件
3. 使用zlib解压文件,按原始的目录结构写入源代码

优点:

1. 速度快,默认20个工作线程
2. 尽量还原所有的源代码,缺失一部分文件不影响脚本工作
3. 脚本不需要执行额外的git命令,有python就够了

用法示例

此例子为攻防世界-web-mfw

重建的工程源代码在GitHack文件夹中

参考:https://www.secpulse.com/archives/6275.html

.DS_Store-文件泄漏利用脚本

.DS_Store(英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮目录的自定义属性,例如文件们的图标位置或者是背景色的选择。相当于 Windows 下的 desktop.ini。

安装

#安装:
git clone https://github.com/lijiejie/ds_store_exp.git
pip install -r requirements.txt

#使用:
cd \A-CTFtools\脚本\Web\ds_store_exp-master   #切换到你安装的路径下
运行需要python2环境:
python ds_store_exp.py http://www.example.com/.DS_Store

用法示例

此例子为bugku-sql注入2
通过扫描发现.DS_Store文件泄露

使用脚本查看.DS_Store文件

访问发现的路径得到flag

dvcs-ripper-版本控制软件信息泄露利用工具

一款perl的版本控制软件信息泄露利用工具,支持SVN, GIT, Mercurial/hg, bzr… git泄露推荐使用Githack,功能更强

安装

sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl

sudo apt-get install libparallel-forkmanager-perl libredis-perl libalgorithm-combinatorics-perl

sudo apt-get install cvs subversion git bzr mercurial

git clone https://github.com/kost/dvcs-ripper

用法示例

# 1. 切换到dvcs-ripper的路径下
cd dvcs-ripper

# 2.执行脚本
#SVN
perl rip-svn.pl -v -u http://www.example.com/.svn/

#HG
perl rip-hg.pl -v -u http://www.example.com/.hg/

#Git
perl rip-git.pl -v -u http://www.example.com/.git/

#bzr
perl rip-bzr.pl -v -u http://www.example.com/.bzr/

#CVS
perl rip-cvs.pl -v -u http://www.example.com/CVS/

此例子为CTFHub-SVN泄露

# 1. 切换到dvcs-ripper的路径下
cd dvcs-ripper

# 2.执行perl脚本
perl rip-svn.pl -v -u http://challenge-8df627014df49067.sandbox.ctfhub.com:10080/.svn/

3.进入.svn/pristine/文件夹下, 在bf文件夹下发现xxx.svn-base源码文件,查看得到flag

SQLmap-自动SQL注入工具

SQLmap是一款用来检测与利用SQL注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹、访问底层文件系统、执行命令)。

安装

windows安装方法:Windows下sqlmap的安装图解

Linux安装方法:

wget https://codeload.github.com/sqlmapproject/sqlmap/legacy.tar.gz/master #下载sqlmap
tar zxvf master  #解压压缩包
cd sqlmapproject-sqlmap-310d79b/   #进入解压目录
python sqlmap.py -h  #开始使用

用法示例

(1) 猜解是否能注入

win: python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 

kali: sqlmap -u http://ctf5.shiyanbar.com/web/index_2.php?id=1

(2) 查找数据库

win:python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --dbs   # ?id=1 --current-db(当前数据库)

kali: sqlmap -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --dbs

(3) 猜解表(假如通过(2)得到了web1这个数据库)

win: python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1  --tables -D web1

kali: sqlmap -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --tables -D web1

(4) 根据猜解的表进行猜解表的字段(假如通过(3)得到了flag这个表)

win: python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --columns -T flag -D web1

kali: sqlmap -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --columns -T flag -D web1

(5) 根据字段猜解内容(假如通过(4)得到字段为username和password)

win: python sqlmap.py -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --dump -C "username,password" -T flag -D web1

kali: sqlmap -u http://ctf5.shiyanbar.com/web/index_2.php?id=1 --dump -C "username,password" -T flag -D web1

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

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

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

--tamper=space2comment 绕过空格 (--tamper=space2comment --dbs)
-a 检索所有内容
-b, –banner 检索数据库管理系统的标识
-D (DBname) 枚举的指定数据库名中信息
-T (TBLname) 枚举的指定数据库表中信息(eg:-T tablename –columns)
-C (COL ) 枚举的指定数据库字段()信息 (eg:-C flag -T flag -D web1 <---> -C 字段名 -T 表名 -D 数据库名)
-U (USER) 用来进行枚举的数据库用户
--dbs 扫描数据库信息
--tables 列出数据库所有的表信息
--columns 列出数据库表中的所有字段信息(表列)
--current-db 列出当前的数据库名称
-current-user 检索数据库管理系统当前用户
--roles 枚举用户
-dump 列出数据库中表的字段名中信息
--dump-all 列所有表的内容
--exclude-sysdbs 列举用户数据库的表内容
--common-tables暴力破解表
-is-dba 检测DBMS当前用户是否DBA
-users 枚举数据库管理系统用户
-passwords 枚举数据库管理系统用户密码哈希
-privileges 枚举数据库管理系统用户的权限
-columns 枚举DBMS数据库表列-dump 转储数据库管理系统的数据库中的表项
-search 搜索列(S),表(S)和/或数据库名称(S)
-start=LIMITSTART 第一个查询输出进入检索
-stop=LIMITSTOP 最后查询的输出进入检索
-first=FIRSTCHAR 第一个查询输出字的字符检索
-last=LASTCHAR 最后查询的输出字字符检索
-sql-query=QUERY 要执行的SQL语句
-sql-shell 提示交互式SQL的shell

更多参考我另一篇文章:https://www.jianshu.com/p/a46abd1e67aa

Nmap-网络扫描工具

简介

nmap(Network Mapper)是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。

核心功能

1.1 主机发现
1.2 端口扫描
1.3 版本侦测
1.4 操作系统侦测
1.5 防火墙/IDS规避和哄骗
1.6 NSE脚本引擎

基本命令和典型用法

Nmap 基本语法

nmap [ <扫描类型> ...] [ <选项> ] { <扫描目标说明> }

全面进攻性扫描(包括各种主机发现、端口扫描、版本扫描、OS扫描及默认脚本扫描):

nmap -A -v target_ip

Ping扫描:

nmap -sn -v target_ip

快速端口扫描:

nmap -F -v target_ip

版本扫描:

nmap -sV -v target_ip 

操作系统扫描:

nmap -O -v target_ip

常用命令

nmap -p 0-65535  target_ip   #扫描端口
nmap -sV  target_ip          #扫描端口和对应服务
nmap -sP  network_segment    #扫描网络存活主机
nmap -O   target_ip          #扫描操作系统
nmap -sS -sV --script=xxx.nse target_ip  #使用脚本扫描漏洞
nmap -iR 10  -p 3306  随机生成10个互联网上的IP,从中找出mysql服务器。

详细用法

不老的神器:安全扫描器Nmap渗透使用指南
nmap的常用命令表

AWVS-漏洞扫描工具

Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞。AWVS可以检查SQL注入漏洞,也可以检查跨站脚本攻击漏洞,可以扫描任何可以通过web浏览访问和遵循HTTP/HTTPS规则的web站点和web应用程序。

官网地址:https://www.acunetix.com/vulnerability-scanner/

AWVS安装与使用

acunetix_WVS 13.基础使用

Crunch-字典生成工具

Crunch是一种创建密码字典工具,按照指定的规则生成密码字典,可以灵活的制定自己的字典文件。使用Crunch工具生成的密码可以输出到屏幕,保存到文件、或另一个程序。

语法和参数

crunch <min> <max> [options] [<charset string>]

#参数详解
     min    设定最小字符串长度(必选)
     max    设定最大字符串长度(必选)
     <charset string>   指定字符集设置

     oprions
     -b     指定文件输出的大小,避免字典文件过大  
     -c     指定文件输出的行数,即包含密码的个数
     -d     限制相同元素出现的次数
     -e     定义停止字符,即到该字符串就停止生成
     -f     调用库文件(/etc/share/crunch/charset.lst)
     -i     改变输出格式,即aaa,aab -> aaa,baa
     -I     通常与-t联合使用,表明该字符为实义字符
     -m     通常与-p搭配
     -o     将密码保存到指定文件
     -p     指定元素以组合的方式进行
     -q     读取密码文件,即读取pass.txt
     -r     定义重某一字符串重新开始
     -s     指定一个开始的字符,即从自己定义的密码xxxx开始
     -t     指定密码输出的格式
     -u     禁止打印百分比(必须为最后一个选项)
     -z     压缩生成的字典文件,支持gzip,bzip2,lzma,7z  

用法示例

root@kali:~# crunch -h

#生成最小为1 ,最大为8位,全部由字母组成
root@kali:~#crunch 1 8  

#生成最小为1 ,最大为2位,全部由abc组成
root@kali:~# crunch 1 2 abc  

#生成最小为1 ,最大为6位,全部由abc和空格组成
root@kali:~# crunch 1 6 ab\  

#生成最小为1 最大为8 调用系统里面的元素密码库中的mixalpha-numeric-all-space,并保存为wordlist.txt文件
root@kali:~#crunch 1 8 -f /usr /crunch arset.lst mixalpha-numeric-all-space -o wordlist.txt

#调用系统里面的元素密码库中的mixalpha-numeric-all-space这一项 生成8位密码,生成格式“两个小写字母+dog+两个小写字母",并以cbdog开头。
root@kali:~# crunch 8 8 -f /usr /crunch arset.lst  mixalpha-numeric-all-space -o wordlist.txt -t @@dog@@@ -s cbdog

#调用系统里面的元素密码库中的ualpha这一项。生成2-3位密码,并以BB开头 -s 以什么为开头
root@kali:~#crunch 2 3 -f /usr /crunch arset.lst ualpha -s BB


#生成   但是前面无论数字是多少,但是必须要有。
root@kali:~# crunch 5 5 -p abc 
abc
acb

#生成   但是前面无论数字是多少,但是必须要有。
root@kali:~#crunch 4 5 -p dog cat bird
birdcatdog, birddogcat, catbirddog, catdogbird, dogbirdcat, dogcatbird.

#生成最小为1位最大为5位所有小定字母的密码字典,其中每个文件包含6000个密码,并将密码文件保存为bz2文件.输出文件格式为first_word-last_word.txt.bz2
root@kali:~#crunch 1 5 -o START -c 6000 -z bzip2

#生成 aaaa-gvfed.txt, gvfee-ombqy.txt, ombqz-wcydt.txt, wcydu-zzzzz.txt  每个文件大小为20M
root@kali:~#  crunch 4 5 -b 20mib -o START


#生成4位密码,其中密码格式为”两个数字“+一个小字母+常规符号(其中数字这里被指123组成的所有2位排列组合)。
root@kali:~#crunch 4 4  + + 123 + -t %%@^


#生成5个无素组成密码,其中前三个为dog cat bird排列组合,后面两个为小写字母。
root@kali:~# crunch 5 5 -t ddd@@ -o j -p dog cat bird


#生成7位密码 格式”p@ss+大写字母+数字+常规字符“   -l 中@对-t里面的@进行了转义
root@kali:~#crunch 7 7 -t p@ss,%^ -l a@aaaaa

#生成密码为5位,格式为”3个字母+三个数字。“ -d 2@ 限制每个密码最少出现2种字母.
root@kali:~#crunch 5 5 -d 2@ -t @@@%%

#生成密码为10位 ,格式”三个小字母+一个常规符号+4个数字+两个常规符号“ ,限制每个密码至少2种小写字母和至少三个数字。并且每个文件为20M,文件名为START的格式。
root@kali:~# crunch 10 10 -t @@@^%%%%^^ -d 2@ -d 3% -b 20mb -o START  


#生成8位密码,每个密码至少出现2种字母。
root@kali:~# crunch 8 8 -d 2@ 

Hydra-暴力密码破解工具

语法和参数

hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns]
[-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT]

-R 继续从上一次进度接着破解。
-S 采用SSL链接。
-s PORT 可通过这个参数指定非默认端口。
-l LOGIN 指定破解的用户,对特定用户破解。
-L FILE 指定用户名字典。
-p PASS 小写,指定密码破解,少用,一般是采用密码字典。
-P FILE 大写,指定密码字典。
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。
-M FILE 指定目标列表文件一行一条。
-o FILE 指定结果输出文件。
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。
-t TASKS 同时运行的线程数,默认为16。
-w TIME 设置最大超时的时间,单位秒,默认是30s。
-v / -V 显示详细过程。
server 目标ip
service 指定服务名

破解ssh

hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh
hydra -l 用户名 -p 密码字典 -t 线程 -o save.log -vV ip ssh

破解ftp

hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认16) -vV
hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV

get方式提交,破解web登录

hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip http-get /admin/
hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns -f ip http-get /admin/index.php

post方式提交,破解web登录


hydra -l 用户名 -P 密码字典 -s 80 ip http-post-form "/admin/login.php:username=^USER^&password=^PASS^&submit=login:sorry password"

hydra -t 3 -l admin -P pass.txt -o out.txt -f 10.36.16.18 http-post-form "login.php:id=^USER^&passwd=^PASS^:<title>wrong username or password</title>"

(参数说明:-t同时线程数3,-l用户名是admin,字典pass.txt,保存为out.txt,-f 当破解了一个密码就停止, 10.36.16.18目标ip,http-post-form表示破解是采用http的post方式提交的表单密码破解,<title>中的内容是表示错误猜解的返回信息提示。)

破解https

hydra -m /index.php -l muts -P pass.txt 10.36.16.18 https

破解teamspeak


hydra -l 用户名 -P 密码字典 -s 端口号 -vV ip teamspeak

破解cisco

hydra -P pass.txt 10.36.16.18 cisco
hydra -m cloud -P pass.txt 10.36.16.18 cisco-enable

破解smb

hydra -l administrator -P pass.txt 10.36.16.18 smb

破解pop3

hydra -l muts -P pass.txt my.pop3.mail pop3

破解rdp

hydra ip rdp -l administrator -P pass.txt -V

破解http-proxy

hydra -l admin -P pass.txt http-proxy://10.36.16.18

破解imap

hydra -L user.txt -p secret 10.36.16.18 imap PLAIN
hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN

详细请看:(总结)Linux下的暴力密码在线破解工具Hydra详解

curl-命令行文件传输工具

用法示例

#不带有任何参数时,curl 就是发出 GET 请求。
curl https://www.example.com

#-A参数指定客户端的用户代理标头,即User-Agent
curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' https://google.com

#-b参数用来向服务器发送 Cookie。
curl -b 'foo1=bar;foo2=bar2' https://google.com

#-d参数用于发送 POST 请求的数据体。
$ curl -d 'login=emma&password=123'-X POST https://google.com/login
# 或者
$ curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login

#-e参数用来设置 HTTP 的标头Referer -H参数可以通过直接添加标头Referer达到同样效果。
curl -e 'https://google.com?q=example' https://www.example.com
或者
curl -H 'Referer: https://google.com?q=example' https://www.example.com

#-H参数添加 HTTP 请求的标头。
curl -H 'Accept-Language: en-US' -H 'Content-Type: application/json' https://google.com

#-i参数打印出服务器回应的 HTTP 标头
curl -i https://www.example.com

#-u参数用来设置服务器认证的用户名和密码。
curl -u 'bob:12345' https://google.com/login

#-v参数输出通信的整个过程,用于调试。
curl -v https://www.example.com

#-X参数指定 HTTP 请求的方法。
curl -X POST https://www.example.com

更多详细请看:curl 的用法指南

SSH端口转发

基础知识

端口转发前服务器必须做如下配置:

#1.允许任何人连接到转发的端口
vim /etc/ssh/sshd_config
将#GatewayPorts no 修改为 GatewayPorts yes

#2.重启ssh服务
service sshd restart
或者
systemctl restart sshd

SSH语法:

ssh [options] [-l login_name][user@]hostname [command]

创建SSH隧道的常用参数如下:

-C:压缩数据传输
-f:将SSH传输转入后台执行,不占当前的Shell,通常和-N连用
-N:只希望建立隧道,而不会在远程主机上执行任何指令
-T:只希望建立隧道,因而不需要创建虚拟终端
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发
-P:指定SSH端口
-q 安静模式,不输出错误/警告信息

本地端口转发

构成条件:本地网无法访问私网,本地网可以访问云服务器,云服务器可以访问私网

本地端口转发

将本地机的某个端口转发到远端目标机器的指定端口:

ssh  -CfNg -L 本地IP:本地port:私网IP:私网port 服务器用户名@服务器IP

实例

场景描述:云服务器上有一个Web服务,端口8080,但是安全组没有开放8080端口,因此本地无法访问该服务,怎样才能让本地访问到Web服务呢?

首先确保服务器进行了前面的端口转发前配置(打开GatewayPorts),然后执行下方命令

ssh  -CfNg -L 192.168.137.1:8088:localhost:8080 root@139.224.112.182

运行命令,输入密码后,本地访问 192.168.137.1:8088或者 localhost:8088就可以访问到云服务器的 Web 服务

远程端口转发

构成条件:本地网无法访问私网,本地网可以访问云服务器,私网也可以访问云服务器

远程端口转发

将远程主机(服务器)的某个端口转发到目标机器的指定端口:

ssh  -CfNg -R 远程IP:服务器port:内网IP:内网port  服务器用户名@服务器IP

实例

场景描述:本地主机运行了一个Web服务,端口为80,怎么让其他人也能访问这个Web服务?

首先确保服务器进行了前面的端口转发前配置(打开GatewayPorts),然后服务器安全组打开8088端口,然后执行下方命令

ssh -CfNg -R 0.0.0.0:8088:192.168.137.1:80 root@139.224.112.182

# 0.0.0.0表示vps上监听所有地址,即所有人可访问

运行命令,输入密码后,其他人访问 139.224.112.182:8088 就可以访问到我本地的 Web 服务了

其他相关命令:

netstat -anp|grep 8088 #检验端口的网络连接情况
killall ssh #终止ssh所有进程

参考:

最佳搭档:利用正反 SSH 隧道穿透防火墙访问内网服务器

玩转SSH端口转发

B站SSH端口转发

lcx端口转发

lcx是一款强大的内网端口转发工具,用于将内网主机开放的内部端口映射到外网主机(有公网IP)任意端口。Windows版是lcx.exe,Linux版为portmap

内网端口转发:
lcx.exe -slave vps 3333 127.0.0.1 3389
lcx.exe -listen 3333 4444
本地端口转发:
lcx.exe -tran 21 主机IP 3389 #将3389端口转发到其他端口

文章作者: 简文涛
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 简文涛 !
评论-----昵称和邮箱必填,网址选填
 上一篇
Python模块-Requests学习与CTF和AWD实战 Python模块-Requests学习与CTF和AWD实战
Requests is the only Non-GMO HTTP library for Python, safe for human consumption. 前言为什么学习Requests模块呢,因为最近老是遇见它,自己又不太懂
2019-08-08
下一篇 
CTF-流量分析总结 CTF-流量分析总结
前言在CTF比赛中,对于流量包的分析取证是一种十分重要的题型。通常这类题目都是会提供一个包含流量数据的pcap文件,选手通过该文件筛选和过滤其中无关的流量信息,根据关键流量信息找出flag或者相关线索,一般flag隐藏在某个数据包里面,或者
2019-07-29
  目录