高质量的安全文章,安全offer面试经验分享
尽在#掌控安全EDU#
作者:掌控安全-veekSQL注入基础SQL注入(英语:SQLinjection),是发生于应用程序与数据库层的安全漏洞。
简而言之,是在输入的字符串之中注入SQL指令,在设计不良的程序当中忽略了字符检查,那么这些注入进去的恶意指令就会被数据库服务器误认为是正常的SQL指令而运行,因此遭到破坏或是入侵。
OWASPTop10虽然常年有更改,但sql注入基本一直位于榜首,其优势在于极低的使用代价以及极高的危害性,地位可见一斑。
SQL注入的危害自然是很大的,通常有以下这些(来自wiki):
资料表中的资料外泄,例如企业及个人机密资料,账户资料,密码等。
数据结构被黑客探知,得以做进一步攻击(例如SELECT*FROMsys.tables)。
数据库服务器被攻击,系统管理员账户被窜改(例如ALTERLOGINsaWITHPASSWORD=’xxxxxx’)。
获取系统较高权限后,有可能得以在网页加入恶意链接、恶意代码以及Phishing等。
经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统(例如xp_cmdshell“netstopiisadmin”可停止服务器的IIS服务)。
黑客经由上传php简单的指令至对方之主机内,PHP之强大系统命令,可以让黑客进行全面控制系统(例如:php一句话木马)。
破坏硬盘资料,瘫痪全系统(例如xp_cmdshell“FORMATC:”)。
获取系统最高权限后,可针对企业内部的任一管理系统做大规模破坏,甚至让其企业倒闭。
企业网站主页被窜改,门面尽失。
找到注入点后,sql注入的基本流程如下:
信息收集:数据库类型数据库版本数据库用户数据库权限
获取数据:获取库信息获取表信息获取列信息获取数据
提权:执行命令读文件
读取中间件配置文件,读取数据库配置文件写文件
写webshell
布尔是英文单词Boolean的音译,懂编程的同学应该知道它是用来表示是或否(True或False)的一个数据类型。布尔型注入是在sql注入过程中,根据页面的返回结果来判断条件真假的注入方式。
当查询结果不为空时,返回True,相反返回False。这在网页上的体现通常是True有内容显示,而False对应着空白页面(或者页面无变化)。我们通过这个方式可以挨个猜测表名、字段名和字段值的字符,通过返回结果判断猜测是否正确,因为过程较为繁琐,通常要结合脚本或工具来进行。
例如sqli-labsLess8中,页面返回的只有正确和错误。我们就可以利用布尔型注入来猜解数据。
判断数据库长度的语句,此时页面无显示,说明长度为8: