IOT入门学习

参考资料

参考文章1

IOTsec-Zone有自己的B站账号,有些视频入门听挺好的,反正我是听的很适合我。同时他们也有自己的网站,专门就是IOT相关内容。

mips汇编再学习

mips栈溢出

在MIPS汇编指令中,sw(Store Word)指令的格式是 sw source, destination,也就是说它是 “先源寄存器,再目标位置”。而大多数其他指令,如add、addu、sub、li 等,都是 “先目标寄存器,再源操作数”。

在MIPS汇编语言中,以下是关于 jal、jalr、b 和 bal 指令的详细解释:

  1. jal (Jump and Link) 作用:jal 实现的是直接的子程序调用。 指令格式:jal target_address 功能: 跳转到指定的 target_address。 在跳转前,将下一条指令的地址(也就是 PC + 4)保存到寄存器 $ra(返回地址寄存器,寄存器号是 $31)。 在子程序执行完后,通常使用 jr $ra 指令返回调用点。 常见用途:用来调用一个函数,并保存返回地址,以便在函数执行完毕后能够跳回。

  2. jalr (Jump and Link Register) 作用:jalr 实现的是间接的子程序调用。 指令格式:jalr $rs, $rd(其中 $rd 是目标寄存器,可以省略,默认为 $ra) 功能: 从寄存器 $rs 中读取跳转目标地址,并跳转到该地址。 同时将下一条指令的地址(PC + 4)保存到 $rd(默认为 $ra,即返回地址寄存器)。 常见用途:用于函数指针的调用或间接调用,目标地址不是立即值,而是存储在寄存器中的地址。

  3. b (Branch) 作用:b 实现的是相对 PC 的无条件短距离分支。 指令格式:b offset 功能: 将程序跳转到当前 PC 加上一个偏移量 offset 位置的指令。 该偏移量是相对于当前指令地址的,并且通常适用于短距离的跳转(在同一个函数或流程中)。 常见用途:用于实现简单的无条件跳转,偏移量较小。

  4. bal (Branch and Link) 作用:bal 实现的是相对 PC 的函数调用,相当于带返回地址保存的分支跳转。 指令格式:bal offset 功能: 将程序跳转到 PC 加上 offset 位置的指令。 同时将下一条指令的地址(PC + 4)保存到寄存器 $ra。 常见用途:用于调用相对短距离的函数,并且保存返回地址。

总结: jal:直接跳转到函数地址,并保存返回地址。 jalr:从寄存器中读取函数地址进行跳转,并保存返回地址(用于间接调用)。 b:无条件短程跳转。 bal:相对 PC 的函数调用,保存返回地址。

mipsrop

  • 这里主要是通过已经有的溢出找gadget,有以下技巧,没用成功注意有没有中文的(
misrop.system() 可以找到控制$a0,$ra寄存器的gadget,这样的话就可以直接任意命令执行
mipsrop.find('move $t9')   这种可以看是否能通过一个寄存器进而控制目的寄存器
mipsrop.find('.* $s4')

一些笔记

  • 硬件层
  • 固件层
  • 协议层

对于自己来说,可能会关注于固件层。硬件层太底层了,还要补好多知识,应该不会接触。协议层好多协议去发现它本身的漏洞挺难的,因为很多协议还是很稳定的,除非是某些厂商自己定义的协议,这种漏洞可能比较多。而固件层基本就可以二进制分析,自己的知识储备也用得上。

挖洞时,注意要漏洞价值最大化,比如从一个漏洞还可以怎么更进一步得到更高级的漏洞。挖洞注意常见的容易有漏洞的函数,比如strcpy,system这种

mipsaudit

ubuntu上安装burpsuite

ubuntu中jdk环境配置 第一步:从官网上下载burpsuite,下载后执行sh burpsuite*.sh https://portswigger.net/burp/releases 第二步:安装jdk环境

wget https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz

# 创建java目录
cd /usr/local/
sudo mkdir java
# 解压压缩包
sudo tar -zxvf jdk-21.0.2 -C /usr/local/java/
# 检查版本
cd /usr/local/java/jdk-21.0.2/bin
./java -version


vim ~/.bashrc
#添加如下内容
export JAVA_HOME=/usr/local/java/jdk-21.0.2
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
# 使其生效
source ~/.bashrc

#看起来虽然你已经正确设置了环境变量,但系统仍然尝试从默认的 /usr/bin/java 路径寻找 Java,而不是你设置的路径 /usr/local/java/jdk-21.0.2/bin。
#这通常是因为系统优先查找的 Java 可执行文件路径优先级较高。
which java
sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk-21.0.2/bin/java 1

# zp9080@ubuntu:/usr/local/java/jdk-21.0.2/bin$ file /usr/bin/java
# /usr/bin/java: symbolic link to /etc/alternatives/java
# zp9080@ubuntu:/usr/local/java/jdk-21.0.2/bin$ file /etc/alternatives/java
# /etc/alternatives/java: symbolic link to /usr/local/java/jdk-21.0.2/bin/java

可以发现其实和windows装burpsuite很类似,也是要设置环境变量那些什么的

之后发现SwitchyOmega在ubuntu这个版本的firefox用不了,用FoxyProxy替代 FoxyProxy使用方法