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…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取