IOT二进制漏洞挖掘小工具

1.前言

这是之前自己挖漏洞的时候自己写着用的一款小工具,主要就是能方便一点,在拿到一个要分析的程序后,能够直接分析下其程序加载的libc,架构,端序等信息,根据自定义的sink找出其程序以及加载的libc中所有的引用查看其再次封装的函数等,需要安装radare2以及r2pipe依赖。

2.代码

Beacon Config XOR KEY1

import argparse``import r2pipe``import subprocess``import json``   ``def get_dynamic_libraries(r2, file_system_path):`    `libraries = []`    `libs = r2.cmdj('ilj')`    `for lib in libs:`        `library = get_path_by_filename(lib, file_system_path)`        `libraries.append(library)``   `    `return libraries``   ``def get_path_by_filename(filename, file_system_path):`    `output = subprocess.check_output(['find', file_system_path, '-name', filename]).decode('utf-8')`    `for line in output.split('\n'):`        `if line:`            `return line``   ``def get_referencing_functions(r2, filename, target_symbols):`    `referencing_functions = []``   `    `r2.cmd('aaa')  # 执行初始分析`    `functions = r2.cmdj('aflj')``   `    `for function in functions:`        `function_name = function['name']`        `if any(symbol in function_name for symbol in target_symbols):`            `refs = r2.cmdj(f"axtj {function_name}")`            `for ref in refs:`                `ref_address = ref['from']`                `ref_functions = r2.cmdj(f"afij {ref_address}")`                `if ref_functions:`                    `ref_function = ref_functions[0]`                    `ref_function_name = ref_function['name']`                    `ref_function_disassembly = r2.cmd(f"pdf @ {ref_function_name}")`                    `referencing_functions.append((ref_function_name, ref_function_disassembly, function_name, filename))``   `    `return referencing_functions``   ``def find_referencing_functions_in_libraries(main_program, libraries, target_symbols):`    `referencing_functions = []``   `    `print("Load Program")`    `print(f"Program Name: {main_program}")`    `r2_main = r2pipe.open(main_program)``   `    `# 获取程序的架构和端序`    `program_architecture = get_architecture(r2_main)`    `program_endian = get_endian(r2_main)``   `    `print(f"Program Architecture: {program_architecture}")`    `print(f"Program Endian: {program_endian}")`    `print("------------------------------------------------------------")``   `    `main_program_referencing_functions = get_referencing_functions(r2_main, main_program, target_symbols)`    `referencing_functions.extend(main_program_referencing_functions)`    `r2_main.quit()`    `print("Load Libraries")``   `    `for library in libraries:`        `print(f"Library Name: {library}")``   `        `r2_lib = r2pipe.open(library)``   `        `# 获取库的架构和端序`        `libc_architecture = get_architecture(r2_lib)`        `libc_endian = get_endian(r2_lib)``   `        `print(f"Library Architecture: {libc_architecture}")`        `print(f"Library Endian: {libc_endian}")`        `print("------------------------------------------------------------")``   `        `library_referencing_functions = get_referencing_functions(r2_lib, library, target_symbols)`        `referencing_functions.extend(library_referencing_functions)``   `        `r2_lib.quit()``   `    `return referencing_functions``   ``def get_architecture(r2fd):`    `info = json.loads(r2fd.cmd('iIj'))`    `return info["arch"]``   ``def get_endian(r2fd):`    `info = json.loads(r2fd.cmd('iIj'))`    `return info["endian"]``   ``if __name__ == "__main__":`    `parser = argparse.ArgumentParser(description='Find referencing functions in a program and libraries.')`    `parser.add_argument('-p', '--program', type=str, help='Path to the main program')`    `parser.add_argument('-f', '--filesystem', type=str, help='Path to the file system')`    `parser.add_argument('-s', '--symbols', type=str, help='Target symbols (comma-separated)', default='system,execve,popen')`    `parser.add_argument('-d', '--disassembly', type=int, help='Print disassembly information (0 or 1)', default=0)``   `    `args = parser.parse_args()``   `    `if not args.program or not args.filesystem:`        `parser.print_help()`        `exit()``   `    `main_program = args.program`    `file_system_path = args.filesystem`    `target_symbols = args.symbols.split(',')`    `print_disassembly = bool(args.disassembly)``   `    `r2 = r2pipe.open(main_program)`    `libraries = get_dynamic_libraries(r2, file_system_path)`    `r2.quit()``   `    `referencing_functions = find_referencing_functions_in_libraries(main_program, libraries, target_symbols)``   `    `unique_functions = set((function_name, symbol, filename) for function_name, _, symbol, filename in referencing_functions)``   `    `print("Referencing Functions in Main Program:")``   `    `for function_name, symbol, filename in unique_functions:`        `if filename == main_program:`            `print(f"File: {filename}")`            `print(f"Symbol: {symbol}")`            `print(f"Function: {function_name}")`            `print("------------------------------------------------------------")`    `print("Referencing Functions in Libraries:")`    `for function_name, symbol, filename in unique_functions:`        `if filename != main_program:`            `print(f"File: {filename}")`            `print(f"Symbol: {symbol}")`            `print(f"Function: {function_name}")`            `print("------------------------------------------------------------")``if print_disassembly:`    `for ref_function_name, ref_function_disassembly, _, _ in referencing_functions:`        `print(f"Referenced by: {ref_function_name}")`        `print(f"Disassembly:\n{ref_function_disassembly}")`        `print("------------------------------------------------------------")

3.效果及用法

Beacon Config XOR KEY1

symbolFinder.py [-h] [-p PROGRAM] [-f FILESYSTEM] [-s SYMBOLS] [-d DISASSEMBLY]

python3 symbolFinder.py -p squashfs-root/usr/sbin/uhttpd -f squashfs-root -s strcpy,system

python3 symbolFinder.py -p squashfs-root/usr/sbin/uhttpd -f squashfs-root -s strcpy,system-d 1 > 1.txt

4.总结

希望对兄弟们有一点帮助,有问题或交流什么的可以后台私信。

本文转自 https://mp.weixin.qq.com/s/qiIVPVzgChiRotR1NQC-kQ,如有侵权,请联系删除。

`黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享