路由器漏洞挖掘使用的脚本

计算偏移多少的python脚本:

# a = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘
# B = ‘abcdefghijklmnopqrstuvwxyz‘
# c = ‘0123456789‘
from string import ascii_lowercase as ls
from string import ascii_uppercase as UP
import time
import sys
import os
import binascii

a = ‘‘.join(ls)
b = ‘‘.join(UP)
c = ‘‘.join(str(j) for j in range(10))

def generate(count,output):
    codeStr = ‘‘
    print(‘[*] Create pattern string  contains %d characters‘ % count)
    timeStart = time.time()
    for i in range(0,count):
        codeStr += b[i/(26*10)]+a[i%(26*10)/10]+c[i%(26*10)%10]
    print(‘ok!‘)
    if output:

        print(‘[+] Output to %s‘ % output)
        with open(output,‘w‘) as f:
            f.write(codeStr)
        print(‘Done!‘)
    else:
        return codeStr
    print("[+] take time : %.4f s" % (time.time()-timeStart) )

def usage():
    print(‘Please use as follow:\n‘)
    print(‘         python xx.py number filename\n‘)
    print(‘              number   : the total number of  characters to generate‘)
    print(‘              filename : output to save‘)
def getOffSet(str1,fname):
    if not os.path.exists(fname):
        print(‘ File not exits.........‘)
        return
    print(‘Searching.............‘)
    try:
        with open(fname,‘r‘) as f:
            position = f.read().index(str1)
            print(‘[+]  the offset of %s is %d‘ %(str1,position))
    except:
        print(‘\n       Find nothing... please check %s‘ % str1)

def getArgv():
    s = ‘‘
    s1=‘‘
    if (len(sys.argv)!=3):
        usage()
    else:
        number = sys.argv[1]
        filename = sys.argv[2]

        if number.startswith(‘0x‘):
            s = number.strip(‘0x‘)
            for i in range(0,8,2):
                s1 += binascii.a2b_hex(s[i:i+2])
                # s1 += chr(int(s[i:i+2],base=‘16‘))
            # print(s1)
            getOffSet(s1,filename)
        else:
            try:
                inumber = int(number)

                generate(inumber,filename)
            except:
                usage()

if __name__==‘__main__‘:
    getArgv()

python偏移计算

#/bin/bash
#pentest_cgi.sh
# sudo ./pentest_cgi.sh  ‘uid=1234‘  `python  -c  "print ‘uid=1234&password=‘+‘A‘*0x600"`

test=$(python -c "print ‘uid=1234&password=‘+‘A‘*0x600")
LEN=$(echo -n "$test" | wc -c)
PORT="1234"
echo "Runing..."
cp $(which qemu-mipsel-static) ./qemu
sudo chroot . ./qemu -E CONTENT_LENGTH=$LEN -E CONTENT_TYPE="application/x-www-form-urlencoded" -E REQUEST_METHOD="POST" -E HTTP_COOKIE=$test -E REQUEST_URL="/hedwig.cgi" -E REMOTE_ADDR="192.168.1.1" -g $PORT /htdocs/web/hedwig.cgi 2>/dev/null
echo ‘ended‘
rm -f ./qemu

IDA动态调试脚本

IDA 脚本:

from idaapi import *

class scanvulufinder(idaapi.plugin_t):
    flags = 0
    comment = "MIPS vulu Funcs Finder"
    help = ""
    wanted_name = "MIPS vulu Funcs Finder"
    wanted_hotkey = ""
    def __init__(self):
        self.init()
        self.run(None)
    def init(self):
        self.menu_context = idaapi.add_menu_item("Search/", "MIPS vulu Funcs Finder", "", 0, self.run, (None,))
        return idaapi.PLUGIN_KEEP

    def term(self):
        idaapi.del_menu_item(self.menu_context)
        return None

    def run(self, arg):
        global scanvulu
        scanvulu = scanvulu()

class scanvulu:
    def getFuncAddr(self,fname):
        return LocByName(fname)
    def judgeAduit(self,addr):
        """
        not safe function handler
        """
        MakeComm(addr,"### AUDIT HERE ###")
        SetColor(addr,CIC_ITEM,0x0000ff) #set background red

    def find(self,funcname):
        """
        not safe function finder
        """
        count =0
        fAddr = self.getFuncAddr(funcname)
        func = get_func(fAddr)
        if not func is None:
            fname = Name(func.startEA)
            items = FuncItems(func.startEA)
            for i in items:
                for xref in XrefsTo(i,0):
                    if xref.type == fl_CN or xref.type ==fl_CF:
                        count+=1
                        Message("|    %s[%d]   calls 0x%08x  from => %08x     |\n" % (fname,count,xref.frm,i))
                        self.judgeAduit(xref.frm)
        else:
            Warning("NO function named ‘%s‘ found at location %x" % (funcname,fAddr))

