DHCP原理和页面解析流程

目录

dhcp工作流程图

request response状态码

UTF-8

UTF-8编码规则:

字节长度

下面来一道URL code的绕过

第一步、开始逃逸双引号的限制 

第二步、试着凑出,当src找不到,就会执行onerror里面的字符串

总结



dhcp工作流程图

        

  • 1 发现阶段:DHCP客户端寻找DHCP 服务器的阶段。客户端以广播方式发送 DISCOVER 报文。
  • 2 提供阶段:DHCP服务器提供 IP 地址的阶段。DHCP 服务器接收到客户端的DISCOVER 报文后,根据 IP 地址分配的优先次序选出一个IP地址,与其他参数一起通过OFFER报文发送给客户端。
  • 3 选择阶段:DHCP客户端选择IP地址的阶段。如果有多台DHCP 服务器向该客户端发来OFFER报文 ,客户端只接受第一个收到的OFFER 报文,然后以广播方式发送 REQUEST 报文,该报文中包含DHCP 服务器在OFFER 报文中分配的 IP 地址。同时该报文中包含Option 54(服务器标识选项),即它选择的DHCP服务器的IP地址信息。
  • 4 确认阶段:DHCP服务器确认IP 地址的阶段。DHCP 服务器收到DHCP 客户端发来的 REQUEST 报文后,只有DHCP 客户端选择的服务器会进行如下操作:如果确认地址分配给该客户端,则返回 ACK 报文;否则将返回NAK 报文,表明地址不能分配给该客户端。客户端收到服务器返回的ACK 确认报文后,会以广播的方式发送ARP 报文(目的地址是被分配到的地址)进行地址探测,如果在规定的时间内没有收到回应,客户端才使用此地址。
     

request response状态码

200  成功

403  forbidden (权限不够)

401 unanthorized 

500 服务器错误

30x  重定向 重新指定方向  (登录 )

UTF-8

这里直接说,他其实就是可变长的unicode,进而达到不浪费。

UTF-8编码规则:

1、对于单字节的其实就是unicode编码

2、对于N字节的(N>1),第一个字节的前N位都是1,(在第一个字节中)第N+1位和后面都为0

后面字节前两位一律设为10。

注意:

字 word
字节 byte
位 bit,来自英文bit,音译为“比特”,表示二进制位。
字长是指字的长度

1字=2字节(1 word = 2 byte)
1字节=8位(1 byte = 8bit)
 
一个字的字长为16
一个字节的字长是8

字节长度

 所以单字节(0~127)

       双字节  (128~2047)

       三字节     (2048~65535)

下面看一下例子,以'中'为例

注意:python3才支持中文转换ascii码

 转为2进制

咱们先拿出来'0b100 111000 101101',开始填充,因为‘中’是三个字节那么格式为:

1110xxxx  10xxxxxx  10xxxxxx,从最后一位开始,依次从后向前填充未知的x,如果不够进行补零。然后中的UTF-8编码是   11100100  10111000  10101101

 

 显而易见,就是这样

下面来一道URL code的绕过

前端(php)页面代码

<?php
header('X-XSS-Protection:0');
$xss = isset($_GET['xss'])? $_GET['xss'] : '';
$xss = str_replace(array("(",")","&","\\","<",">","'"),'',$xss);
echo "<img src=\"{$xss}\">";
?>

第一步、开始逃逸双引号的限制 

第二步、试着凑出<img src=http://www.baidu.com οnerrοr="alert(1)">,当src找不到,就会执行onerror里面的字符串

 由于括号被过滤,我们可以使用反引号进行平替

 sucess!

如果反引号被过滤,那么我们只能进行urlcode编码绕过

 咱们先试一下

 好像不行,因为你摁下回车浏览器将%28%29解析成了()导致在前端页面过滤掉啦

 我们再用%2528 %2529在尝试一下 (%25是由urlcode进行编码的%)

 结果不尽人意

 JS规范:不可以编码符号() , : 等

但是我们可以借助咱们的location和javascript

 原因:location函数可以将等号右边的都变为一个变量,在JS中变量可以随意编码

注意看一下

 1,2,3都不能被弹窗,因为协议不能被urlcode编码,但是可以被html实体编码,所以4可以弹窗

总结

说一下我的理解,总的来说就是因为过滤了html实体编码(&),又因为url code 编码不能编码协议,unicode不能编码符号,又因为页面的解析流程为 html --> url -->js,所以我们使用url将括号进行编码,由于浏览器地址会进行解析urlcode,所以我们需要在进行一下url code编码,但此时,由于不是变量,不会进行第二遍url code解码,然后我们通过location函数可以将后面视为变量,但此时alert(1)还是为只读的,我们需要再使用javascript伪协议将他变为字符串。

HTML例子(不会弹窗)

当存在编码标签时,他不会在重新进入标签开始的状态。只会认为他是一个文本,两个不能弹窗

<script>标签是JS标签,只能放函数和文本吧  (不能弹)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值