klaus

[Lord of SQL Injection] goblin 3단계 본문

모의해킹/Wargame

[Lord of SQL Injection] goblin 3단계

klus! 2022. 11. 21. 15:10

2022.11.20 - [모의해킹/Wargame] - [LOS] Cobolt 2단계

 

[LOS] Cobolt 2단계

1번문제 : 2022.11.20 - [모의해킹/Wargame] - [LOS] Gremlin 1단계 [LOS] Gremlin 1단계 워게임 중 SQL INJECTION 관련 문제를 푸는 것입니다. 노말틱님이 추천해주신 워게임 중 하나입니다.던전의 몬스터를 점령(?)

toriyong.tistory.com

0. goblin

사진을 넣기 위해 고블린을 검색해보았습니다.

놀라운 사실! 드라마 도깨비가 해외에서 제목이 고블린으로 나온다는 사실에 놀라서 찾아보다가 10분을 허비했네요 ㅎㅎ

 

 

 

1. goblin 문제 및 코드 분석

문제

preg_match() 필터링 부분을 보면 SQLi에서 사용되는 쿼터(, ' " ` i )들이 필터링되어 exit 되는 것을 알 수 있습니다.

이번 문제는 필터링이 힘들어 보이는군요

 

SQL 쿼리를 보면,

 $query "select id from prob_goblin where id='guest' and no={$_GET[no]}"

 

id(guest) and 번호(no)의 조건이 맞아야 처리가 되는 것으로 보입니다. 

no=0의 경우 반응 없음

no=1 guest

no=2 반응 없음

으로 확인하였습니다. no=1번은 guest가 사용 중이라는 것을 알 수 있습니다.

no=1

해당 문제는 논리 연산자를 사용하여 풀이가 가능할 것 같습니다. 

 where id='guest' and no={$_GET[no]}"

일단, where id='guest' and no=0로 만들어서 거짓 문장으로 만들고 뒤에 or 연산을 넣어 no=x를 넣어 admin이라는 참 값을 만들어 준다면 가능하지 않을까??

그럼, no=0||no=x 라는 공식을 얻을 수 있습니다.

다만, no=x값이 때문에 admin값이 10000번에 있다고 가정하면 무차별 대입하는 방법으로 하나씩 쓰기보다는 프로그래밍을 해야겠죠?

다시 한번 코딩의 중요성을 느끼네요 ㅎㅎ

필자는 no=0||no=2을 사용하여 문제를 풀었습니다..... 너무 무차별 대입으로 풀었습니다.

 

그게 아니면 no=0||id='admin'으로 여러 방법으로 'admin'을 변형하여 사용이 가능할 것 같습니다.

여러 포스팅을 보다 보니 아래와 같은 방식으로도 해결이 가능한 듯합니다.

 

no=0 or id=0x61646d696e   : 'admin' 인코딩

0 or id=char(97,100,109,105,110)   : 'admin'을 ''싱글 쿼터가 필터링되어 때문에 char()으로 묶고 admin을 아스키코드로 변환

 

오늘도 이렇게 3번 문제를 풀어보았습니다.

Comments