def PLUGIN_ENTRY():
        return scanvulufinder()

查找危险函数

上述脚本使用:scanvulu.find(xxx)

各种shellcode生成器 (python3.x)

pass

shellcode生成器

路由器攻击脚本框架(POC):

pass

攻击脚本框架

漏洞利用开发的过程:

  1. 劫持PC
  2. 确定偏移
  3. 确定攻击途径
    1. 命令执行(rop链构造)
    2. 执行shellcode
  4. 构造漏洞攻击数据(py脚本)

  编写ropgadget攻击链时,先要找可以控制的寄存器--->构造Rop执行链,找符合的代码片段---->写完整填充数据

使用qemu动态调试时注意事项:

  1. 查看调试点所在函数的运行环境变量,(通过在函数调用前和调用中查找getenv可知道所使用的环境变量,放到qemu -E 选项中)

  2.编写劫持程序运行库命令:

    mips-linux-gcc -Wall -fPIC -shared apmib.c -o apmib-ld.so

    放到根目录

    sudo chroot . ./qemu-mips -E LD_PRELOAD=‘/apmib-ld.so‘ -g 1234 ./bin/boa

  3,nvram 修复方法:

1,git clone https://github.com/zcutlip/nvram-faker.git

2,打开nvram-faker.c

3,添加
int fork(void)
{
return 0;
}

char *get_mac_from_ip(const char*ip)
{
char mac[]="00:50:56:C0:00:08";
cahr *rmac=strdup(mac);
return rmac;
}

4,修改nvram-faker.h 头文件,添加函数声明:
char *get_mac_from_ip(const char*ip);
int fork(void);

5,在nvram-faker目录下有两个buildxx.sh,分别编译小端大端,选择直接运行 sh xx.sh

6,在nvram-faker目录下生成libnvram-faker.so 动态库,将这个动态库和nvram.ini
一起复制到固件根系统。

7,把mipsel-linux-gcc 的交叉编译环境中lib下的libgcc_s.so.1 复制到固件根系统lib文件夹中。
这个文件一般在你的buildroot目录下的/output/target/lib/libgcc_s.so.1
或者使用 sudo find / -name libgcc_s.so.1  查找

8,使用:速度哦chroot . ./qemu-mipsel-static -E LD_PRELOAD="/libnvram-faker.so" -g 1234 ./usr/sbin/xxx(httpd等)

常用命令:

  在库文件中查找某个函数偏移:

    nm -D libc.so.0 |grep -w system

  hexdump使用:

    hexdump -C xxx  输出规范的十六进制和ascii   -s    表示从固定偏移位置输出

      

  readelf -S 应用程序 | more  查看linux应用程序的入口地址,各段偏移,代码长度

    

  dd if=./xx of=test bs=1 skip=288 count=45664(从偏移288b 的位置提取大小为456664b 的内容,注意:bs=1表示一个1bytes,skip和count用十进制)

    

    

  mipsrop.stackfinders() 查找堆栈数据保存到寄存器的指令,

  mipsrop.find(‘lw $ra, .*‘)   查找特定指令

  web请求中的0x00表示会截断后面的数据。只发送前面数据,另外 0x00也会影响以0x00截断的字符串复制函数,比如strcpy

原文地址:https://www.cnblogs.com/CoBrAMG/p/9202722.html

时间: 2024-08-03 13:45:07

路由器漏洞挖掘使用的脚本的相关文章

D-Link系列路由器漏洞挖掘入门

D-Link系列路由器漏洞挖掘入门 前言 前几天去上海参加了geekpwn,看着大神们一个个破解成功各种硬件,我只能在下面喊 6666,特别羡慕那些大神们.所以回来就决定好好研究一下路由器,争取跟上大神们的步伐.看网上公开的D-Link系列的漏洞也不少,那就从D-Link路由器漏洞开始学习. 准备工作 既然要挖路由器漏洞,首先要搞到路由器的固件. D-Link路由器固件下载地址: ftp://ftp2.dlink.com/PRODUCTS/ 下载完固件发现是个压缩包,解压之后里面还是有一个bin

路由器漏洞挖掘之 DIR-815 栈溢出漏洞分析

