美文网首页
2019-07-12

2019-07-12

作者: 亦zZ | 来源:发表于2019-07-12 17:04 被阅读0次

    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§&amp;password=§password§&amp;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漏洞有

    -个深入的理解。

    相关文章

      网友评论

          本文标题:2019-07-12

          本文链接:https://www.haomeiwen.com/subject/zahekctx.html