題目很好心把他會查詢的指令列出來了,可以發現他都有用 ()
包起來,所以截斷的時候要注意要把 )
也帶上,就能順利 Injection 了。
他有提供網站的原始碼,是用 flask 建的,下面這個是主要邏輯
@app.route("/", methods=["GET", "POST"])
def dig():
dig_result = None
if request.args.get("debug"):
return send_file(__name__ + ".py")
if request.method == "POST":
hostname1 = request.form["hostname1"]
hostname2 = request.form["hostname2"]
process = subprocess.Popen(
["dig", hostname1, hostname2],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
output, _ = process.communicate()
dig_result = output.decode()
return render_template("index.html", request=request, dig_result=dig_result)
["dig", hostname1, hostname2]
這樣的寫法會讓我們打算 injection
講師給了一個 酷酷網站 ,可以查到很多利用一些本來應該不是用來讀檔或執行指令的
的指令來 bypass 的方法,就找到了這個東東,按照這個方法就可以讀到 flag 了。