0x01 前言

渗透过程中总是会遇到千奇百怪的问题,比如前段时间内网横向时用MS17010打台win7,EternalBlue已经提示win了,可是DoublePulsar就是死活一直报错,最后我查阅大量资料,终于解决了这个问题,于是就有了这篇文章。

0x02 踩坑

内网横向,扫到几个MS17010能打

操起家伙对其发起猛烈的进攻,一路披荆斩棘(回车),畅通无阻,EternalBlue成功

然后后面的剧情就是DoublePulsar一路火花带闪电,啪一下,shell就弹回来了,然而意外发生了

报了个错 :ERROR unrecognized OS string

0x03 填坑过程

一开始我以为是x86x64的问题,试了几次发现还是不行,上网搜了一下,看到一篇文章有详细解释了这个错误,标题叫:《修補DoublePulsar支持攻擊Windows Embedded系統》(自行搜索一下)

看完后感觉顿悟了,Windows Embedded Standard 7601 Service Pack 1是win7嵌入式系统,工具无法准确判断出win7嵌入式系统,需要反编译修改源码,但是作者没放出修改版的exe,绝知此事要躬行!

把DoublePulsar拖入ida,位置在:工具目录\windows\payloads\Doublepulsar-1.3.1.exe,最好先做个备份以免修改出bug还原不了

拖进来后界面如上,然后敲一下空格键,找到原作者说的0x0040376C位置

然后右键,选择Graph view,得到图形结构

从图形中可以看出,如果目标计算机正在运行Windows 7,它将走左边的路径,然后继续检测其结构是x86还是x64。如果目标不是Windows 7,它将采取右边路径并执行其他OS检查。由于没有检查Windows Embedded,程序最终输出错误消息[-] ERROR unrecognized OS string

因此只需要将指令jz short loc_403641修改为jnz short loc_403641来强制程序走左边的路径

Edit > Patch program > Change byte 将第一个74(jz操作码)修改成75(jnz操作码)



最后创建一个dif文件就可以保存关闭ida了,File > Produce file > Create DIF file…

直接保存的exe是不能使用的,还需要用脚本修补修改后的exe,原文作者的脚本链接已经404了,找了很久,这里就直接贴出来了:

#!/usr/bin/env python
# Small IDA .dif patcher
import re
from sys import argv,exit def patch(file, dif, revert=False):
code = open(file,'rb').read()
dif = open(dif,'r').read()
m = re.findall('([0-9a-fA-F]+): ([0-9a-fA-F]+) ([0-9a-fA-F]+)', dif)
for offset,orig,new in m:
o, orig, new = int(offset,16), orig.decode('hex'), new.decode('hex')
if revert:
if code[o]==new:
code = code[:o]+orig+code[o+1:]
else:
raise Exception("patched byte at %s is not %02X" % (offset, ord(new)))
else:
if code[o]==orig:
code = code[:o]+new+code[o+1:]
else:
raise Exception("original byte at %s is not %02X" % (offset, ord(orig)))
open(file,'wb').write(code) def main():
if len(argv)<3:
print "Usage: %s <binary> <IDA.dif file> [revert]" % (argv[0])
print "Applies given IDA .dif file to patch binary; use revert to revert patch."
exit(0) file, dif, revert = argv[1], argv[2], False
if len(argv)>3:
revert = True
print "Reverting patch %r on file %r" % (dif, file)
else:
print "Patching file %r with %r" % (file, dif) try:
patch(file, dif, revert)
print "Done"
except Exception, e:
print "Error: %s" % str(e)
exit(1) if __name__ == "__main__":
main()

然后命令执行修补一下exe

最后我们把生成的exe拖到工具目录下,重新执行DoublePulsar,完美解决



公众号回复: DoublePulsar 获取修改后的exe

