Help Desk
经过第一篇文章,我思考了一下,已经存在太多的 walkthrough,不应该再去写一样的文章,而是应该着重写思路。接下来的文章,会着重写在什么情况下,应该做些什么,应该注意哪些信息,应该如何采取下一步操作。这样,才能让举一反三的过程更加顺利,和大家一起成长的速度才能更快。
Oopsie Walkthrough Video!:D
HTB-Oopsie
这是一个 Web Application and Privilege Escalation
的练习。
Nmap
第一步不变, nmap
一下。
这些天又读了很多文章,除了 nmap,还有很多优秀的扫描工具,如 masscan
, unicorn scan
, 值得一看
Nmap 结果:
Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-17 04:51 EDT
Nmap scan report for 10.10.10.28 (10.10.10.28)
Host is up (0.23s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 61:e4:3f:d4:1e:e2:b2:f1:0d:3c:ed:36:28:36:67:c7 (RSA)
| 256 24:1d:a4:17:d4:e3:2a:9c:90:5c:30:58:8f:60:77:8d (ECDSA)
|_ 256 78:03:0e:b4:a1:af:e5:c2:f9:8d:29:05:3e:29:c9:f2 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Welcome
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/
.
Nmap done: 1 IP address (1 host up) scanned in 16.61 seconds
22
和80
开放.
SSH
服务还是挺可靠的,意思就是很难有可发掘的漏洞,要么就去爆破登录密码,但是基本很难成功。
目标肯定要落在 80
端口的网站上面。
当遇到一个网站,该做些什么?
- 查看
/robots.txt
是否存在,如果存在,网站的部分目录结构一目了然。 - 一定要看网页
源码
,在 firefox 中可以按CTRL + U
。寻找任何可可能泄露信息的地方,注释
,以及js代码
。 - 着重浏览一下
js代码
,他会告诉你这个网页想要做什么,这些很可能是线索。 - 如果源码中没有有用的信息,该去点点网页上的按钮了,或者改变一下地址栏,触发一些报错,看网站是否有合规的错误处理,如果没有,那么网站后端的技术栈信息,很可能就泄露了。
- 最后当然还要读一下网页上的文字,很可能发现一些线索,可以让我们能进行到下一步。
扩展阅读
我列举了一些在 Web App Pentest 中需要注意的事情,下面这篇文章讲解更加详细,值得一看。
Web application pentest cheet sheet.
在这个练习中,通过做上述的第四步
,就可以发现,网页声称需要登陆
来获取相关服务。
- 线索:网页说需要登录,但是找不到任何登录入口
- 思路:登录入口隐藏在网站某个目录,没有公开
- 操作:使用诸如
dirbuster
,gobuster
,dirb
,Burp Suite
这些 WebApp分析爆破工具,找到隐藏的网站目录。这里推荐dirbuster
,运行较快,也较精准,可以递归搜索,能生成报告,并且 GUI 支持直接在浏览器打开目标链接
很快就找到了 /uploads
,/cdn-cgi/login
,这些文件夹,相信这个登录页面肯定就在 /cdn-cgi/login
这个目录里。
在 Results
一栏中可以看到精确的路径以及状态码,这个 index.php
,是可以访问的。
直接右键到浏览器打开。
到了这里,又是一个页面,我又重复了上面5个操作,但是什么信息都没找到。结果这个练习和第一个是相关联的,第一个练习中获取的 admin
的密码,在这里依旧可以用。
登录信息是,admin
,MEGACORP_4dm1n!!
。
源码没什么,点上面的按钮,页面上也没什么内容,点上面的按钮,到 Uploads
的时候,被告知权限不够。
我是 Admin
,还有个 super admin
。
- 线索:网站有
super admin
身份,现有的账号登录上去是admin
- 思路:表单登录,需要检查一下登录请求,找到能判断身份的参数
- 操作:Burp Suie,截取请求,先找到判断身份的参数
账户信息是在 Account
一栏里面,点击一下,截取请求。
请求里面有一个参数 id
,并且带上了 cookie
,网页给我们返回了当前用户的 Access ID
和 Name
。
刷新一下 Uploads
页面,请求的时候没有参数 id
,而是带上了标识用户身份的 cookie
信息。
- 线索:服务端判断身份的参数是
id
,服务端根据id
返回对应的user
和role
,存入cookie
;当要访问Uploads
页面的时候,带上这个cookie
,就能判断是否是super admin
- 思路:如果能不断尝不同的
id
值,是不是可以试出super admin
的id
- 操作:Burp Suite Intruder 不断使用顺序
id
值 (1-500)去请求,看返回结果是否会有super admin
小贴士:
Intruder
工作过程中,点击Length
将返回结果长度按降序排列,如果有明显大于其他长度的结果,可能就已经命中目标
成功获取到 super admin
的 Access ID
。
- 线索:获得
super admin
的Access ID
- 思路:使用该
Access ID
访问Uploads
页面 - 操作:截取对于
Uploads
目录的访问请求,将请求中的user
改为86575
成功进入 Uploads
页面。
- 线索:因为是
super admin
,可以上传任意文件(应该不会有super super admin
了) - 思路:获取目标机器控制的方式,第一步是设法得到一个
shell
;网站后端是php
,可以上传一个包含php reverse shell
的文件,直接在浏览器访问,代码就可以成功被执行;当然要注意,要考虑目标机器有AV
的可能,代码中不要出现类似pwn
这样的敏感词,会被系统拦截 - 操作:上传
Kali
自带的php reverse shell
,修改文件名,然后在浏览器访问执行
扩展阅读
从哪里找 php reverse shell
?
/usr/share/webshells/php/php-reverse-shell.php
- PentestMonkey
- Reverse Shell CheetSheet
修改 IP
和 PORT
,具体操作见视频。
上传的时候,同样要截取请求,用 super admin
身份上传才能成功。
- 线索:
reverse shell
文件已经上传,需要找到路径执行 - 思路:记得用
dirbuster
搜索登录入口的时候,有一个/uploads
目录,上传的文件应该都存放在这里 - 操作:本地侦听代码中设定的端口号,然后浏览器访问
10.10.10.28/uploads/image-processing.php
当获得了一个 shell
,进入了目标机器,该做些什么?
- 查看用户信息 -
id
- 查看当前目录里的文件 -
ls -al
- 注意敏感文件和目录 -
.bashrc
.ssh
.config
.cache
- 查看用户当前
shell
-echo $SHELL
如果没有输出,需要生成一个可交互shell
- 查看
bash
是否存在 -which bash
- 查看
python
是否存在 -which python
which python3
- 生成交互
shell
-SHELL=/bin/bash script -q /dev/null
python3 -c 'import pty;pty.spawn("/bin/bash")'
- 查看网站根目录,查找配置文件包含的敏感信息 -
/var/www/html
- 查看临时文件夹 -
/tmp
- 如果有用户的登录密码,列举出用户可以使用
sudo
执行的命令 -sudo -l
扩展阅读
值得一读的文章,列出了很多 linux
的敏感文件和目录。
Basic Linux Privilige Escaaltion
这篇文章将了 script
命令的作用,看完就能理解为什么用它生成交互 shell
Script Command
- 线索:在网站目录下找到了另一个登录信息
- 思路:因为是
mysql_conn
,可以登录数数据库,但是登录了数据库没什么可以干的,破坏数据不能达到控制目标的目的;还可以试一下用ssh
登录 - 操作:用登录信息尝试
ssh
到服务器
成功登录。
上面提到了进入了目标机器之后要做的事情,这里依旧要做。
- 线索:
id
命令之后发现用户在一个特别的组里bugtracker
- 思路:添加用户到某个特定的组,是为了让用户能有执行某些命令的权限,通常这些程序或这命令的名字,会跟组名相同(例如
virtualbox
会将用户添加到virtualbox
组中) - 查找一下系统中跟组名相同的文件
当找到一个敏感文件,该做些什么?
- 查看文件详细信息,设置了
setuid/setgui
权限并且拥有者是root
是最希望看到的结果 -ls -al
- 如果是可执行文件,运行,并尝试多种输入,尽可能触发错误,能收集更多信息
- 线索:程序设置了
setuid/setguid
的特殊权限 - 思路:如果程序可能被串改,运行自定义的脚本,就可以提权得到
root shell
- 操作:先运行一下程序,观察程序行为
扩展阅读
Setuid/Setgui Special Permission
- 线索:触发错误之后看到程序其实是调用系统
cat
命令,到根目录下读取相应文件 - 思路:构造一个自定义的
cat
可执行文件,内容就是生成一个bash shell
,然后想办法让bugtracker
调用自定义的cat
即可 - 操作:自定义一个
cat
可执行文件,将其所在目录添加到$PATH
环境变量,然后再次执行bugtracker
I'm in 😀