这次笔者来复现一个比较经典的栈溢出漏洞:D-link dir-815 栈溢出.其实这个路由器的栈溢出漏洞的利用方式和之前 DVRF 靶机平台的栈溢出例子大同小异,只是需要注意下一些小的地方. 前言 这个栈溢出的原因是由于 cookie 的值过长导致的栈溢出.服务端取得客户端请求的 HTTP 头中 Cookie 字段中 uid 的值,格式化到栈上导致溢出. 漏洞分析 大体流程 首先还是先将 cgibin 加载到 IDA 中,定位到 sobj_get_string 函数. 在 sobj_get_st

路由器漏洞挖掘环境搭建

详细的路由器漏洞分析环境搭建教程 http://chuansong.me/n/864762852648 嵌入式Linux固件模拟与安全分析系统Firmadyne交流 http://chuansong.me/n/1009525252762 优秀博文: 路由器固件安全分析技术(一) https://www.vulbox.com/knowledge/detail/?id=35      一起学习从零基础从搭建环境开始入门路由器固件安全分析的技术 路由器固件安全分析技术(二) https://www.v

路由器漏洞挖掘方法

MIPS32架构堆栈: 和x86 架构一样,都是由高地址向低地址增长,无EBP. 进入函数调用时,把栈指针(sp)向下移动n比特,这个大小为n比特的存储空间为此函数的stack Frame. 此后栈指针不移动,只有在函数返回时,加上这个偏移量恢复现场. 由于不能随便移动栈指针,所以寄存器压栈和出栈使用偏移 A调用B,会在A 的栈顶预留一部分空间保存b的调用参数,称为参数空间. 参数传递,前4个参数通过a0-a4传递,超出的会放入参数空间. 返回地址:把返回地址直接存入$ra寄存器. 函数执行的命

路由器漏洞挖掘之 DIR-850/645 命令执行漏洞复现

前言 这次来分析两个比较经典的路由器命令执行漏洞,DIR-850 和 DIR-645 的 RCE,漏洞成因都是由于参数拼接不当造成的. 漏洞分析 根据前一篇文章中的任意文件读取漏洞,在读取到 DEVICE.ACCOUNT 配置文件中的敏感信息之后,我们就可以进一步利用,达到命令执行的目的,进而 getshell. php 源代码 代码如下: 这里的 server 变量可控,导致在拼接时,我们可以闭合前面的命令参数,执行任意命令. 通过前一步的任意文件读取得到 admin 的密码之后,登录上去抓包

AndroidNative层文件解析漏洞挖掘指南

| 导语 本文以手Q的一次文件解析类漏洞挖掘为例,叙述了Android Native层文件解析类型漏洞挖掘的过程 手Q这个应用从功能来说十分的庞大,如果使用类似MFFA的框架去挖掘文件解析类漏洞,效率低,而且文件入口在哪儿.如何利用脚本进行自动化都是非常大的问题.本文在一次手Q的文件解析类漏洞挖掘的过程中,提出了一种可能的解决问题的方案,妄称指南不吝赐教. 目录: 1.问题分析 2.流程图 3.so筛选 4.测试程序编写 5.test case生成 6.测试得出crash 7.未来的工作 0x0

【安全牛学习笔记】漏洞挖掘

漏洞本质   数据与指令的混淆   对用户输入信息过滤不严,误将指令当做数据 漏洞挖掘原则 所有变量 所有头 cookie中的变量 逐个变量删除筛选 身份认证 弱口令/基于字典的爆破 密码嗅探 sessionID xss 嗅探sessionID长期不变 通过算法预测sessionID phpmyadmin远程命令执行低版本的php存在此漏洞 利用代码 POSThttp://1.1.1.1/phpMyAdmin/?-d+allow_url_include%3d1+-d +auto_prepend_

漏洞挖掘经验分享

我平时挖洞的经验,我总结了一下,大概有以下几点: 1.收集信息,尽可能的越多越好(主域名.IP段.搜索引擎.GitHub等). 2.收集好信息后,对收集的信息进行一些扩展,增加信息收集的量(可以用SubDomain工具批量收集厂商域名信息,域名对应IP,数据多了之后,就可以拿来分析域名的真实地址.以及潜在的IP段). 3.对IP段.子域名等进行大量破解,这里我们要经常收集一些SRC开发常用的端口.以及一些域名的命名习惯(GitHub上面有很多现成的端口,平时收集信息的时候,可以多注意一下). 4

小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞

手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘原则[会比自动扫描器发现的漏洞要多,要全面] 1.每一个变量都进行尝试 2.所有头[如:cookie中的变量] 3.逐个变量删除 #####################################################################################