其实这次web题目质量一般,可能web只有一道题目做起来让人觉得知识点和考察方式都很好,既简单又困难的那种感觉吧,web题目应该是AK了,但是有一部分没啥营养,这里就记录下两道题目:
1、简单的php
2、高手高手高高手
简单的php
这道题目其实以前也遇到过,不过这里过滤了更多的东西,中心思想还是一致的,我们首先看代码:
1 |
|
第一个考点是无符号执行,就是基本各种符号都被过滤了,我们直接来看下还剩什么,一般剩什么就是考什么:
1 |
|
根据上述代码可得到可用字符如下:[];!@#%*()_{}:<
基本上题目要不留一个 ^ 让你异或出来~继续拼装(也可以异或其他出来,全凭想象),要不就给你留下来这个~。这里有这个~,直接就可以开干,首先基本上可见字符的取反都是不可见字符,不可见字符当然符合这个无字符正则,所以可以用不可见字符取反绕过正则,这里也写一下代码
1 |
|
第二个考点是
1 | if(';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $code) |
也就是payload经过循环过滤后仅剩下; 也就是payload只能是无参的形式:a(abc(dsada())); 这种
那我们就用一些特殊函数:
getheaders获取headers信息,end是获取最后一个,system直接系统命令,我们只需把需要执行的命令放入header的最后一个字段就行了。system(end(getheaders()))
高手高手高高手
由于没有环境了可能只是说一下思路和当时遇到的问题。
首先这道题目是Navigate-CMS 目录有git泄漏:
但是这里的git泄漏我并没有拿到源码,不知道是不是有什么奇怪知识点。所以就去github上找了对应的Navigatecms 源码
通过搜索最近的漏洞详情,发现2022年刚爆出一个任意文件读取的漏洞提醒,根据代码审计了对应代码发现在navigate_download.php存在id参数的任意文件读取:
payload:
1 | http://192.168.1.xxx/navigate_download.php?id=../../../../../../../../../../../../../../../etc/passwd |
但是没什么用 flag不在根目录。
然后搜索到另一个任意文件覆盖上传:
https://www.exploit-db.com/exploits/45561
但是因为github的代码是最新的所以已经修复过了,只能通过上面的任意文件读取拿到navigate_upload.php源码:
1 | http://192.168.1.xxx/navigate_download.php?id=../../../../../../../../../../../../../../../var/www/html/navigate_upload.php |
拿到源码发现漏洞存在于139行
engine=picnik时可以进行文件覆盖,但是这里过滤了../ 仍然很好绕过 通过…/./得到../,所以我们直接覆盖navigate_info.php这个文件的内容:
1 | POST /navigate_upload.php?session_id=vcu80v6qbgcjrajhka5acjh887&engine=picnik&id=../../../navigate_info.php |
拿到shell我们发现根目录存在I_want_capture_the_flag二进制文件,但是运行说什么皇家赌场还没下线,不给flag,二进制逆向发现回去判断两个文件存不存在,如果不存在再通过一系列运算给出flag:
现在我们知道需要删除/var/www/html/bocai.* ,但是我们并没有权限,这里我们就需要提权。首先我们根据网站目录下的隐藏php文件->
/var/www/html/.my_date.php 的提示拿到账号密码 并可以ssh登陆 。登陆后发现账户下面存在.get_root目录里面有现成的提权脚本,先利用源码中的配置文件泄漏的用户navigate 运行mysql-privesc-race拿到mysql权限(时间很长,要等很久要有耐心),再利用得到的mysql账户权限运行mysql-chowned.sh,拿到root。(这两个提权网上可以搜索到,这里不再赘述,第一步提权有条件竞争需要等待较长时间)
拿到root后我们去删除/var/www/html/bocai.* 依然不行,后来发现文件存在a属性,通过修改属性即可删除:
1 | lsattr bocai.png |
最后我们删除bocai.* 再次运行/var/www/html/I_want_capture_the_flag拿到flag
拓展
Linux chattr命令用于改变文件属性。
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
a:让文件或目录仅供附加用途。
b:不更新文件或目录的最后存取时间。
c:将文件或目录压缩后存放。
d:将文件或目录排除在倾倒操作之外。
i:不得任意更动文件或目录。
s:保密性删除文件或目录。
S:即时更新文件或目录。
u:预防意外删除。