BugKu -- never give up

本文通过逐步解码和分析一系列复杂PHP代码,揭示了一个隐藏的flag。从URL解码开始,历经多次base64解码,最终揭露了代码背后的逻辑,包括条件判断、文件读取等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

never give up

        100

http://120.24.86.145:8006/test/hello.php

作者:御结冰城

打开链接显示一串字符,右键查看源码,发现1p.html

 

访问 1p.html ,发现页面自动跳转到  http://www.bugku.com/

应该是有 window.location.href 之类的重定向,那就直接查看1p.html的源码,在链接前面加 view-source:

view-source:http://120.24.86.145:8006/test/1p.html

有发现!根据%3C来看Words变量应该是url编码

解码后发现 注释部分还进行了base64编码

<script>window.location.href='http://www.bugku.com';</script> 
<!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->

 继续base64解码后

<!--%22%3Bif%28%21%24_GET%5B%27id%27%5D%29%0A%7B%0A%09header%28%27Location%3A%20hello.php%3Fid%3D1%27%29%3B%0A%09exit%28%29%3B%0A%7D%0A%24id%3D%24_GET%5B%27id%27%5D%3B%0A%24a%3D%24_GET%5B%27a%27%5D%3B%0A%24b%3D%24_GET%5B%27b%27%5D%3B%0Aif%28stripos%28%24a%2C%27.%27%29%29%0A%7B%0A%09echo%20%27no%20no%20no%20no%20no%20no%20no%27%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20@file_get_contents%28%24a%2C%27r%27%29%3B%0Aif%28%24data%3D%3D%22bugku%20is%20a%20nice%20plateform%21%22%20and%20%24id%3D%3D0%20and%20strlen%28%24b%29%3E5%20and%20eregi%28%22111%22.substr%28%24b%2C0%2C1%29%2C%221114%22%29%20and%20substr%28%24b%2C0%2C1%29%21%3D4%29%0A%7B%0A%09require%28%22f4l2a3g.txt%22%29%3B%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20%21%21%21%22%3B%0A%7D%0A%0A%0A%3F%3E-->

还有一层url编码,继续

<script>window.location.href='http://www.bugku.com';</script> 
<!--";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	require("f4l2a3g.txt");
}
else
{
	print "never never never give up !!!";
}


?>-->

终于出来了,来分析代码

stripos(字符串a,字符串b) 函数查找字符串b在字符串a中第一次出现的位置(不区分大小写)。

file_get_contents 将整个文件读入一个字符串

strlen() 函数返回字符串的长度

substr() 函数返回字符串的一部分。 substr(string,start,length) ,length参数可选。如  substr($b,0,1)  就是在参数b里面 ,从0开始返回1个长度的字符串

eregi("111".substr($b,0,1),"1114")    就是判断"1114"这个字符串里面是否有符合"111".substr($b,0,1)这个规则的

 

总的来说,如果a参数传入文件内有 "bugku is a nice plateform!"字符串,并且id参数为0 , b参数长度大于5,"1114"这个字符串里面是否有符合"111".substr($b,0,1)这个规则的,substr($b,0,1)不能等于4   以上这些条件都满足,就请求 f4l2a3g.txt

:)这么麻烦,那就先试试能不能直接访问 f4l2a3g.txt 吧

可以访问,flag我看到你了!

