【解決方法】簡単なサニタイズ機能を持つ Web サイトに SQL インジェクションを作成するにはどうすればよいですか?

プログラミングQA

[ad_1]

こんにちは、SQL インジェクションを試すという特定の理由で作成されたこの Web サイトがあります。そのため、パラメータ化されていないか、準備されたステートメントを使用しています。
私は SQL インジェクションを初めて使用し、サニタイズ機能をペイロードでバイパスする方法を確認しようとしています。 小さな問題は、’ と ; をエスケープすることです。

def sqlescape(txt):
    return (str(txt).replace(";",";").replace("'","'"))
@app.route('/addrec', methods=['POST', 'GET'])
def addrec():
    if request.method == 'POST':
        con = sql.connect(db)
        msg = ""
        try:
            title = request.form['title']
            body = request.form['body']
            key = request.form['password']
            body = encode_body(body, key)
            cur = con.cursor()
            cur.executescript("INSERT INTO tasks (title,body) VALUES (" +
                              html.unescape(sqlescape(title)) + "," + html.unescape(sqlescape(body.decode())) +
                              ");")
            con.commit()
            msg = "Record successfully added"
        except:
            con.rollback()
            msg = "error in insert operation"

        finally:
            return render_template("result.html", msg=msg)
            con.close()

app.route('/task')
def my_route():
    taskid = request.args.get('id', default=1)
    con = sql.connect(db)
    con.row_factory = sql.Row
    cur = con.cursor()
    cur.execute("select title,body from tasks where id=?", taskid)
    (title, body) = cur.fetchone()
    return render_template(
        "task.html",
        title=title,
        body=body,  # body.decode(),
        taskid=taskid)

@app.route('/decrypt', methods=['POST', 'GET'])
def decrypt():
    if request.method == 'POST':
        taskid = request.form['id']
        key = request.form['password']
        con = sql.connect(db)
        con.row_factory = sql.Row
        cur = con.cursor()
        cur.execute("select title,body from tasks where id=?", taskid)
        (title, body) = cur.fetchone()
        body = decode_body(body, key)
        return render_template("decrypt.html", title=title, body=body)

@app.route('/list')
def list():
    con = sql.connect(db)
    con.row_factory = sql.Row
    cur = con.cursor()
    cur.execute("select title,id from tasks")
    rows = cur.fetchall()
    return render_template("list.html", rows=rows)


if not os.path.isfile(db):
    with sql.connect(db) as conn:
        conn.execute(
            'CREATE TABLE tasks (id integer primary key, title TEXT, body TEXT)'
        )

私が試したこと:

代わりに ” を使用してみましたが、 sqlescape() がフィルタリングしないため、それを入力しようとしました

Python
";DROP TABLES tasks;--

また、文字 \’ または \” を他の関数と組み合わせて試してみました — 他のフィールドと一緒にタイトルと本文の入力に入力しましたが、コードを見てもどの入力フィールドがペイロードの影響を受けやすいかわかりません私はそれがタイトルだと確信しており、sqlescape()をバイパスしてエラーを返すために使用できるペイロード文字の例を探しました。一見何の効果もなくレコードに入力を追加します /addrec でパスワードを入力するときに注意したことの1つは、コードを見ても「挿入操作でエラーが発生しました」という例外が返されることですが、これが単なるものかどうかはわかりません意図されているか、パスワードがインジェクションで役割を果たしている. それで、どうすればこれを実行できるか、どの文字が機能をバイパスするのに役立つかについてアドバイスを得ることができるかどうか疑問に思っていましたか?

解決策 1

私たちは、悪意のあるコードの作成を容認、サポート、または支援することはありません。 これは、プロの開発者向けの専門サイトです。

そのようなものを作成する方法を知りたい場合は、ハッキング サイトにアクセスする必要があります。ただし、最初にすべてのファイアウォールとウイルス対策製品を無効にしてください。そうしないと、十分に信頼されなくなります。

[ad_2]

コメント

タイトルとURLをコピーしました