嵌入式Web


HTTP 协议讲解

Web 通信原理

HTTP 工作流程

HTTP 请求报文格式

HTTP 响应报文格式

HTTP 通信模拟

利用nc监听一个端口来模拟 Web 服务端。

SHELL - 2 lines
1
2
#监听本机的 8888 号端口
nc -lvp 8888

然后在浏览器访问服务端口,向服务端发送请求包。

可以看到nc接收到了 http 请求包。

我们可以在nc中给其返回一个 http 响应包,将响应包内容粘贴进正在监听端口的nc命令行中,然后回车。

响应包:

HTML - 11 lines
1
2
3
4
5
6
7
8
9
10
11
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 927
Connection: close
Cache-control: no-cache

<html>
<body>
<h1>Hello World!</h1>
</body>
</html>

浏览器收到响应包之后进行解析:

手动还是太麻烦我们可以写一个脚本来让程序自动发送响应包。

在目录下创建一个index.html文件存放html内容:

TEXT - 5 lines
1
2
3
4
5
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>

然后再创建一个cgi.sh文件进行响应操作:

SHELL - 11 lines
1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
echo "HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 927
Connection: close
Cache-control: no-cache"

cat index.html
echo "

"

最后我们创建一个run.sh脚本,来启动程序。

SHELL - 5 lines
1
2
3
4
5
#!/bin/bash
while true; do
echo "WebServer start"
nc -lvp 8888 -e ./cgi.sh
done

这样就可以实现自动与客户端进行交互。

这里的nc就是一个简单的 http 服务器,这里的cgi.sh程序就是一个 CGI(用于 Web 服务器与外部程序交互)程序。

Tinyhttpd 源码分析

简介

Tinyhttpd 是 J. David Blackstone 在 1999 年写的一个不到 500 行的超轻量型 Http Server,用来学习非常不错,可以帮助我们真正理解服务器程序的本质。

SOAP 协议

在嵌入式 Web 中通常会用到 SOAP 协议进行通信。

SOAP(Simple Object Access Protocol,简单对象访问协议) 是一种简单的基于 XML 可以使应用程序在分散或分布式的环境中通过 HTTP,SMTP 等协议来交互信息。

  • XML:一种可扩展标记语言,被设计用来传输和存储数据。
  • XML 命名空间:用来避免元素命名冲突。

XML 基本知识

XML - 6 lines
1
2
3
4
5
6
<?xml version="1.0 encoding="UTF-8"?>
<info>
<name>Nick</name>
<age input="num">11</age>
<sex>male</sex>
</info>

XML 命名空间

命名空间的定义格式:

xmlns:前缀标识=用于标示命名空间的地址

XML - 6 lines
1
2
3
4
5
6
<?xml version="1.0 encoding="UTF-8"?>
<h:info xmlns:h="http://test.gov/id=001">
<h:name>Nick</h:name>
<h:age input="num">11</h:age>
<h:sex>male</h:sex>
</h:info>

SOAP 组成

  • SOAP 协议封装
  • SOAP 代码规则
  • SOAPRPC 表示
  • SOAP 绑定

语法规则

SOAP 消息必须用 XML 来编码

SOAP 消息必须使用 SOAP Envelope 命名空间

SOAP 消息必须使用 SOAP EncodingStyle 命名空间

SOAP 消息不能包含 DTD 引用

SOAP 消息不能包含 XML 处理指令

SOAP 消息基本结构

XML - 16 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header>
...
</soap:Header>

<soap:Body>
...
<soap:Fault>
...
</soap:Fault>
</soap:Body>

</soap:Envelope>

SOAP 报文实例

SOAP 是基于 http 的。

常见嵌入式 Web 应用及漏洞分析

由于嵌入式设备的性能相对于桌面计算机来说性能相对比较弱并且访问量也比较少,所以我们就不能使用像 Apache 这种大型的 Web 服务。所以人们为嵌入式设备专门设计了占用资源比较小的 Web 服务。

常见嵌入式 Web 系统

  • Lighttpd
  • Goahead
  • Shttpd
  • Thttpd
  • Boa
  • Mini_httpd
  • Appweb

Lighttpd编译

SHELL - 4 lines
1
2
3
4
meson build        # 创建构建目录并生成构建文件
cd build
ninja # 编译代码
sudo ninja install # 安装

敏感信息泄露

  • 漏洞描述:

敏感信息包括但不限于口令,密钥,证书,会话标识,License,隐私数据,授权凭据,个人数据(如姓名,地址,电话等),在程序文件,配置文件,日志文件,备份文件,固件中都有可能包含敏感信息。

检测方法:

  1. 工具,爬虫等扫描获得敏感信息,敏感文件路径。
  2. 手动挖掘,根据 Web 容器或网页源代码获得敏感信息。

firmwalker 工具可以快速搜集敏感文件路径。

  • 漏洞案例:

任意文件下载/读取

  • 漏洞简介:

任意文件下载漏洞,正常的利用手段是下载服务器文件,如脚本代码,服务器配置或者是系统配置等等,在能提取固件的情况下能够很好的获得文件路径

  • 漏洞危害:

下载服务器任意文件,如脚本代码、服务及系统配置文件等,在这些文件中能获得一些敏感的信息等数据。

  • 漏洞案例:

CVE-2019-6273:任意文件下载

  • exp

未授权访问

  • 漏洞简介:

服务端未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、网站目录等敏感信息泄露

  • 漏洞危害:

未授权访问能引发重要权限可被操作、任意用户登录、网站目录、用户密码等敏感信息泄露

  • 漏洞案例:

XSS

  • 漏洞简介:

  • 漏洞危害:

  • 漏洞案例:

命令执行

  • 漏洞简介:

命令执行漏洞介绍当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数

  • 漏洞危害:

根据不同用户权限,能执行任意命令,造成的后果十分严重,稍加利用就能够获得she11

  • 漏洞案例:

防御措施

0 comments
Anonymous
Error: Not Found.
Markdown is supported

Be the first person to leave a comment!