域名劫持原理及实现

article/2025/9/16 12:33:01

目录

1.从输入URL到页面加载发生了什么 2

1.1 DNS解析 2

1.2 TCP连接 2

1.3发送HTTP请求 2

1.4服务器处理请求并返回HTTP报文 2

1.5浏览器解析渲染页面 3

1.6连接结束 4

2.dns劫持 4

3.url重定向 6

3.1.前端实现 6

3.1.1 html页面跳转方式 6

3.1.2 JS页面跳转方式 6

3.2.后端实现 7

3.2.1 http消息 7

3.2.2 http消息源码分析 8

附录 12

1几个重要的结构体 12

2配置参数读入 14



1.从输入URL到页面加载发生了什么

总体来说分为以下几个过程:

1.1 DNS解析

1.2 TCP连接

1.3发送HTTP请求

它主要发生在客户端。发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议80/8080,HTTPS协议443)HTTP请求报文是由三部分组成:请求行,请求报头和请求正文。

1.4服务器处理请求并返回HTTP报文

后端从在固定的端口接收到TCP报文开始,这一部分对应于编程语言中的socket。它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTPRequest对象,供上层使用。这一部分工作一般是由Web服务器去进行,HTTP响应报文也是由三部分组成:状态码,响应报头和响应报文。

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

1** 信息,服务器收到请求,需要请求者继续执行操作

2** 成功,操作被成功接收并处理

3** 重定向,需要进一步的操作以完成请求

4** 客户端错误,请求包含语法错误或无法完成请求

5** 服务器错误,服务器在处理请求的过程中发生了错误

状态码查询:http://www.runoob.com/http/http-status-codes.html



1.5浏览器解析渲染页面

浏览器在收到HTML,CSS,JS文件后,它是如何把页面呈现到屏幕上的?下图对应的就是WebKit(一个开源的浏览器引擎)渲染的过程。


浏览器是一个边解析边渲染的过程。首先浏览器解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。


JS的解析是由浏览器中的JS解析引擎完成的。JS的执行机制就可以看做是一个主线程加上一个任务队列(taskqueue)。同步任务就是放在主线程上执行的任务,异步任务是放在任务队列中的任务。所有的同步任务在主线程上执行,形成一个执行栈;异步任务有了运行结果就会在任务队列中放置一个事件;脚本运行时先依次运行执行栈,然后会从任务队列里提取事件,运行任务队列中的任务,这个过程是不断重复的,所以又叫做事件循环(Eventloop)。但是当文档加载过程中遇到JS文件,HTML文档会挂起渲染过程,不仅要等到文档中JS文件加载完毕还要等待解析执行完毕,才会继续HTML的渲染过程。原因是因为JS有可能修改DOM结构,这就意味着JS执行完成前,后续所有资源的下载是没有必要的。


1.6连接结束

2. dns劫持

当用户输入一个URL时,想要能够访问我们的路由器管理界面首先就需要将改URLDNS解析到路由器的web服务器地址上,这时候,我们需要dns劫持。Dns劫持中主要用到一个开源的软件-dnsmasq

首先我们利用dnsmasq将自己的工作站配置为一个能够解析开发域名的server,解析的ip地址设置为工作站的ip地址。利用dnsmasq建立了一个dnsmapping table,将www.baidu.com的域名解析为路由器管理界面地址192.168.2.1。这时候,通过www.baidu.com访问时会转跳至192.168.2.1




3. url重定向

这时候我们已经可以成功的通过域名www.baidu.com访问到路由器的web服务器。

url重定向的实现可以在前端实现或是后端实现。这时候web服务器需要将指定的html返回给客户端,比如我们的快速向导页面或是首页页面。这就需要重新定向用户输入的url

3.1.前端实现

3.1.1 html页面跳转方式

可以使用htmlmeta标签实现页面的跳转。


metahtml语言head区的一个辅助性标签。meta标签共有两个属性,它们分别是http-equiv属性和name属性,不同的属性又有不同的参数值,这些不同的参数值就实现了不同的网页功能。

http-equiv属性:相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为contentcontent中的内容其实就是各个参数的变量值。

