본문 바로가기
category/웹해킹(webhacking.kr)

웹해킹(webhacking.kr) - 40번

by 자운대고라니 2020. 11. 26.
반응형

안녕하세요??

자운대 고라니입니다.

오늘은 wargame.kr old-40번 문제를 풀어보겠습니다.


문제에 들어가 보면 첫 화면이 이렇게 나와있다.

딱 봐도 BLIND SQL INJECTION문제인 듯...

일단 login버튼을 눌러봤다.

Success - guest라는 화면이 출력됐다.

 

처음에는 id칼럼과 pw칼럼을 injection 하려고 열심히 삽질해였지만 모든 방법이 안 먹혔다.

아무래도 addslashes()함수를 사용한 거 같다.

addslashes()함수는 '와 " 앞에 /를 추가하여 한 개의 문자로 '와 "를 한개의 문자로 바꿔버린다.

 

그렇다면 '와 "를 sql문에서 사용하지 않는 no 칼럼을 통해 injection 하여야 한다.

일단 no에 참이 되도록 sql문을 넣어봤다.

그랬더니

똑같이 guest로 로그인되는 것을 확인할 수 있었다.

webhacking 사이트에서는 no=1인 값은 guest, no=2인 값은 admin, no=3~~~~ 비어있다.

그러므로 no에 거짓과 참 분을 넣고 injection 해봤다.

   3    ||  no=2#

(false)      (true)

해당 값을 넣고 로그인해봤더니,

위처럼 admin password를 적으라는 칸이 출력됐다.


admin으로 로그인하는 쿼리문이 참일 경우에 admin password라고 출력되는 것을 확인하였으므로

이를 활용하여 blind injection bruteforce attack이 가능하게 됐다.

나는 python을 활용하였다.

요약하자면

 

윗부분에서 password length를 구할 때 length(pw)={i}를 활용하여 password의 길이를 구하였고,

(3||no=2&&length(pw)={i} 인코딩)

아랫부분에서 substr(pw, {j},1)을 계속해서 반복하여 password의 값을 확인하였다.

(3||no=2&&substr(pw,{j},1)={i} 인코딩)

 


프로그램을 돌린 결과 password는 LUCK_ADMIN이라는 것을 알 수 있었다.

그래서  password id : 칼럼에 LUCK_ADMIN을 넣었는데,

위에 보이는 것처럼 Wrong이라는 문자가 나왔다.

당황했다..... 이게 답이 아닌가?? 그래서 python 코드를 계속해서 돌려봤지만, 11번째 자리부터 아무런 값이 채워지지 않았다.

 

솔직히 너무 답답해서 그냥 답을 보자....라는 마인드로 google에 webhacking40이라 쳐서 답을 확인했는데,

luck_admin 즉 소문자로 넣으면 답이 나온다는 것이다.

나도 따라 해 봤다.

그랬더니 풀리드라. ???????? 왜 풀림??


왜 소문자로 넣어야 답이 나오는지 나는 아직도 모른다.

소스코드가 너무 궁금해지는 문제이다.

왜 소문자로 넣어야 답이 나오는지 알고있는 사람은 꼭 댓글로 남겨주길 ㅠㅠ

 

반응형

댓글