解决win7嵌入式系统无法DoublePulsar问题的更多相关文章

  1. Tomcat 在win7/win8 系统下tomcat-users.xml.new(拒绝访问)解决方法

    tomcat启动报错No UserDatabase component found under key UserDatabase 也可以这样处理 Tomcat 在win7/win8 系统下tomcat ...

  2. 三星笔记本R428安装xp win7双系统,切换系统重启才能进入系统解决办法。

    三星笔记本 XP win7 双系统切换重启解决方法 三星笔记本有个奇怪的现象,就是装有XP和win7双系统    xp切换到win7.进系统是会重启一次,并且bios回复光驱为第一启动项,win7切换 ...

  3. MyEclipse第一个Servlet程序 --解决Win7系统下MyEclipse与Tomcat连接问题

    前言 本文旨在帮助学习java web开发的人员,熟悉环境,在Win7系统下运行自己的第一个Servlet程序,因为有时候配置不当或系统原因可能会运行不成功,这给初学者带来了一定烦恼,我也是为此烦恼过 ...

  4. 如何解决win7系统无法运行cmd命令提示符

    如何解决win7系统无法运行cmd命令提示符   CMD命令可以帮助我们很快的执行所需要的程序命令,可以查询系统中很多的信息和解决系统很多的故障,对我们来说非常方便,但是最近有用户反馈自己win7电脑 ...

  5. win7/8系统中php5.3和5.4、5.5不能加载php_curl.dll解决办法

    win7/8系统中php5.3和5.4.5.5不能加载php_curl.dll解决办法   作者:用户 来源:互联网 时间:2016-06-23 18:54:33 php变量注释系统模块 摘要: 本文 ...

  6. 解决Win7 软件图标不显示--Win7图标异常,快捷方式不显示解决方法

    电脑症状:WIN7的系统,桌面上的图标显示的不正常,快捷方式显示的是未知程序.看不到程序默认图标,快捷方式图标不显示. 解决方法:删除程序图标缓存即可.   将下面的内容复制到记事本保存为“Repai ...

  7. Ubuntu+Win7双系统grub的修复问题

    最近,在grub引导的Ubuntu+Win7双系统上作业,用的是Ubuntu14.04.2.进行系统更新,更新到一般卡住了,恰好此时在进行grub相关文件的更新,我把机器重启后进入了grub resc ...

  8. 嵌入式系统coredump设计

    阴沟翻船,马失前蹄,说明凡事皆有可能.自然,程序设计的再好,也会有crash的时候.开发期还还说,正式交付的系统crash自然更是难以承受的.无论何时,死一次就够了,得有方法查个水落石出. 几年前哥去 ...

  9. 嵌入式系统Linux内核开发工程师必须掌握的三十道题(转)

    嵌入式系统Linux内核开发工程师必须掌握的三十道题 如果你能正确回答以下问题并理解相关知识点原理,那么你就可以算得上是基本合格的Linux内核开发工程师,试试看! 1) Linux中主要有哪几种内核 ...

  10. Linux嵌入式系统与硬件平台的关系

    一. Linux嵌入式系统 操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口.它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合 ...

随机推荐

  1. The XOR Largest Pair(字典树)

    ​ 题目描述 在给定的 N 个整数 A1,A2,-,AN 中选出两个进行异或运算,得到的结果最大是多少? 输入格式 第一行一个整数 N. 第二行 N 个整数 Ai. 输出格式 一个整数表示答案. 样例 ...

  2. 还在用双层for循环吗?太慢了

    前情提要 我们在开发中经常碰到这样的场景,查出两个 list 集合数据,需要根据他们相同的某个属性为连接点,进行聚合.但是平时我们使用的时候关注过性能吗?下面让我们一起来看看它的表现如何. 来个例子 ...

  3. CF620E New Year Tree(树形+dfs序+线段树+状态压缩)

    题目链接 题目大意 \(~~\)给出一棵 nn 个节点的树,根节点为 11.每个节点上有一种颜色 c\(_{i}\) 和m 次操作.操作有两种: \(~~~~\) 1. 1\(~\)u\(~\)c:将 ...

  4. java学习之爬虫

    0x00前言 对比与Python的爬虫机制和java的爬虫机制来详解一下java的爬虫,对于一般性的需求无论java还是python都可以胜任. 如需要模拟登陆.对抗防采集选择python更方便些,如 ...

  5. 幂次方表达:p1010

    1 题目ID: P1010 [NOIP1998 普及组] 幂次方 2 题目描述: 任何一个正整数都可以用 22 的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20. 同时约定方 ...

  6. 【深入浅出 Yarn 架构与实现】2-4 Yarn 基础库 - 状态机库

    当一个服务拥有太多处理逻辑时,会导致代码结构异常的混乱,很难分辨一段逻辑是在哪个阶段发挥作用的. 这时就可以引入状态机模型,帮助代码结构变得清晰. 一.状态机库概述 一)简介 状态机由一组状态组成: ...

  7. C++ 一个简洁的CHECK宏

    #define CHECK2(condition, message) \ (!(condition)) ? (std::cerr << "Assertion failed: (& ...

  8. 一文详解GaussDB(DWS) 的并发管控和内存管控

    摘要:DWS的负载管理分为两层,第一层为cn的全局并发控制,第二层为资源池级别的并发控制. 本文分享自华为云社区<GaussDB(DWS) 并发管控&内存管控>,作者: fight ...

  9. 数电第三周周结_by_yc

    主要内容:Modelsim和Quartus的使用坑点 Modelsim: 新建Project:   在每新建一个verilog文件时,均需要添加一project的独立路径,否则不同文件之间会相互影响! ...

  10. 【大数据-课程】高途-天翼云侯圣文-Day2:离线数仓搭建分解

    一.内容介绍 昨日福利:大数据反杀熟 今日:数据看板 离线分析及DW数据仓库 明日:实时计算框架及全流程 一.数仓定义及演进史 1.概念 生活中解答 2.数据仓库的理解 对比商品仓库 3.数仓分层内容 ...