记一个4G路由器取得SSH权限
文章目录
路由器有ssh但是无密码.
路由器基本信息
捡的.
通电后是openwrt,有web,admin可以登录.
ssh是打开的,admin账户无法SSH登录,要root.
尝试破解
web页面是大改过的openwrt luci.
有备份配置和还原配置,但是导出的配置文件是bin文件,是加密后的文件.
也就是想通过还原配置文件修改root密码不行.
没有web启动项设置,被阉割了,想通过写入rc.local执行替换root密码行不通.
上ttl ,ttl也是需要登录,权限和ssh一样.
进openwrt修复模式发现也不行.ttl行不通.
u-boot中断,发现是breed,懒得我拆spi flash上编程器.
直接breed导出编程器固件.
开始破解
binwalk分析
binwalk bak4g.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
11712 0x2DC0 Copyright string: "Copyright (C) 2018 HackPascal <hackpascal@gmail.com>"
12180 0x2F94 LZMA compressed data, properties: 0x6D, dictionary size: 33554432 bytes, uncompressed size: 272474 bytes
158464 0x26B00 U-Boot version string, "U-Boot 1.1.3 (Jan 26 2021 - 15:56:10)"
159255 0x26E17 HTML document header
159836 0x2705C HTML document footer
159935 0x270BF HTML document header
161150 0x2757E HTML document footer
161251 0x275E3 HTML document header
161499 0x276DB HTML document footer
161611 0x2774B HTML document header
161899 0x2786B HTML document footer
327680 0x50000 uImage header, header size: 64 bytes, header CRC: 0xD7BACA12, created: 2021-12-30 09:09:45, image size: 1197481 bytes, Data Address: 0x80000000, Entry Point: 0x80000000, data CRC: 0xF6DFBB88, OS: Linux, CPU: MIPS, image type: OS Kernel Image, compression type: lzma, image name: "R32"
327744 0x50040 LZMA compressed data, properties: 0x6D, dictionary size: 8388608 bytes, uncompressed size: 3768748 bytes
1525225 0x1745E9 Squashfs filesystem, little endian, version 4.0, compression:xz, size: 5257478 bytes, 2177 inodes, blocksize: 262144 bytes, created: 2021-12-30 08:58:18
6815744 0x680000 JFFS2 filesystem, little endian
提取squashfs
dd if=bak4g.bin of=rootfs.squashfs bs=1 skip=1525225
1525225就是分区开始位置.
解包squashfs
unsquashfs -d rootfs rootfs.squashfs
跑字典破解密码
/etc/shadow 有一个root一个admin,将这两个放入target_hashes.txt
用github上常见密码字键跑
hashcat -m 500 -a 0 target_hashes.txt rockyou.txt
很遗憾只跑出admin密码是admin
root密码跑不出来.使用john命令破解也只能破解出admin的密码
替换root密码
生成一个123456的密码
openssl passwd -1 "123456"
替换root密码.
打包squashfs
mksquashfs rootfs/ new_rootfs.squashfs -comp xz -noappend -all-root
尝试直接刷,无论breed和路由器后台都不能刷入.
打包编程器固件
dd if=new_rootfs.squashfs of=bak4g.bin bs=1 seek=1525225 conv=notrunc
breed刷入
然后breed刷入编程器固件,要保留breed.
遗憾发现root密码还是错误的.
通过解包JFFS2分区,发现会覆盖shadow文件.导致密码被覆盖.
JFFS2解包后没有好用的打包工具.所以不能在JFFS2分区操作.
通过发现,rc.local文件没有被覆盖.
修改rc.local文件
准备一个shadow2 ,这个文件不会被覆盖.
rm -rf /etc/shadow
cp /etc/shadow2 /etc/shadow
exit 0
然后重新打包编程器固件,重新breed刷入固件.
成功进入ssh.
二次破解
上面已经取得ssh权限,但是编程器固件不太适合打包分发给其他设备.
要想办法在路由器备份还原上操作.
查看备份还原代码
是luci控制的,但是简单加密了,无法记事本查看,但是可以看到一些字符,用hex查看.
文件路径
rootfs\usr\lib\lua\luci\controller\system.lua
sysupgrade -b是备份配置的命令. 然后执行了 crypt -e 加密.
此步实际上我在编程器固件前面就做了.
发现crypt命令不是linux/openwrt常见命令,我将解包后的crypt拷贝到我hc5661 (极路由1S,CPU相同)上发现缺少so文件,无法运行.
所以在取得ssh后再次开始.
手动加解密验证
先用sysupgrade -b备份配置文件,然后用crypt -e加密 crypt -d解密,发现正常的.
制作通用破解包
tar.gz打包文件
/etc/shadow
/etc/shadow2
/etc/rc.local
然后加密成bin文件导出.
验证
我特意用breed还原成最初编程器固件,也就全是官方固件.
然后进后台web,刷入我导出的配置包.
重启后可以正常用root和123456访问ssh.并且重启后,也可以用.
因为只修改了shadow文件.这种破解文件可以分发到其他设备.而不改变路由器原本其他配置.