庚子年十月十六——十月廿二
安全组——电信2002姜毅
2020.11.30——2020.12.6
文章目录
本周任务
1.Web基础完结
2.学习SQL语句
3.学习SQL注入
一.Web基础
(接上一周报)
5.Web服务器
什么是Web服务器
常用的Web服务器
Apache 可以运行在Windows,Linux,Mac
Nginx Linux、Unix
IIS Internet Information Services, Windows
Apache
一个著名的开源组织
Apache HTTP Server
上文的Web服务器
6.对上一周http内容的一些补充
先上图
在浏览器按下F12打开调出开发人员工具
在Network选项中,可以看到http的请求和响应。
嗯,就这个,挺神奇的。
(完结撒花)
二.SQL语句学习
1.问题
什么是数据库?
是一个仓库,可以按照数据结构来组织,存储和管理数据。 是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
什么是数据库管理系统?
一种操作和管理数据库的大型软件,用户可以通过它访问到数据库里的数据。
什么是SQL?
结构化查询语言(Structured Query Language)简称SQL
(发音:/ˈes kjuː ˈel/ “S-Q-L”)(的确,我最开始一直skrskr地读) 是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
什么是MySQL?
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品,是最流行的关系型数据库管理系统之一。
MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言,由于其体积小、速度快、开放源码等特点,一般中小型网站的开发都选择MySQL作为网站数据库。
PHPstudy帮我备好了环境?
YES,真香哈 在PHPstudy软件管理中,下载phpMyAdmin4.8.5
打开谷歌浏览器,输入http://localhost/phpMyAdmin4.8.5进入
2.SQL基本语句
理应大写
西卡西,小写好像也没啥问题
记得加分号!!!!!
show databases; -- 查看所有数据库
create database 数据库名 ; -- 创建数据库
create database 数据库名 charset=utf8; --创建指定字符集的数据库(mysql中utf8没有-)
create database if not exists mlgb; --如果不存在mlgb就创建mlgb
show create database 数据库名 ; --展示创建的数据库
alter database character set utf8; --修改数据库
drop database 数据库名 ; --删库跑路
use database 数据库名; #使用数据库
select database(); #查看当前使用的数据库
4.SQL基本数据查询
查询出来的表是虚拟表
select 列名 from 表名; #查啥表啥列
#select * 表示所有列
select 列名1 as 'XXX', 列名1 as 'YYY' from 表名; #给查询的表起别名
select distinct 列名 from 表名; #去重
排序查询
select 列名 from 表名 order by 排序列 排序规则 [列2] [规则];
asc升序
desc降序
条件查询
select 列名 from 表名 where 条件;
等值判断,就用 =
逻辑判断 and or not
不等于 <> !=
范围 between x and y
枚举 in (x,y,z)
空的判断 is null
is not null
直接查=null是不行滴
模糊查询 like 符号
% 表示任意多个任意字符
_ 表示一个任意字符
分支结构查询 select 列
case
when 条件 then 'A'
when 条件 then 'B'
when 条件 then 'C'
when 条件 then 'D'
else 'E'
end as 成绩
时间查询
select 时间函数([参数列表])
比如
select sysdate(); 当前系统时间
剩下一些函数可以自行百度
字符串查询
select 字符串函数([参数列表])
select concat(firstname,lastname) as 'name' from people ;
查询几列并连接在一起
insert(str,pos,len,newstr)
将str中pos位置开始len长度的内容替换为newstr,字符串下标从1开始
upper() 转大写
lower() 转小写
substring(str,num,len)
将str字符串指定num位置开始截取len个内容
聚合函数
select count() from XX; 一列的总行数,会忽略NULL值
select max() from XX ; 最大值
select min() from XX ; 最小值
select sum() from XX ; 求和
select avg() from XX ; 平均值
分组查询
select XX from XX where XX group by 分组依据(列);
group by + having 分组之后过滤
限定查询
select XX from XX limit 起始行,总条数
执行顺序
(1)from
(2) where
(3)group by
(4) 聚合函数
(5)having
(6) select
(7)distinct
(8) order by
(9) limit
5.SQL复杂点的数据查询
子查询
在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select语句称之为子查询语句,外部那个select语句则称为主查询。
嗯,记得加括号。
子查询结果可以是单行单列,可以是多行单列,也可以是一张表。
结果是一张表时,可以放到FROM里,但要给一个临时的表名。
select * from students
where age > (select avg(age) from students);
关键字 all any 所有 部分
合并查询
select XX from XX union select XX from XX ; (去掉重复记录)
select XX from XX union all select XX from XX ;(不去重复记录)
两表列数必须相同
内链接查询
select XX from XX inner join XX on XX.YY = XX.YY ;
如果不指定连接条件,则会造成笛卡尔积的结果
左右外连接
左外链接以左表为主表,依次向右匹配,如果匹配不到,返回NULL
右外连接以右表为主表,依次向左匹配,如果匹配不到,返回NULL
select XX from XX left join XX on XX.YY = XX.YY ;
select XX from XX right join XX on XX.YY = XX.YY ;
6.DML操作
新增(INSERT)
insert into 表名(列1,列2 ...) values(值1,值2...);
列与值一一对应
修改(UPDATE)
update 表名 set 列1=值1,列2=值2...... where 条件;
如果不加where条件的话整个表都会修改。
以下为删库跑路的主要操作
删除(DELETE)
delete from 表名 where 条件
如果不加where条件的话整个表都会被删除。
清空整张表的数据
truncate table 表名
7.数据表操作
如果表名和关键字冲突,可以在前后加 `符号来避免 。
数据类型
int
double
decimal
date
datetime
char
varchar…
创建表
create table 表名(
列名 数据类型 [约束],
列名 数据类型 [约束],
列名 数据类型 [约束] #最后一列末尾不加逗号
) [charset = utf8] #可以指定字符编码集
修改表
alter table 表名 add 列名 类型
alter table 表名 drop 列名
drop table 表名
alter table 表名 modify 列名 类型
alter table 表名 change 旧列名 新列名 类型
alter table 表名 rename 新表名
(未完待续)
三.SQL注入学习
年轻人就是不讲wood
1.问题
什么是SQL注入?
SQL注入其实就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。
如果我们在数据项中加入了某些SQL语句关键字(比如说SELECT、DROP等等),这些关键字就很可能在数据库写入或读取数据时得到执行。
大家也许都听过外国熊孩子通过攻击学校数据库修改自己成绩的事情,这一般用的就是SQL注入方法。
2.sqlilabs环境配置
原版是PHP5的,PHP7不支持,有个外国老哥帮我们改成支持PHP版本的了,网址如下
https://github.com/Rinkish/Sqli_Edited_Version
安装:把文件夹放在PHPstudy的WWW里面,
找到WWW\sqlilabs\sql-connections里的db-creds.inc,
右键编辑,
找到这两行信息并修改
$dbuser =‘你的数据库账户’;
$dbpass =‘你的密码’;
打开http://localhost/sqlilabs/
点击第二行的Setup/reset Database for labs
出现这样的页面
然后查看数据库,发现多出来了两个数据库,一个叫challenges,一个叫security。
欧耶!成了!
这是第一关
3.判断是否存在注入
那么,接下来,咱们正式开始哈。
首先我先告诉大家结论啊,怎么判断有没有注入呢,你呢,在这加个引号,直接敲回车,诶,没问题,对吧。
其实我要告诉大家一点啊,这里是我的环境问题,为什么呢?我刚才敲的是一个中文字符。
那么现在,怎么办呢?我们把它换成一个英文的符号,啊,一个英文的符号。
咱们再来看哈,再来看,现在是不是直接就报错了,对不对?
所以说大家注意啊,只要是看到报错,你可以理解为,这个注入我们已经确定了,为什么?
因为我们输的这个单引号,最终在执行SQL的时候,已经产生了注入。
OK?为什么。SQL执行报错了,对不对?所以说白了,我们传入这个分号,已经被当成参数到了数据库了!
而分号的缺失,是最终导致我们数据库报错的根本原因!
引自 ————https://www.bilibili.com/video/BV1ma4y1t71M
嗯,还有1=1,1=2什么的,(未完待续)
最后的话
好好锻炼
以及,告诉自己,我现在所了解的每一个东西,背后都有很多人在花费很多时间研究
以及
分享一篇可能比我年龄都大的文章
http://www.0x08.org/docs/hacker-howto.html#believe1