首页
Search
1
v2ray异常错误之二
3,310 阅读
2
linux时区设置
2,698 阅读
3
DB2常用操作
2,173 阅读
4
websphere修改jvm内存xmx和xms
1,929 阅读
5
nfs客户端文件属主为nobody的现象
1,552 阅读
技术
生活
运动
游戏
电影
登录
Search
标签搜索
docker
linux
troubleshooting
nginx
secure
truenas
mysql
windows
python
esxi
docker swarm
oracle
zabbix
tomcat
blog
dsm
群晖
rpa
freenas
db
yuc
累计撰写
291
篇文章
累计收到
0
条评论
首页
栏目
技术
生活
运动
游戏
电影
页面
搜索到
3
篇与
的结果
2024-11-28
crowd密码强度提升
问题背景 crowd 旧版本在修改密码的时候对密码强度要求不高,存在安全隐患,现研究如何提升 crowd 用户的密码强度策略 检查配置 查看了 crowd 后台配置,发现并没有跟密码相关的配置部分,那么只能想其他办法了 通过查看部署文件,发现可能通过修改代码的方式加强策略,具体找出了以下几个可能有关的文件: crowd-webapp/WEB-INF/classes/com/atlassian/crowd/console/action/ChangeExpiredPassword.class crowd-webapp/WEB-INF/classes/com/atlassian/crowd/console/action/ResetPassword.class crowd-webapp/WEB-INF/classes/com/atlassian/crowd/console/action/user/ChangePassword.class 计划反编译后修改源码实现密码强度的增强校验 配置过程 本次使用到了如下一些工具: jdk8_131 crowd 的启动运行jdk jd-gui 反编译 class 文件为源码 jet-brains idea 修改源码并且重新编译 使用上面的工具反编译后几个文件内都有如下代码,看起来用于密码的强度校验,所以可以从这里入手: private void doValidation() { if (StringUtils.isBlank(this.password)) addFieldError("password", getText("passwordempty.invalid")); if (StringUtils.isBlank(this.confirmPassword)) { addFieldError("confirmpassword", getText("passwordempty.invalid")); } else if (!StringUtils.equals(this.password, this.confirmPassword)) { addFieldError("password", getText("passworddonotmatch.invalid")); } } 修改为如下代码: private void doValidation() { if (StringUtils.isBlank(this.password)) { addFieldError("password", getText("passwordempty.invalid")); } else { String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!#<>@$%^&*\\-_+=|;:,.<>?/]).{8,}$"; if (!this.password.matches(regex)) addFieldError("password", "密码包含大写字母、小写字母、数字、特殊字符@#./-_<>+=?!$%^&* ,并且不少于8位"); } if (StringUtils.isBlank(this.confirmPassword)) { addFieldError("confirmpassword", getText("passwordempty.invalid")); } else if (!StringUtils.equals(this.password, this.confirmPassword)) { addFieldError("password", getText("passworddonotmatch.invalid")); } } 上面修改后的代码强度策略为:最少一个大写、一个小写、一个数字、一个特殊字符。但特殊字符只是尽量扩展了,并没有完全包括所有的字符,目前单文件强度测试是符合预期的 应用测试 在重新编译生成 class 后替换原环境,分别测试在管理员后台修改密码、在普通用户后台修改、过期修改、忘记密码、邮件重置 等都测试成功 使用如下代码可在 vscode 运行测试效果 public class PasswordValidator { public static void main(String[] args) { // 测试密码 String password = "1Password."; // 测试密码可以修改 // // 调用验证密码的方法 if (!isValidPassword(password)) { System.out.println("密码需包含大写字母、小写字母、数字、特殊字符@#./-_<>+=?!$%^&* ,并且不少于8位"); } else { System.out.println("密码验证通过!"); } } // 密码验证方法 public static boolean isValidPassword(String password) { // 密码的正则表达式 // String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"; // old String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!#<>@$%^&*\\-_+=|;:,.<>?/]).{8,}$"; // new // 使用正则表达式进行匹配验证 return password.matches(regex); } } 20241125 在研究 crowd 新增 directory 的时候,发现 directory 的配置页面是可以设置密码复杂度正则的,后续可以测试下这里是否能控制住
2024年11月28日
4 阅读
0 评论
0 点赞
2024-09-10
Atlassian产品破解
破解方法和产品 参考工具和文档: https://github.com/caelumlux/atlassian-agent 虽然代码已经有一年甚至两年未更新,但是按照宣传,可以实现所有 atlassian 产品的破解,并且实际测试破解 Crowd 6.0.2 版本,此版本的更新时间是 2024.09.04 没有问题 步骤 代码拉取、编译无问题,使用 mvn package 之前最好配置国内源,查看了代码操作,应该没有安全问题 接下来按照文档步骤操作即可,要注意的是 -p 参数,前面的是需要的值,应该写比如 crowd,而不是 Crowd,否则 license 无效。最后安装模板也是同样的办法,先安装,然后找到模块对应的 序列号 、应用密钥 即可 以下是代码归档 1725938692-atlassian-agent.tar
2024年09月10日
11 阅读
0 评论
0 点赞
2024-09-10
crowd密码过期通知
背景 公司使用的 crowd 一直没有升级,版本是 2.11.1 ,一直以来用户密码过期时间是一年,但是都没有通知功能,很多用户登录很多次不行,又来咨询,互相都浪费了不少时间,所以这次决定想一个办法解决密码过期通知的 办法 通过查询资料,找到了两个办法: 升级到新版本,已经测试新版本在邮件配置的后台有了密码过期通知的模板,说明后来是新增了这个功能的 使用自定义的脚本,需要在数据库中检索密码将要过期的用户,拿到用户邮箱发送通知 选择 两个办法优劣如下: 升级到版本是优先考虑的选项,但是存在几个问题 a. 一是公司还使用了同时期的 confluence、jira b. 其他第三方的服务也跟 crowd 做了对接 c. 最后 OA 还使用了 crowd 的 api 接口做用户管理 d. 没有最新license,可能还需要破解,存在安全以及稳定性的问题 e. 最后还需要从 2.11.1 版本恢复数据到 6.0.2 功能和稳定性也未知 f. 综合考虑目前升级版本风险无法控制,可能需要暂缓 使用自定义脚本的方式来通知,优劣如下: a. 可以自己检索任意时间、用户进行通知都可以 b. 是否准确、以及通知的稳定性未知,主要是功能方面 c. 综上,目前来看的话,使用这种方法在安全性上可以得到保证 脚本 脚本如下: #!/bin/bash host="192.168.xx.xx" port=3336 user="crowd" pass="crowd" db='crowd' sql="select * from (select concat(u.first_name,u.last_name) as full_name, u.email_address, DATE(FROM_UNIXTIME(ua.attribute_value/1000)) pwd_last_changed, DATEDIFF(DATE_ADD(FROM_UNIXTIME(ua.attribute_value/1000), INTERVAL da.attribute_value DAY), NOW()) days_before_expire from crowd.cwd_user u inner join cwd_user_attribute ua on ua.user_id=u.id and u.active='T' and ua.attribute_name='passwordLastChanged' inner join cwd_directory_attribute da on u.directory_id=da.directory_id and da.attribute_name='password_max_change_time' order by days_before_expire) t where t.days_before_expire in (0,1,7)" #sql="select * from (select concat(u.first_name,u.last_name) as full_name, # u.email_address, # DATE(FROM_UNIXTIME(ua.attribute_value/1000)) pwd_last_changed, # DATEDIFF(DATE_ADD(FROM_UNIXTIME(ua.attribute_value/1000), INTERVAL da.attribute_value DAY), NOW()) days_before_expire # from crowd.cwd_user u # inner join cwd_user_attribute ua on # ua.user_id=u.id # and ua.attribute_name='passwordLastChanged' # inner join cwd_directory_attribute da on # u.directory_id=da.directory_id # and da.attribute_name='password_max_change_time' # order by days_before_expire) t # where email_address='yuc@succez.com'" text=$(mysql -u${user} -h${host} -p${pass} -P${port} -D${db} -N -e "${sql}") dddte=`date +%F_%T` echo "===================== ${dddte} Execute ======================" echo "$text" | while read line;do read name mail days <<< $(echo $line | awk '{print $1,$2,$4}') ddate=`date +%F_%T` #echo $name #echo $mail #echo $days # send mail to user mail echo "----------------- ${ddate} ------------------" >> ~/crowdmail.log echo -e " ${name} 你好, 你的 Crowd 密码即将过期,剩余天数为: ${days} ,请在过期之前登录 openvpn 到站点: https://crowd.xx.com/crowd 修改新密码 " | mailx -v -s "Crowd密码过期提醒" $mail &>> ~/crowdmail.log # 记录 echo $ddate $line >> ~/crowd.pass done SQL 参考 官方 JIRA 中问答(在历史版本中没有此功能的解决方案) 然后 mailx 需要配置下邮箱,这里使用的是阿里云的邮件服务
2024年09月10日
3 阅读
0 评论
0 点赞