SQL 인젝션 해커 챌린지
10111 단어 sqlcybersecuritypythonprogramming
💡 개요
A
SQL injection
( SQLi
)는 웹 페이지의 입력 필드에 악성 SQL 문을 삽입하거나 "injecting"
데이터 기반 애플리케이션을 대상으로 하는 사이버 보안 공격 유형입니다. 성공SQLi
하면 공격자가 데이터베이스의 민감한 데이터read
, 데이터베이스 데이터(삽입/업데이트/삭제), modify
데이터베이스에 대한 관리 작업을 수행하거나 execute
시스템 자체. SQLi Hacker Challenge는 이 도전을 위해 설계된 모의 데이터베이스에 대한 공격root
을 수행할 수 있는 기회입니다. 성공하면 재미있는 답변을 할 수 있는 또 다른 기회가 주어집니다Bonus Questions.시작하기 전에
SQLi
공격의 예를 살펴보겠습니다.SQLi 예제
끝에 변수(
SQLi
)를 추가하여 SELECT
명령문을 생성하는 다음 예를 살펴보십시오. 변수는 user_id
함수에서 가져옵니다.user_id = input("User ID: ")
SQL_statement = f"SELECT * FROM Users WHERE user_id = {user_id};"
코드의 목적은 주어진
input()
를 사용하여 SQL
를 선택하는 user
문을 만드는 것입니다. 보안 조치가 없는 경우 사용자는 다음과 같이 잘못된 데이터를 입력 필드에 입력할 수 있습니다.User Id: 776 OR 1=1
이렇게 하면 다음 SQL 문이 생성됩니다.
SELECT * FROM Users WHERE user_id = 776 OR 1=1;
위의 SQL 문은 유효하며
user_id
는 항상 "Users"
이므로 OR 1=1
테이블의 모든 행을 반환합니다. TRUE
테이블에 "Users"
및 usernames
가 포함된 경우 해커는 단순히 passwords
를 입력 필드에 삽입하여 데이터베이스의 모든 사용자 이름과 암호에 액세스할 수 있습니다.SQLi 해커 챌린지
이제
776 OR 1=1
의 작동 방식에 대한 기본 이해가 있으므로 SQLi Hacker Challenge를 시도해 보겠습니다.일
귀하의 임무는 이 도전을 위해 설계된 모의 데이터베이스에 대해 성공적인
SQLi
공격을 실행하고 모든 콘텐츠를 보는 것입니다.데이터베이스 설계
데이터베이스는 하나
SQLi
와 다음 세 개table
로 구성됩니다.columns
id
username
지침
로컬 컴퓨터에서 다음 Python 스크립트를 실행하면
password
메시지가 표시됩니다. "Enter your SQL Injection."
공격에 성공할 때까지 입력을 계속하십시오!#!/usr/bin/env python3
import sqlite3
import requests
# SQL statements:
CREATE_USERS_TABLE = "CREATE TABLE IF NOT EXISTS usernames (id INTEGER PRIMARY KEY, username TEXT, password TEXT);"
INSERT_USER_DATA = "INSERT INTO usernames (username, password) VALUES (?, ?)"
def get_userdata() -> list:
"""Returns username, and password in tuple from online username.dat file."""
# url to username and password file
URL = "https://pastebin.com/raw/ih7szSSv"
raw = [i.strip() for i in requests.get(URL).text.split('\n')]
output = []
for i in raw:
users = i.split(', ')[0].split(',')[0]
passwords = i.split(', ')[0].split(',')[1]
output.append((users, passwords))
return output
# Create database in memory
conn = sqlite3.connect(":memory:")
# Get usernames and passwords
user_data = get_userdata()
# Create table
conn.execute(CREATE_USERS_TABLE)
# Insert username, passwords into database
conn.executemany(INSERT_USER_DATA, user_data)
while True:
INJECTION = input("Enter your SQL Injection:\n> ")
sql = f"SELECT * FROM usernames WHERE id = 776 {INJECTION}"
try:
results = conn.execute(sql).fetchall()
if results:
print(f"\n\033[92m" + "Good job, you did it!" + "\033[0m")
with conn:
for row in results:
print(row)
conn.close()
break
except sqlite3.OperationalError as e:
print("\n\033[91m" + "Nope, try again!" + "\033[0m")
pass
보너스 질문
데이터베이스를 덤프한 후 다음 보너스 질문을 해결해 보십시오.
SQLi
) 101
는 어떤 1995년 영화"crime/action/romance"
에 출연했습니까? 힌트: 첫 번째 보너스 문제를 해결하세요. 결론
이 자습서의 주요 목적은
users
공격을 수행하는 방법에 대한 기본 기술을 가르치는 것이었습니다. SQLi
공격을 성공적으로 실행하고 모든 보너스 질문을 해결할 수 있기를 바랍니다. 더 나은SQLi
그래픽 사용자 인터페이스를 원하면 SQL Injection Lab hosted on Hacksplaining 을 확인하십시오. 질문, 우려 사항 또는 의견을 아래에 남겨주세요. 이 게시물을 읽어 주셔서 감사합니다 ~ 행운을 빌어요, 재미!GitHub에서 사용 가능한 코드
Reference
이 문제에 관하여(SQL 인젝션 해커 챌린지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/seraph776/sql-injection-hacker-challenge-348j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)