Web安全Day1 - SQL注入、漏洞类型
Web安全Day1 - SQL注入、漏洞类型
1. SQL注入
1.1 漏洞简介
结构化查询语言(Structured Query Language,缩写:SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言。1986年10月,美国国家标准学会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。
1.2 漏洞原理
可以通过网站存在的查询语句进行构造,为此开发者对其伤透了脑筋,漏洞不光是查询,可能还存在与API、隐藏链接、http头数据、写入数据等。需要对数据包的结构和传递函数比较了解,建议学习的时候把数据库的日志打开,就可以查看到传递到数据库的语句是什么样子的了。 需要记住的information_schema数据库的SCHEMATA、TABLES、COLUMNS。 SCHEMATA表中存放所有数据库的名,字段名为SCHEMA_NAME。 关键函数database() 当前数据库名、version() 当前mysql版本、user()当前mysql用户.
1.3 漏洞危害
危害较高的漏洞,可以获取敏感信息,修改信息,脱裤,上传 webshell,执行命令。
2. SQL漏洞类型
2.1 区分数字和字符串
数字上是不加单引号的如’2’+‘2’=‘22’而非’4’ 而2+2=4
2.2 内联SQL注入
sql注入主要是靠内联SQL来进行注入的 and or 与或非的判断来进行内联SQL注入,等于在原先的语句上扩展出来的语句
2.3 报错注入
报错注入顾名思义主要是利用数据库报错来进行判断是否存在注入点。如果不符合数据库语法规则就会产生错误。常用的特殊字符:’ \ ; %00 ) ( # "
2.4 盲注
2.4.1 常用函数
1)函数length() 计算数据库长度
id=1' and lengh(database())=8;
2)函数left(a)=b sql的left()函数如果式子成立返回1如果不成立返回0一般用来猜测库的名字 3)函数substr() substr()和substring()函数实现的功能是一样的,均为截取字符串。
select left(database(),1)='r';
substring(string, start, length) substr(string, start, length) length(可选)要返回的字符数。如果省略,则 mid() 函数返回剩余文本
select substr(database(),1,1)='a';
可进行单字符验证可进行全字符验证 4)函数mid() mid(string,start,length) string(必需)规定要返回其中一部分的字符串。 start(必需)规定开始位置(起始值是 1)。 length(可选)要返回的字符数。如果省略,则 mid() 函数返回剩余文本可进行单字符验证可进行全字符验证
select mid(database(),1)='testt';
5)函数ascii() 返回字符串str的最左字符的数值。返回0,如果str为空字符串。返回NULL,如果str为NULL。ASCII()返回数值是从0到255; 只会返回最左边字符的可以配合substr()
6)ord函数 ORD() 函数返回字符串第一个字符的 ASCII 值。
7)函数updatexml()
updatexml(XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc 第二个参数:XPath_string(Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。 第三个参数:new_value,String格式,替换查找到的符合条件的数据 在当前数据库中演示
8)函数exp() exp是以e为底的指数函数。可能会存在溢出
mysql> select exp(1);
±------------------+
| exp(1) |
±------------------+
| 2.718281828459045 |
±------------------+
1 row in set (0.00 sec)
由于数字太大是会产生溢出。这个函数会在参数大于709时溢出,报错
mysql> select exp(709);
±----------------------+
| exp(709) |
±----------------------+
| 8.218407461554972e307 |
±----------------------+
1 row in set (0.00 sec)
mysql> select exp(710);
ERROR 1690 (22003): DOUBLE value is out of range in ‘exp(710)’
2.4.2 布尔类型注入
如果成功注入会正确显示内容,如果没成功会显示非正常内容。
2.4.3 无报错回显注入
没有任何报错显示,但是能根据页面是否正确显示来进行判断。如搜索注入没有内容,正常搜索应该是有内容的。
2.4.4 时间注入
如果exp1为true返回值为sleep,如果为假返回值为1。ps:前提是网络延迟较低的情况。。
if(length(database())>1,sleep(5),1)
2.5 堆叠查询注入
通过分号隔开执行多条语句。
2.6 Union注入
前面不存在才会执行后面的语句,一般配合的是布尔类型的盲注
2.7 二次注入
在存入数据库的时候做了过滤,但是取出来的时候没有做过滤,而产生的数据库注入。
2.8宽字节注入
数据库大多数为GBK才可以%df
2.9 cookie注入
cookie中的参数也有可能存在注入
2.10 编码注入
Base64
2.11 XFF注入攻击
X-Forwarded-for伪造客户端IP
2.12 DNS_log
dnslog
2.13 组合注入
通过上述所有的注入方式进行组合攻击,如union+盲注
Web安全Day1 - SQL注入、漏洞类型的更多相关文章
- [红日安全]Web安全Day1 - SQL注入实战攻防
本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...
- Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说。。。
Nikto是一款Web安全扫描工具,可以扫描指定主机的web类型,主机名,特定目录,cookie,特定CGI漏洞,XSS漏洞,SQL注入漏洞等,非常强大滴说... root@xi4ojin:~# cd ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案(转)
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案
对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...
- 利用SQL注入漏洞登录后台的实现方法
利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...
- 预处理prepareStatement是怎么防止sql注入漏洞的?
序,目前在对数据库进行操作之前,使用prepareStatement预编译,然后再根据通配符进行数据填值,是比较常见的做法,好处是提高执行效率,而且保证排除SQL注入漏洞. 一.prepareStat ...
- WEB 安全之 SQL注入 < 三 > 提权
SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...
- WEB 安全之 SQL注入 < 二 > 暴库
SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...
- Web安全 之 SQL注入
随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...
- web安全之SQL注入
一.sql注入是一种将sql代码添加到输入参数中 传递到sql服务器解析并执行得一种攻击手法 例: $sql = "SELECT * FROM goods WHERE Id = 1" ...
随机推荐
- 强扩展、强一致、高可用…GaussDB成为游戏行业的心头爱
摘要:看GaussDB for Redis强扩展.高可用.强一致.高安全,如何玩转各大游戏场景 本文分享自华为云社区<GaussDB为什么成为游戏行业的心头爱?>,作者: GaussDB ...
- 跟羽夏学 Ghidra ——数据
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 【java8新特性】01:函数式编程及Lambda入门
我们首先需要先了解什么是函数式编程.函数式编程是一种结构化编程范式.类似于数学函数.它关注的重点在于数据操作.或者说它所提倡的思想是做什么,而不是如何去做. 自Jdk8中开始.它也支持函数式编程.函数 ...
- 大家都在用MySQL count(*)统计总数,到底有什么问题?
在日常开发工作中,我经常会遇到需要统计总数的场景,比如:统计订单总数.统计用户总数等.一般我们会使用MySQL 的count函数进行统计,但是随着数据量逐渐增大,统计耗时也越来越长,最后竟然出现慢查询 ...
- .env[mode]文件中如何添加注释
前言 Vue-Cli 允许我们在项目根目录创建.env.[mode]文件来设置一些打包编译的启动参数,通过执行脚本的时候加mode参数,指定不同环境需要加载的配置文件 形如: .env.prod NO ...
- PostgreSQL 删除数据库
PostgreSQL 删除数据库可以用以下三种方式: 1.使用 DROP DATABASE SQL 语句来删除. 2.使用 dropdb 命令来删除. 3.使用 pgAdmin 工具. 注意:删除数据 ...
- 10. Fluentd部署:高可用配置
对于高访问量的web站点或者服务,可以采用Fluentd的高可用配置模式. 消息分发语义 Fluentd设计初衷主要是用作事件日志分发系统的.这类系统支持几种不同的分发模式: 至多一次.消息被立即发送 ...
- 使用nginx部署Django静态文件配置
首先,我们配置静态文件,要在setting.py里面加入如下几行代码: # settings.py # the settings above # STATIC SETTINGS STATIC_URL ...
- .NET 反向代理 YARP 代理 GRPC
前面的 YARP 文档中,介绍了怎么去代理 http,和如何根据域名转发,而在现在微服务的应用是越来越来多了,服务间的调用依靠 http 越来越不现实了,因为 http 多次握手的耗时越发的影响应用的 ...
- DP 优化小技巧
收录一些比较冷门的 DP 优化方法. 1. 树上依赖性背包 树上依赖性背包形如在树上选出若干个物品做背包问题,满足这些物品连通.由于 01 背包,多重背包和完全背包均可以在 \(\mathcal{O} ...