2017-2018-2 20179204《网络攻防实践》第十一周学习总结 SQL注入攻击与实践

第1节 研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究

1.1 原理

在计算机内部,输入数据通常被存放在一个临时空间内,这个临时存放的空间就被称为缓冲区,缓冲区的长度事先已经被程序或者操作系统定义好了。向缓冲区内填充数据,如果数据的长度很长,超过了缓冲区本身的容量,那么数据就会溢出存储空间,而这些溢出的数据还会覆盖在合法的数据上,这就是缓冲区和缓冲区溢出的道理。

参见这篇博客缓冲区溢出攻击

1.2 oracle数据库

针对Oracle数据库缓冲区溢出攻击的研究

1.3 mysql数据库

MySQL是一款开放源代码关系型数据库系统。

MySQL包含的mysql_real_connect()函数不充分检查用户提供的参数值,本地或远程攻击者可以利用这个漏洞进行缓冲区溢出攻击,可能用来破坏数据库或执行任意指令。

攻击者可以利用SQL注入攻击,或者可上传恶意脚本到服务器上,通过传递超长的字符串作为mysql_real_connect()函数参数,可触发溢出,精心构建提交数据可能以数据库进程权限在系统上执行任意指令。

第2节 针对不同数据类型,研究SQL注入点的发现与注入技术

根据注入时提交的变量参数类型,SQL注入点有不同的分类,不同的注入点,其注入时需要注意的事项也有所不同。按提交参数类型,SQL注入点主要分为下面3种:

2.1 数字型注入点

形如“http://****?ID=55”,这类注入的参数是“数字”,因此称为“数字型注入点”。

此类注入点提交的SQL语句,其原形大致为:Select * from 表名 where 字段=55

当我们提交注入参数为“http://****?ID=55 And[查询条件]”时,向数据库提交的完整 SQL 语句为:Select * from 表名 where 字段=55 And [查询条件]

2.2 字符型注入点

形如“http://****?Class=日期”这类注入的参数是“字符”,因此称为“字符型”注入点。

此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段=‘日期‘

当我们提交注入参数为“http://****Class=日期 And[查询条件]时,向数据库提交的完整 SQL 语句为”:select * from 表名 where 字段=‘日期‘ and [查询条件]

2.3 搜索型注入点

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址有“keyword=关键字”,有的不显示的链接地址,而是直接通过搜索框表单提交。

此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like ‘%关键字%‘

当我们提交注入参数为“keyword=‘and[查询条件] and ‘%‘=‘,则向数据库提交的完事SQL语句为:

select * from 表名 where 字段 like ‘%‘ and [查询条件] and ‘%‘=‘%‘

第3节 研究缓冲区溢出的防范方法,至少针对两种编程语言进行差异化研究

缓冲区溢出攻击一直以来都是黑客攻击的主要手段,其原因很大程度上取决于C或C++程序中的许多存在缓冲区溢出漏洞的函数。这些漏洞导致缓冲区溢出相对于其他攻击方式容易实现。缓冲区溢出攻击, 轻者可导致计算机系统的混乱,重启或死机,更加严重的会使攻击者有机会得到被攻击主机的超级权限, 从而控制主机,执行一些破坏行为。如:偷取重要资料,查看内部保密信息,篡改重要文件,删除有用的数据等等。但由于攻击者取得了被攻击主机的超级权限,他可以删除这台主机活动日志中的记录,使得他能够长期控制这台主机而且还不会被机主发现。

3.1 C语言

C语言源程序的缓冲区溢出漏洞分析及解决方案

警惕缓冲区溢出(C中那些不安全的库函数)

防止缓冲区溢出——C/C++语言的安全问题

3.2 C++语言

C++程序的缓冲区溢出攻击

第4节 至少使用两种数据库注入攻击工具

4.1 tnscmd10g

允许我们向Oracle数据库中注入命令

4.2 Sqlsus

sqlsus是一个开放源代码的MySQL注入和接管工具,sqlsus使用perl编写,基于命令行界面。sqlsus可以获取数据库结构,注入你自己的SQL语句,从服务器下载文件,爬行web站点可写目录,上传和控制后门,克隆数据库等等。最好用的两点就是注射获取数据速度非常快,另一个最大的特点就是自动搜索可写目录。

  生成配置文件
  编辑配置文件
  修改 our $url_start = "":写入地址
  启动并且测试`sqlsus test.conf`
  获取数据库数据
  查看全部数据库名字
  sqlsus > get database

Kali Linux 数据库评估软件 sqlsus 教程

4.3 Sqlninja

在sql注入方面一直尊sqlmap为神奇,但sqlninja也有自己的特点。Sqlninja是一款perl编写的一个专门针对Microsoft SQL.Server的sql注入工具,它侧重于获得一个shell。

sqlninja的优点如下:

  1)一个专门针对Microsoft SQL.Server的sql注入工具
  2)可找到远程SQL服务器的标志和特征(版本、用户执行的查询、用户特权、xp-cmdshell的可用性、身份验证模式等)
  3)“sa”口令的强力攻击
  4)如果找到口令后,就将特权提升为“sa”
  5)如果原始的xp——cmdshell被禁用后,就创建一个定制的xp_shell
  6)使用纯粹的ASCII GET/POST请求来上载netcat.exe程序(以及其他任何可执行的程序),因此并不需要FTP连接。
  7)为了找到目标网络的防火墙所允许的端口,可以实施针对目标SQL服务器的TCP/UDP端口扫描。
  8)逃避技术,这是为了使注入式代码“模糊”不清,并且混淆/绕过基于签名的IPS和应用层防火墙。
  9)采用“盲目执行”攻击模式,在其他模式失效时,可以用于发布命令并执行诊断。
  10)在sqlninja生成的SQL代码上,执行的是自动化的URL编码,这使得用户可以更精细地控制漏洞利用的字符串。
  11)如果得到权限为sa,可以结合msf进一步对目标主机进行渗透。

sqlninja的参数很少

-m 指定攻击模式,有以下几个

  1)t/test 测试连接是否是注入点
  2)f/fingerprint 指纹识别,判断用户,数据库,xp_cmdshell是否能用等等
  3)b/bruteforce 暴力破解sa密码,可以-w指定字典,也可以不适用字典,这样sqlninja就会自己穷举
  4)e/escalation 提权用,必须用-p指定sa的password,成功就会把当前数据库用户加入到sa组里面
  5)x/resurrectxp 尝试恢复xp_cmdshell
  6)u/upload 使用get和post上传二进制文件,-p可以指定sa的password,-g表示只生成上传文件,但并不上传
  7)s/dirshell 获取目标主机的shell
  8)k/backscan 查看开放的目标端口
  9)r/revshell 反弹会一个shell,和dirshell相反
  10)d/dnstunnel 指定使用dns作为传输通道,可用-p可以指定sa的password,为什么有这个模式,因为可能服务器连接icmp都禁止。同样,想要使用这个模式得先用upload模式上传dnstun.exe
  11)i/icmpshell 当dirshell和revshell都失败的情况下,可以用这个模式把shell藏在icmp里,但是先要上传icmpsh.exe
  12)-f<file> 指定配置文件,sqlninja没有类似sqlmap的“-u”参数,注入网址是写在配置文件里的,默认是sqlninja.conf

4.4 Sqlmap

Sqlmap是一个开源的渗透测试工具,它主要用于自动化地侦测和实施SQL注入攻击以及渗透数据库服务器。Sqlmap配有强大的侦测引擎,适用于高级渗透测试用户,不仅可以获得不同数据库的指纹信息,哈可以从数据库中提取数据,此外还能够处理潜在的文件系统以及通过带外数据连接执行系统命令等。

SQL注入--sqlmap自动化注入工具

原文地址:https://www.cnblogs.com/20179204gege/p/9063725.html

时间: 2024-07-30 20:06:38

2017-2018-2 20179204《网络攻防实践》第十一周学习总结 SQL注入攻击与实践的相关文章

《网络攻防》第五周学习总结

教材内容学习 web应用程序体系结构及其安全威胁 web应用体系结构 浏览器 web服务器 web应用程序 数据库 传输协议http/https web应用安全威胁 针对浏览器和终端用户的web浏览安全威胁 针对传输网络的网络协议安全威胁 系统层安全威胁 web服务器软件安全威胁 web应用程序安全威胁 web数据安全威胁 web应用安全攻防技术概述 web应用的信息收集 对目标web应用服务进行发现与剖析,标识出它的基本轮廓,具体包括服务器域名,IP地址和虚拟IP地址,web服务器端口与其他开

