Jpkieee
- 关注

M87靶机IP:192.168.52.135
Kali攻击机IP:192.168.52.129
首先使用nmap找到靶机:
nmap -sn -n -PE -T4 192.168.52.0/24
- -sn 使用ping扫描但不做端口扫描
- -n 不进行域名解析
- -PE 使用ping扫描中的Ping-Echo方式
- -T4 使用时间等级4:假设自己网络良好,加快扫描速度
找到了!192.168.52.146便是靶机IP;
但后续再次扫描发现目标靶机ip有动态变化变成了135;所以192.168.52.135才是靶机ip;
继续使用nmap扫描该ip的端口以及其他信息:
nmap -sV -A -p- -T4 192.168.52.135
- -sV 扫描端口服务的版本信息
- -A 使用操作系统检测、版本检测、脚本扫描、路由跟踪
- -p- 扫描1-65336所有端口开放状态以及服务
- -T4 加速扫描(偏佛系)
开放了22、80端口,另外还有一个9090端口是https的网站。
去看看80和9090是什么情况。
80http网页是一个登录入口;用gobuster爆破一下目录:
gobuster dir -u http://192.168.52.135/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100 -k -e -x .txt,.html,.php
- dir 使用网站目录扫描模式
- -u 指定要扫描的URL
- -w 指定用来扫描的路径爆破字典
- -t 指定线程数
- -k 跳过SSL验证
- -e 输出完整的扫描路径
- -x 指定要扫描的路径后缀,提高效率
扫描到了几个路径去看一下有没有东西:
/admin又一个登录入口
/assets好像只是一个样式文件夹
看完了,貌似没有什么东西能利用到。再用dirb扫描一下,直接dirb 192.168.52.135:
dirb 192.168.52.135
相比于gobuster发现多了一个backup路径,去看看:
又又是一个登录的页面,除此之外应该没什么东西了;去看看9090端口吧:
又又又是一个登录的页面,爆破一下这个目录
用gobuster同样的方法爆破发现报错,网上试了各种方法都不能解决。
那只能换一个网站目录爆破工具了,用dirb试下:
看了下这两个目录,并没有什么东西。
一共有4个登录页面。3个在80端口,1个在9090端口。
使用burpsuite抓包然后给sqlmap跑一下,跑不出东西。
看了下各网站的源码,也没有什么可疑的东西。使用burp做fuzz测试,参数猜解各网站有无价值信息或漏洞:
抓包,发给Intruder
添加payload位置
修改攻击模式为集束Bomb
在payload 1添加参数变量名
Payload 2添加参数可能的值
资源池设置最大请求数为50,跟线程的概念差不多:
直接start跑起来
跑完了我们来看下:
没有长度不一样的回应,说明回显的都是一样的没有成功出东西。
我们继续给下一个页面做参数猜解的fuzz测试,前面几步都一样的我们直接放爆破结果:
发现存在长度不一样的回应,看看是什么参数名与值(payload):
我们发现参数id可以输入值,打开几个对比一下,看看id到底是干嘛的:
顶部回显了sql语言报错!说明参数id可能是sql注入的注入点!去浏览器网页上验证下:
报错了!验证id是sql注入的注入点!直接sql注入一波提取用户名和密码:
使用联合注入攻击拿到了username和password,整理成字典就是这样的:
这里使用到一个vim编辑器中查找替换的命令:
:%s/,/^M/g
%s 替换指定字符串
, 要被替换的字符串,这里是逗号
^M 要替换成的字符串,这里是vim里面的回车符
g 在当前文件全局使用
简单理解一下就是在文件里找”,”这个字符然后全部替换成回车符!
用户名密码都有了,现在去爆破一下吧!
经过测试,4个登录页面都无法爆破成功,可能缺失关键账户或密码。
查找资料后,发现可以利用sqlmap查看系统文件获取用户名:
sqlmap -r req.txt --file-read /etc/passwd
- -r 指定请求数据包获取信息
- --file-read 指定要查看目标机器上的文件路径
- --batch 全自动交互,自动选择选项
回车直接开始获取靶机上的passwd文件,看看里面有没有多的用户名:
获取成功,倒数第三行表示文件存放在本地的路径;去查看一下并过滤出用户名:
发现有一个没见过的用户名,将它加入到username字典中!
charlotte
保存后去burp再次尝试爆破:
第一个登录页面:
第二个登录页面:
第三个登录页面:
前三个登录页面全部没有成功,还剩最后一个:
最后一个使用了Basic认证,Basic认证是HTTP 中非常简单的认证方式,只使用了Base64加密方式;因为简单,所以不是很安全,不过仍然非常常用。
我们把Basic加密字符串设为payload;爆破模式设置为Sniper:
payload类型设置为Custom Iterator(自定义迭代器),
position1设置加载username,position2设置为一个“:“字符,position3设置加载password;
设置好后在下方payload processing添加base64的编码加密方式:
设置好后直接start attack开始爆破!
发现存在状态码500的回复包,查看详细后网页回显内存缓冲区错误(memory buffer error):
无法正常的爆破出密码,可能是默认开启的url encode选项会把“=”编码导致的。关闭当前攻击窗口,去payload栏关掉url encode复选框:
关掉后再次尝试start attack;这一次就不一样了:
有一个长度507的说明这个账户和密码的组合是正确的账户和密码,其余的长度都是3705且状态码都是401(未经身份验证)。
去看看这个payload是哪个账密组合:
果然,账户是之前在passwd里找到的那个。使用这个账号密码去登录最后那个登录页面:
登录成功!进入到管理页面,且下方工具一栏有个终端,直接getshell。
用nc反弹shell到kali;Kali使用nc监听4444端口:
靶机网页终端使用nc连接到Kali并打开/bin/sh:
连接成功!然后使用python调用pty模块,打开交互式shell:
已经getshell了,接下来就是提权拿到root目录下的flag文件!先看下系统内核版本看看有没有相关漏洞:
uname -a
4.19版本;去searchsploit搜索一下:
能找到exp,保存下来查看发现需要目标机器上存在gcc,去看下有没有,不然搞半天最后发现是没有gcc那就尴尬了:
漂亮!还真没有。那这些exp都无法起到作用……
去看看sudo -l有没有能利用的:
好吧也没有,看看SUID文件有无可利用:
find / -perm -u=s 2>/dev/null
看看exim4的版本在不在漏洞范围内:
4.94不在漏洞范围里,再找找其他的漏洞吧;
看看getcap有没有可以利用的相关权限:
发现old这个东西有setuid权限,看看old到底是什么东西:
old只是一个2.7的python,但是它有setuid权限。这就好办了,先导入os模块;然后setuid为0,再然后直接os.system(“/bin/sh”)就能提权:
成功提权到root用户!flag:
整体来说还是比较简单的,难的就是在一些小知识点的了解;如果不会fuzz测试参数猜解的话根本做不出来;另外还有就是通过sql注入读取目标机器文件;以及Basic认证、Capabilities机制权限管理getcap列出、python拥有setuid权限时的提权方法:python -c 'import os;os.setuid(0);os.system("/bin/sh")'。
总结:
涉及到的知识点:
- 模糊测试(fuzz testing)是网络安全测试中的一种常见技术,使用随机或半随机数据生成器进行输入端口/协议的测试,其目标是检测系统或应用程序(这里是Web应用程序)对不正确或非预期输入的响应。这里使用的是fuzz测试中的参数猜解(parameter guessing)得到了一个sql注入的注入点。
- Basic认证是Web身份验证中使用最广泛的一种方法。其原理是客户端向服务器需要身份验证的资源发起请求,服务器将返回401状态码和WWW-Authenticate首部字段;客户端发送带有Authorization首部字段的新请求,在此字段中包含base64编码的username:password;通过验证后运行访问相应资源。
- Capability是一种细粒度权限控制的方法,可以允许进程/用户仅获取它们需要的特定权限,而不是完整的root权限。这里涉及到的capabilities权限是cap_setuid+ep;+e(Effective)是在执行的时候拥有的权限,+p(Permitted)是可执行文件或进程在运行的过程中拥有的权限。 Linux中相关的命令由setcap(设置文件capabilities)、getcap(查找文件capabilities)。
涉及到的相关命令:
nmap -sn -PE -n -T4 192.168.52.0/24 | grep -I for
只做靶机存活扫描,且过滤出靶机ip;
namp -sS -sV -A -p- 192.168.52.135
使用SYN扫描方式扫描目标的服务、版本、系统、路由信息;
gobuster dir -u http://192.168.52.135 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .html,.txt,.php -t 100 -k -e
使用gobuster利用字典爆破网站目录;
sqlmap -r req.txt --file-read /etc/passwd
使用sqlmap从注入点获取目标机器文件;
getcap -r / 2>/dev/null
从根目录开始查找有capabilities的权限文件;
python -c 'import os;os.setuid(0);os.system("/bin/sh")'
使用具有setuid权限的python提权。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)