일단 쓰고보자

[los] iron_golem 본문

모의해킹/Lord of SQLInjection

[los] iron_golem

휘갈기갈기 2020. 5. 15. 16:19

#문제

 

 

#문제 의도

- 입력 값 필터링 규칙 (pw)

if(preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~");
if(
preg_match('/sleep|benchmark/i'$_GET[pw])) exit("HeHe");

  1) prob

  2) _

  3) .

  4) ()

  5) sleep

  6) benchmark

- 목표

필터링을 사용하지 않거나 우회하여 쿼리 결과가 존재하면 해결

 

 

#확인사항

- 문제 코드를 잘 보면 여느 블라인드 인젝션과는 다르게 Hello admin, Hello guest 등 쿼리 결과에 따라 참/거짓을 판별할 수 있는 문구를 출력해주지 않아서 다른 방법을 찾아봐야 한다. 우선 의심 드는 부분은

  1) Time based SQL Injection

  2) Error based SQL Injection (코드 내 mysqli_error 함수 추가된 것으로 추정)

 

- 먼저 Time based SQL Injection을 시도해보려 했으나 sleep과 benchmark 문자를 필터링한 것으로 보아, 이미 간파당한 것 같다. sleep, benchmark 함수를 잃은 상태에서는 헤비쿼리를 통한 인젝션을 시도해볼 수 있는데, 이 또한 information_schema.columns A, information_schema.columns B, 등 언더바 문자(_)를 필요로 하여 필터링에 걸린다. 여의치가 않다. Time based SQL Injection 땡

 

- 다음으로 Error based SQL Injection. pw 값으로 싱글쿼터(')만 입력하는 경우 에러가 발생하게 된다.

- 제일 먼저 든 생각은 "조건문을 사용해서 참인 경우 에러를 유발할 수 있는가?" 였다. 여지껏 해본 적은 없었으나 가능하면 상당히 강력한 공격법이 될 수 있을 것만 같다. 행복회로 돌리며 우선 쿼리 기본 틀부터 잡아보았다. 다행히 문자 사용이 꽤나 자유로워서 다행이었다.

※ select id from prob_iron_golem where id='admin' and pw='' or if(조건문, 에러유발, 0)#

- 처음엔 에러유발 부분에 싱글쿼터(') 하나씩만 넣어보거나 char 함수로 싱글쿼터 문자만 넣거나 등등 해봤지만 조건문과 관계없이 에러 나거나 아예 에러가 나지 않았다. 맨 땅에 해딩하는 시간을 가졌다.

- 한 참 찾다보니 서브쿼리는 아래 2가지의 경우 에러가 발생한단 것을 알게되었고, 2번의 경우는 조건과 관계없이 에러가 나서 1번으로 진행했다.

  1) 서브쿼리의 결과가 2 rows 이상 ※ ex) select 1 union select 2

  2) 서브쿼리의 결과 컬럼이 2개 이상인 경우 ex) select 1, 2


- 이제 Blind Injection 을 시작해보자. pw 길이를 알 수 있도록 기본 쿼리 틀을 수정하여 참과 거짓인 경우를 살펴보면

※ select id from prob_iron_golem where id='admin' and pw='' or if(length(pw)<1000, select 1 union select 2, 0)#

 

  1) 참인 경우

pw 값이 1000 미만이면 에러가 나도록 해보았다.

  2) 거짓인 경우

일부러 거짓을 만들어보면 에러가 나지 않는다.

- pw 길이는 32란 걸 알게됐다.

 

- 다음은 각 문자열을 알아내는 쿼리를 만들어 문자를 알아내는 쿼리다.

※ select id from prob_iron_golem where id='admin' and pw='' or if(ascii(mid(pw,1,1))=100, select 1 union select 2, 0)#

- BurpSuite의 Intruder 기능으로 Bruteforcing 수행 결과 PW 값을 알아낼 수 있었다. (사람이 도구를 써야지)

※ 각 문자 알아내는 것처럼 Payload 2개 이상 한 번에 Bruteforcing 할 때 진짜 Intruder Cluster Bomb 추천


- 드디어 풀렸다.

 

'모의해킹 > Lord of SQLInjection' 카테고리의 다른 글

[los] dragon  (0) 2020.05.11
[los] xavis  (0) 2020.04.24
[los] nightmare  (0) 2020.04.10
[los] zombie_assassin  (2) 2020.04.10
[los] succubus  (0) 2020.04.08