<metahttp-equiv="参数"content="参数变量值">

3.1.2 JS页面跳转方式

1.使用window.location.href= "newurl"


也可以用window.location= "newurl"

2. 使用window.navigate

<script>

window.navigate("http://www.csdn.net");

</script>

3.2.后端实现

后端实现主要是通过响应头中的http响应location字段,令客户端重定向至指定URL

数据交互过程

http://172.17.200.153:8800/bbs/index.php?/topic/167-httpd%E7%AE%80%E4%BB%8B/

3.2.1 http消息

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如ApacheWeb服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

HTTP协议的请求和响应都是一段按一定规则组织起来的文本,其请求的头部包括请求行(请求方式method、请求的路径path、协议版本protocol),请求头标(一系列keyvalue形式组织的文本行),空行(分隔请求头部与数据)和请求数据。

1. 客户端请求

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(requestline)、请求头部(header)、空行和请求数据四个部分组成。



2. 服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。


3.2.2 http消息源码分析

1 客户端请求解析

客服端的请求处理其实就是将请求拆解,分解各个字段,提取出header中的信息。

首先,uhttpd会将收到的请求存放在一个buffer中。在uhttpd中有一个状态机来处理http请求


这三个状态分别用来处理客服端请求中的请求行(requestline)、请求头部(header)、请求数据。


Uhttpd 中默认的需要获取的 http 请求包括以下字段:


1.CLIENT_STATE_INIT

状态-处理请求行,在Init状态中,调用staticbool client_init_cb(struct client *cl, char *buf, int len)函数来method,url, version


获取成功后将状态变为CLIENT_STATE_HEADER

2. CLIENT_STATE_HEADER

状态--处理请求头部,调用staticbool client_header_cb(struct client *cl, char *buf, intlen)函数来解析requestheader

解析的方式就是staticbool client_header_cb(struct client *cl, char *buf, intlen);函数中通过/r/n作为标志将buffer中的数据一行一行读入。然后将每一行数据通过“:”为标志存到结构体中传入staticvoid client_parse_header(struct client *cl, char *data);函数中来获取文件头。

这两个函数中将buffer中的httpheader按照字符串解析的方式取出有用信息,存放到client结构体中。当buffer中全部解析完成之后状态切换到CLIENT_STATE_DATA

3. CLIENT_STATE_DATA

处理请求数据,调用函数voidclient_poll_post_data(struct client *cl)

没看明白……大概是按照content-length取出数据。╮(╯_╰)╭

2 服务器响应消息处理

Uhttpd在完成CLIENT_STATE_HEADER处理的时候会调用uh_handle_request(cl)函数来处理客户端的请求。



响应主要是处理url并返回状态码。响应的处理主要在file.c文件中进行处理。简单的就是讲url当做是相对于www文件夹的文件路径来查找文件。比如p.to/cgi-bin,其中“/cgi-bin”就会进入file.c文件处理。在www文件夹下寻找cgi-bin

file.c文件的函数入口在voiduh_handle_request(struct client *cl)


在这个函数中调用staticbool __handle_file_request(struct client *cl, char *url)来处理请求;

其中又调用了static struct path_info *uh_path_lookup(struct client*cl, const char *url)函数来寻找路径。

其中,在uh_path_lookup()函数中,当url访问的是一个目录,但是url中没有“/”的时候会转跳到302,将url加上“/”


这里面的path_phys[docroot_len]为根目录,K2中就是www文件夹,默认将重定向到根文件夹中。

p.query ? "?" : "",

p.query ? p.query : "");用来提取query信息,也就是url中的查询信息。

我们可以在这里通过location字段对url进行重定向。


附录

1几个重要的结构体

存放客户端数据的结构体client.


其中,uh_addr结构体



可以用来表示一个32位的IPv4地址


得到local_addr,就是我们的lanip


存放http请求和响应的字段

2配置参数读入

Uhttpd的参数位于uhttpd.config文件中。在main.cmain函数中通过while循环读入配置参数;



函数中设定默认初始值。

http://chatgpt.dhexx.cn/article/C8IOxnuy.shtml

