自学渗透测试第九天(linux shell脚本编写)

张开发
2026/4/5 20:45:01 15 分钟阅读

分享文章

自学渗透测试第九天(linux shell脚本编写)
第4章 Shell脚本与Burp基础第9–10天4.1 Linux Shell脚本编写第9天核心目标掌握Shell脚本基础理解Shell脚本的基本语法包括变量、参数传递、条件判断、循环控制、函数定义能够编写结构清晰的脚本。实现渗透测试自动化将前序课程中需要手动重复执行的命令组合如批量扫描、日志分析、信息提取通过脚本自动化显著提升工作效率。培养编程思维能够将复杂的渗透测试任务分解为可执行的脚本步骤为后续学习Python等更强大的语言打下基础。模块一Shell脚本基础语法1.1 脚本创建与执行解释器声明脚本首行必须为#!/bin/bash指定使用Bash Shell执行。脚本创建与权限# 1. 创建脚本文件 vim scanner.sh # 2. 编辑内容首行 #!/bin/bash #/bin/bash # 3. 添加执行权限 chmod x scanner.sh执行脚本./scanner.sh # 在脚本所在目录执行 bash scanner.sh # 显式指定解释器执行 /path/to/scanner.sh # 使用绝对路径执行1.2 变量与参数变量定义与使用nameKali_User # 定义变量等号两边不能有空格 echo Hello, $name # 使用变量$符号引用 echo OS: ${name}OS # 花括号用于明确变量边界位置参数$0脚本名$1第一个参数$2第二个参数$#参数个数$所有参数列表。# 调用 ./script.sh 192.168.1.1 80 echo 目标IP: $1 echo 目标端口: $2 echo 共 $# 个参数。命令替换将命令输出赋值给变量。current_time$(date) # 推荐方式 current_timedate # 传统方式1.3 条件判断与控制流if-elif-else 语句if [ $UID -eq 0 ]; then #then标志着循环体的开始。 echo You are root. elif [ $USER kali ]; then echo You are kali user. else echo You are a normal user. fi #最后的fi的作用是结束整个if循环若没有fi则会出现syntax error: unexpected end of file测试条件文件测试-f文件存在-d目录存在-r可读-w可写-x可执行。字符串比较相等!不等-z字符串长度为0。数值比较-eq等于-ne不等于-gt大于-lt小于-le 小于或等于。for 循环for ip in 192.168.1.{1..10}; do ping -c 1 $ip | grep bytes from echo $ip is up #-c count指的是限定发送报文的数量前面的命令执行成功以后后面的命令才会执行。 donewhile 循环count1 while [ $count -le 5 ]; do #do标志循环体的开始与done形成对应的关系done标志循环体结束 echo Count: $count ((count)) done循环语句的书写总结#所有循环体的条件部分都使用中括号来进行框住每种循环都有自己对循环体的标注。1.4 函数定义与调用function scan_port {# 或 scan_port() { echo 扫描主机: $1 的端口: $2 nc -zv $1 $2 21 | grep succeeded } # 调用函数 scan_port 192.168.1.1 22 scan_port $1 $2 # 使用参数模块二Shell脚本在渗透测试中的实战应用2.1 批量信息收集与扫描批量Ping扫描#!/bin/bash network192.168.1 echo 开始扫描网络 $network.0/24... for host in {1..254}; do ip$network.$host ping -c 1 -W 1 $ip /dev/null 21 #-w设置等待时间单位为秒。21:标准错误也丢弃。 if [ $? -eq 0 ]; then echo $ip 存活 fi done批量端口扫描与服务识别#!/bin/bash # 用法 ./batch_scan.sh iplist.txt for ip in $(cat $1); do echo 扫描 $ip nmap -sS -T4 -p 22,80,443,3306,8080 $ip done2.2 日志分析与监控自动化实时监控认证日志并告警#!/bin/bash # 监控SSH暴力破解发现后记录IP LOG_FILE/var/log/auth.log ALERT_FILEssh_attackers.txt echo 开始监控SSH登录失败尝试... tail -F $LOG_FILE | while read line; do #-F:实时跟踪并在文件被移动/删除后自动重新打开文件继续跟踪。 if echo $line | grep -q Failed password; then attacker_ip$(echo $line | grep -oE [0-9]\.[0-9]\.[0-9]\.[0-9]) echo [$(date)] 攻击来自: $attacker_ip | tee -a $ALERT_FILE #tee -a :同时把标准输出同时写到文件和屏幕其中-a表示的是新写入文件的内容是追加的形式而非覆盖 fi done2.3 漏洞利用与后渗透辅助自动检查并利用常见SUID提权#!/bin/bash # 检查可能的SUID提权二进制 VULN_BINARIES/usr/bin/find /usr/bin/nmap /usr/bin/vim for bin in $VULN_BINARIES; do if [ -u $bin ]; then # -u 检查文件是否设置了SUID位 echo [!] 发现潜在SUID提权二进制: $bin ls -la $bin fi done自动化Web目录爆破#!/bin/bash # 用法 ./dir_brute.sh http://target.com wordlist/usr/share/wordlists/dirb/common.txt target$1 echo 开始对 $target 进行目录爆破... for word in $(cat $wordlist); do response$(curl -o /dev/null -s -w %{http_code} $target/$word) if [ $response -eq 200 ] || [ $response -eq 301 ] || [ $response -eq 302 ]; then echo 发现: $target/$word (状态码: $response) fi done模块三当日达标实战任务3.1 基础脚本编写编写系统信息收集脚本创建一个脚本sysinfo.sh使其运行时能输出当前用户名、主机名、系统内核版本、内存使用情况、磁盘空间使用情况。编写端口检查脚本创建一个脚本check_ports.sh接受一个IP地址作为参数检查该主机的22(SSH), 80(HTTP), 443(HTTPS)端口是否开放并给出明确提示。3.2 中级自动化任务批量子域名解析给定一个域名列表文件domains.txt编写脚本resolve_domains.sh自动解析每个域名对应的IP地址并去重后保存到ips.txt中。日志分析器编写脚本analyze_authlog.sh分析/var/log/auth.log统计SSH登录成功和失败的次数并列出所有尝试登录失败的IP地址。3.3 综合实战场景简易漏洞扫描框架尝试编写一个脚本框架simple_scanner.sh其工作流程为接收一个目标IP或域名作为输入。自动进行nmap端口扫描前1000个端口。如果发现80/443端口开放则自动启动nikto进行Web漏洞扫描。将nmap和nikto的输出结果整合到一个以当前日期时间命名的报告中。模块四常见问题与解决方案4.1 语法与执行错误Permission denied错误忘记给脚本添加执行权限使用chmod x script.sh。command not found错误在脚本中使用了相对路径的命令而该命令不在系统的PATH环境变量中。使用绝对路径如/usr/bin/nmap或将命令所在目录加入PATH。unexpected operator或syntax error通常是[ ]测试语句中的空格缺失或括号不匹配。确保[和]两边都有空格并且变量引用用双引号括起如if [ $var value ]; then。4.2 脚本调试技巧启用调试模式bash -x your_script.sh # 显示执行的每一行命令及其展开后的参数 set -x # 在脚本内部启用调试 set x # 关闭调试输出变量值在关键步骤使用echo或printf打印变量的值帮助定位问题。4.3 安全与效率处理包含空格的文件名在循环处理find或ls的输出时使用while IFS read -r line循环或配合find -print0和xargs -0。避免无限循环在while循环中务必有使循环条件最终为假的机制或使用sleep控制频率。明日预告第10天将深入HTTP协议进阶并系统学习渗透测试中最核心的集成平台——Burp Suite。您将掌握代理拦截、重放、入侵、爬虫等模块这是Web应用安全测试的必备技能。——————————————————————————————————————————免责声明本技术分享内容仅供学习和交流目的不构成任何形式的专业建议或承诺。分享者不对因使用或参考本内容而导致的任何直接或间接损失或损害承担责任。网络安全技术涉及潜在风险请在合法授权范围内谨慎操作遵守相关法律法规。读者应自行评估技术适用性并在实际环境中采取必要的安全措施。版权声明未经许可不得擅自修改、转载或用于商业用途。

更多文章