<think>好的,我现在需要帮助用户解决GDM启动环境中的“session never registered”错误。根据用户提供的引用内容和之前的对话历史,我需要综合这些信息来制定解决方案。 首先,用户提到的引用[1]提到GDM配置文件的位置在不同系统版本中的变化,比如RHEL6之后不再有GUI配置工具,需要手动编辑配置文件。这可能意味着用户需要检查并修改GDM的配置文件,如`/etc/gdm3/custom.conf`,特别是与XDMCP相关的设置。但用户的问题是关于会话未注册的错误,可能与XDMCP无关,不过配置错误也可能导致其他问题。 引用[2]提到了GDM二进制文件出现段错误,这可能导致GDM无法启动,进而引发会话注册失败。用户之前的问题中也涉及黑屏和GomDisplay错误,可能与显卡驱动或显示管理器崩溃有关。需要检查系统日志,特别是`journalctl`中的GDM服务状态,以及是否存在段错误或其他崩溃信息。 引用[3]是关于通过PAM模块限制su命令的使用,这可能与当前问题关联不大,但用户可能之前遇到权限问题,所以需要确保相关配置不会影响到GDM的正常运行,比如用户权限或组设置是否正确。 用户之前的回答中提到了进入恢复模式、修改内核参数(nomodeset)、重装显示管理器、检查DBus服务等步骤。现在用户的问题更具体地指向“session never registered”错误,需要进一步细化解决方案。 首先,考虑GDM服务本身的问题。检查GDM的状态和日志,确认是否有启动失败或崩溃的情况。如果存在段错误,可能需要重新安装GDM或相关依赖包。 其次,DBus服务异常可能导致会话无法注册,如用户之前提到的,需要确保DBus正常运行,并重启相关服务。此外,检查账户服务(accounts-daemon)是否正常,因为用户会话管理可能依赖于此。 另外,显示服务器配置(Xorg/Wayland)的问题也可能导致会话注册失败。用户之前建议切换到Xorg,禁用Wayland,这可能在当前问题中仍然有效。需要检查GDM配置文件中Wayland是否被禁用,并确认Xorg日志是否有错误,如显卡驱动问题。 还可能存在权限问题,比如GDM用户或相关目录的权限不正确,导致无法创建会话。需要检查`/var/lib/gdm3`目录的权限,并确保GDM用户有权访问所需资源。 最后,如果所有方法无效,考虑安装轻量级桌面环境或重新安装GDM,作为备选方案。 需要将这些步骤组织成结构清晰的解决方案,分步骤指导用户排查和解决问题,同时引用相关引用内容中的信息来支持建议,例如配置文件的位置和修改方法,检查日志的命令等。</think>### **GDM "Session Never Registered" 错误完整解决方案** --- #### **1. 核心服务状态诊断** - **检查GDM3服务崩溃记录** ```bash journalctl -u gdm3 -b | grep -iE "segfault|failed|error" ``` 若出现类似`gdm-binary segfault`的报错(引用[2]),需彻底重装GDM: ```bash sudo apt purge gdm3 -y && sudo apt install gdm3 ubuntu-desktop-minimal --reinstall -y ``` - **验证DBus会话总线** ```bash dbus-send --system --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.ListNames ``` 正常应返回服务列表,若报错`Failed to connect to socket`,执行: ```bash sudo systemctl restart dbus && sudo systemctl restart accounts-daemon # 引用[3]中账户服务关联 ``` --- #### **2. 关键配置文件修复** - **强制重建GDM配置** 备份后删除旧配置: ```bash sudo mv /var/lib/gdm3/.config /var/lib/gdm3/.config.bak sudo dpkg-reconfigure gdm3 ``` 此操作会重新生成用户会话注册所需的配置文件 - **禁用Wayland协议(针对NVIDIA显卡)** 编辑GDM配置(引用[1]路径适配Ubuntu): ```bash sudo nano /etc/gdm3/custom.conf ``` 确保包含: ```ini [daemon] WaylandEnable=false DefaultSession=gnome-xorg.desktop ``` 更新后执行: ```bash sudo systemctl restart gdm3 ``` --- #### **3. 权限与依赖深度修复** - **重置GDM用户权限树** ```bash sudo chown -R gdm:gdm /var/lib/gdm3 sudo chmod 0750 /var/lib/gdm3/.cache/ ``` 权限错误会导致会话注册失败 - **检查Xorg核心依赖** ```bash sudo apt --fix-broken install sudo apt install xserver-xorg-core xserver-xorg-video-all --reinstall -y ``` 显示服务器组件缺失是常见诱因 --- #### **4. 日志定向分析** - **实时监控会话注册过程** ```bash sudo tail -f /var/log/gdm3/:0.log | grep -i "register" ``` 正常应显示: ``` ** (gdm-x-session): Registered session with console-kit-daemon ``` 若缺失该日志,说明会话注册链路中断 - **检查PAM认证流程** 查看`/var/log/auth.log`中是否存在GDM相关拒绝记录: ```bash grep gdm /var/log/auth.log | grep -i "permission denied" ``` 若有输出,需检查`/etc/pam.d/gdm*`文件权限(引用[3]中PAM配置原理) --- #### **5. 备选恢复方案** - **创建临时测试用户** ```bash sudo useradd testgui && sudo passwd testgui ``` 使用新用户登录验证是否仍报错,可排除原用户配置污染 - **切换LightDM显示管理器** ```bash sudo apt install lightdm -y sudo dpkg-reconfigure lightdm ``` 更换显示管理器可绕过GDM固有缺陷 --- ### **关键问题排查流程图** ```mermaid graph TD A[出现Session未注册错误] --> B{检查journalctl -u gdm3} B -->|Segfault报错| C[重装GDM+驱动] B -->|DBus连接失败| D[重启dbus/accounts-daemon] B -->|无关键错误| E[检查Wayland/Xorg配置] E --> F[禁用Wayland并指定Xorg] F --> G[验证/var/lib/gdm3权限] G --> H[重建GDM用户配置] ``` ### **相关问题** 1. 如何通过日志确认Wayland/Xorg实际使用的显示协议? 2. `accounts-daemon`服务与GDM会话注册的具体关联机制是什么? 3. 在Ubuntu 22.04 LTS中如何安全降级GDM版本? --- 通过上述方法可覆盖**服务崩溃**、**协议冲突**、**权限错误**三大主因。若问题仍存在,建议提供: 1. `/var/log/gdm3/:0.log` 完整日志 2. `lspci -k | grep -A3 VGA` 显卡信息 3. `dpkg -l | grep -E "gdm3|xorg|nvidia"` 软件包状态
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值