相关文章

域名劫持的几种方法

科普文。。我看完以后的一个想法就是一但获得了域名的控制权。。如果真想干坏事。那就转移域名。而不只是简单的改DNS。。居然还敢卖域名。。这个第一次看到。。我是好人。。 一. 介绍 在2012年10月24日。社会化分享网站Diigo域名被盗&#xff0c;导致500万用户无法使用网站。…

域名劫持

作者&#xff1a;sarleon 来自&#xff1a;freebuf.com 01 原理 DNS决定的是我们的域名将解析到哪一个IP地址的记录&#xff0c;是基于UDP协议的一种应用层协议 这个攻击的前提是攻击者掌控了你的网关&#xff08;可以是路由器&#xff0c;交换机&#xff0c;或者运营商&#…

域名劫持原理

实验步骤一 实验中提供了一台邮件服务器&#xff0c;该服务器同时提供DNS服务&#xff0c;测试者通过入侵到该服务器&#xff0c;修改DNS服务中的正向解析与反向解析文件实现劫持。 首先我们打开 http://mail.test.com&#xff0c;看到一个邮件登录入口。 这里我们先使用burp…

域名劫持原理与实践

实验简介: 实验所属系列&#xff1a;web安全 实验对象&#xff1a;本科/专科信息安全专业 相关课程及专业&#xff1a;信息网络安全概论 实验时数&#xff08;学分&#xff09;&#xff1a;1学时 实验类别&#xff1a;实践实验类 预备知识&#xff1a; 了解域名及域名劫持 由于…

什么是域名劫持?遇到域名劫持要怎么处理

互联网的应用在我们生活、工作中的应用日益加深&#xff0c;在众多设备的加入下&#xff0c;网络环境也也变得更加复杂。因此&#xff0c;我们在运营网站的过程中&#xff0c;常常出现网站无法打开、或者打开后跳转至其他页面的情况&#xff0c;这就是我们常说的域名劫持。 网…

网站域名被劫持、网站dns被劫持 域名跳转到别的网站的解决方法

网站域名被劫持&#xff0c;网站dns被劫持&#xff0c;域名跳转到别的网站怎么解决&#xff1f; 网站域名被劫持&#xff0c;网站dns被劫持&#xff0c;域名跳转到别的网站怎么解决&#xff1f; 出现网站域名跳转到其他网站&#xff0c;这一现象很可能是域名被劫持。 【网站域名…

【教程分享】大数据视频教程

总预览 下载地址 地址&#xff1a;https://pan.baidu.com/s/1ighogyDQDbMN7Wpe5-VSYg 提取码&#xff1a;rv7h

wpe简介

wpe简介   WPE&#xff08;Winsock Packet Editor&#xff09; 它的中文名称是&#xff1a; 网络封包编辑器 在大多数的编程工具中winsock已经封装成一个控件&#xff0c;成为网络编程的控件&#xff0c;是非常方便的&#xff0c;利用这个控件&#xff0c;编程工具就可以编写…

U盘WPE安装原版Win7系统教程

转载链接&#xff1a;https://jingyan.baidu.com/article/e8cdb32b00472537052bad0b.html 制作U盘pe 1.连接一个空U盘 2.打开pe制作工具&#xff0c;选择安装方式为“U盘” 3.选择好“待写入U盘”&#xff0c;然后点击“立即安装进U盘”&#xff0c;其它默认即可 PS&#xff1…

WPE详细教程四 滤镜制作(3)

为了大家能深入了解滤镜的制作&#xff0c;这里再给大家举些例子&#xff0c;供大家参考学习 当FILTER在启动状态时 &#xff0c;ON的按钮会呈现红色。当您启动FILTER时&#xff0c;您随时可以关闭这个视窗。FILTER将会保留在原来的状态&#xff0c;直到您再按一次 on / off 钮…

kindeditor=4.1.5上传漏洞复现

0x00 漏洞描述 漏洞存在于kindeditor编辑器里&#xff0c;你能上传.txt和.html文件&#xff0c;支持php/asp/jsp/asp.net,漏洞存在于小于等于kindeditor4.1.5编辑器中 这里html里面可以嵌套暗链接地址以及嵌套xss。Kindeditor上的uploadbutton.html用于文件上传功能页面&#x…