2017-2018-2 20179302《网络攻防》第十一周作业

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 缓冲区溢出是指当计算机向缓冲区内填充数据位数时,超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区 又被称为"堆栈".在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出. 原理 缓冲区溢出(B

《网络攻防》第七周学习总结

Kali教材学习 本周主要学习了<网络攻防---技术与实践>第7章的内容,主要学习了 Windows操作系统安全攻防         Windows操作系统基本框架 如上图所示,Windows操作系统分为运行于处理器特权模式(ring 0)的操作系统内核,以及运行在处理器非特权模式(ring 3)的用户空间代码.采用宏内核(monolithic)模式进行架构.内核基本模块分为:Windows执行体 .Windows内核体 .设备驱动程序 .硬件抽象层 .Windows窗口与图形界面内核实现代码

《网络攻防》第六周学习总结

教材学习 第五章--TCP/IP网络协议攻击 TCP/IP网络协议栈攻击概述 网络安全属性与攻击模式 网络安全属性:机密性,完整性,可用性,真实性,不可抵赖性 网络攻击基本模式: 截获 篡改 中断 伪造 TCP/IP网络协议栈安全缺陷与攻击技术 网络接口层,互联层,传输层,应用层(P141表格5-1) 原始报文伪造技术及工具 Netwox:强大且易用的开源工具包,可以创建任意的TCP/UDP/IP数据报文 Netwag:GUI界面,发送伪造的欺骗数据包. 网络层协议攻击 IP源地址欺骗 IP源地

《SQL注入攻击与实践》

1.研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 缓冲区溢出是指当计算机向缓冲区内填充数据位数时,超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患.操作系统所使用的缓冲区 又被称为"堆栈".在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出. 1.1.原理:

《网络攻防》第十周学习总结

缓冲区溢出漏洞实践 由于实验楼提供的是64位操作系统,而本次实验为了方便观察汇编语句,采用32位操作系统,所以先按照要求进行一些必要的准备 先按顺序输入下面的三个命令安装32位操作系统 安装好之后就切换到32位操作系统中 Ubuntu和其他一些Linux系统中,使用地址空间随机化来随机堆(heap)和栈(stack)的初始地址,这使得猜测准确的内存地址变得十分困难,而猜测内存地址是缓冲区溢出攻击的关键.因此我们使用以下命令关闭这一功能: linux系统中,/bin/sh实际是指向/bin/bas

2017-2018-2 20179209《网络攻防》第十一周作业

研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 MYSQL与DB2对比 账号管理方式 MySQL账号管理的方式与Oracle类似,由MySQL自己管理,账号存储在MySQL数据库的user表中,其账号的组成是有ip地址+用户名组成,而DB2没有自己的用户体系,其认证完全依赖于操作系统的账号. 权限管理方式 MySQL的权限管理方式与DB2权限管理方式上相同的地方就是都可以对单独的对象进行授权,都可以做到细粒度的授权.不同之处就是MySQL在账号安全上更胜一筹,其账号组成是由用户名加ip地

201671010103 2016-2017-2 《Java程序设计》第十一周学习心得

这一章主要讲了集合,从Java的集合框架入手,Java的集合类只容纳对象,并且容纳的对象都是object的实例.其中,常用的集合类有Vector(矢量),Stack(堆栈),Hashtable(哈希表)等.在JDK1.2版本后,又有了Collection.List.Set.Map.这周的集合相对上周的泛型程序设计要简单,效果还不错.Set.Map的这两个类还不是很理解,不过我会下去自己复习赶紧补上.

2017-2018-2 《网络攻防》第五周作业

一Kali视频学习 1.bbqsql 2.HexorBase 3.Jsql 4.Oscanner 5.SIDGusser 6.Sqlsus 7.burpsuits 8.owasp zap 9.webscarab 10.fuzzing工具集 二<网络攻防>学习总结 Web安全攻防技术与实现 web应用程序体系结构及其安全威胁 web应用体系结构 浏览器 web服务器 web应用程序 数据库 传输协议http/https web应用安全威胁 针对浏览器和终端用户的web浏览安全威胁 针对传输网络的