【vulhub】ThinkPHP5-rce 5.0.22/5.1.29 远程代码执行漏洞复现getshell

漏洞复现&#xff08;5-rce&#xff09; poc&#xff1a; /index.php?sindex/\think\app/invokefunction&functionphpinfo&vars[0]100payload11111: 代码执行 格式&#xff1a; index.php?sindex/think\app/invokefunction&functioncall_user_func_array&am…

java 富文本 xss_KindEditor开源富文本编辑框架XSS漏洞

原标题&#xff1a;KindEditor开源富文本编辑框架XSS漏洞 *原创作者&#xff1a;卫士通 安全服务事业部 天龙&#xff0c;叶龙&#xff0c;本文属FreeBuf原创奖励计划&#xff0c;未经许可禁止转载 001 前言 KindEditor 是一套开源的在线HTML编辑器&#xff0c;主要用于让用户在…

CTFshow——信息收集11-20

Web11 解题方法&#xff1a; 发现本题没有可配置环境&#xff0c;题目提示域名其实也可以隐藏信息&#xff0c;比如ctfshow.com就隐藏了一条信息 我们在网络搜索一个域名服务对ctfshow.com进行查询 查看更多&#xff0c;在TXT记录中发现了flag Web12 解题方法&#xff1a;…

kindeditor=4.1.5文件上传漏洞复现

0x00&#xff1a;背景 KindEditor是一套开源的HTML可视化编辑器&#xff0c;主要用于让用户在网站上获得所见即所得编辑效果&#xff0c;兼容IE、Firefox、Chrome、Safari、Opera等主流浏览器。 0x01:漏洞描述 漏洞存在于小于等于kindeditor4.1.5 编辑器里&#xff0c;你能上传…

KindEditor编辑器上传修改拿shell漏洞

法客论坛《team.f4ck.net》 90sec论坛《www.90sec.org》 疯子博客《http://Madman.in》 作者&#xff1a;relywind 影响版本&#xff1a; KindEditor 3.5.2~4.1 漏洞利用&#xff1a; 打开编辑器&#xff0c;将一句话改名为1.jpg 上传图片&#xff0c; 打开文件管理&#xff0c…

kindeditor在服务器上上传图片显示叉叉,什么原因?,kindeditor=4.1.5 文件上传漏洞利用...

kindeditor<4.1.5 文件上传漏洞 - Kindeditor <4.1.5 file upload vulnerability and use 漏洞存影响版本&#xff1a;小于等于4.1.5的kindeditor 编辑器 漏洞影响&#xff1a;上传任意. txt 和. html 文件 漏洞存在动态脚本语言&#xff1a; php/asp/jsp/asp.net 漏洞存…

[应用漏洞]KindEditor<=4.1.5 文件上传漏洞利用

一、KindEditor KindEditor 是一套开源的在线HTML编辑器&#xff0c;主要用于让用户在网站上获得所见即所得编辑效果 二、漏洞介绍 影响版本&#xff1a;KindEditor 3.5.2~4.1 简介&#xff1a;Kindeditor能够上传doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,wps,p…

网站漏洞修补 Kindeditor上传漏洞

2019独角兽企业重金招聘Python工程师标准>>> 很多建站公司都在使用Kindeditor开源的图片上传系统&#xff0c;该上传系统是可视化的&#xff0c;采用的开发语言支持asp、aspx、php、jsp,几乎支持了所有的网站可以使用他们的上传系统&#xff0c;对浏览器的兼容以及手…

Kindeditor 漏洞导致网站被植入木马文件的解决办法

很多建站公司都在使用Kindeditor开源的图片上传系统&#xff0c;该上传系统是可视化的&#xff0c;采用的开发语言支持asp、aspx、php、jsp,几乎支持了所有的网站可以使用他们的上传系统&#xff0c;对浏览器的兼容以及手机端也是比较不错的&#xff0c;用户使用以及编辑上传方…