[어설픈] webhacking.kr old-56번 문제풀이

2020. 1. 6. 17:31Web Hacking/Webhacking.kr

새롭게 바뀐 webhacking.kr old 56번 문제를 풀어보도록 하겠습니다.

 

문제에 접속을 하니 아래와 같이 나옵니다.

게시판이 있고, 작성자 id와 내용 그리고 번호가 보이네요.

 

 

 

딱봐도 admin의 readme가 어그로를 계속 끌어서 한번 눌러보면

아래와 같이 access denied(접근 제한)이 뜹니다

read라는 parameter에 admin이라는 값을 입력하네요

 

그러면 guest의 hi~를 클릭해보면 어떻게 될까요

눌러봤더니 아래와 같이 뜨네요..

hello~

 

그래서 처음에는 read라는 parameter에 SQL INJECTION 하는 문제인가?

라고 생각을 해서 read에 /?read= ' or 1<2 -- - 

 

뭐 이런 것 같은 것은 기본적인 sql injection을 해봤는데 아무것도 안나오더라구요

그래서 음 그러면 표에서 나온 secret 0,1에 힌트가 있나?

아니면 no에 있는 1,2 이게 힌트인가?

 

문제에서 주어진 온갖 것들을 하나하나 음미하며 시도해보았습니다

근데 뭐 애초에 no 혹은 secret이라는 paremeter로 값을 전달할 수가 없어서

(물론 실제로 ?/read=admin&no=1) 

이런식으로 해보기도 했습니다

 

근데 아무것도 되지 않더라구요....

그래서 후우 남은건 search 밖에 없네

검색창에 뭐라고 쳐야하지?

 

이래서 검색창은 뭘 입력해볼까

그래서 guest에서 있는 hello~ 치니까 guest만 뜨더라구요

 

그래서 아 글 내용을 조회할 수 있는 search구나!

그렇게 대략 짐작을 했습니다

근데도 정확히는 감이 안와서

 

다른사람들 풀이를 다 보진 않고 한 두줄정도 읽고 힌트를 얻긴했습니다

읽어보니 글 내용의 일부분, 한글자만 쳐도 결과값이 뜬다는 겁니다

ex) hello~면 => h,e,l,o,~중에 하나만 검색창에 쳐도 

hello~ 검색한 것 처럼 똑같이 나옵니다!

 

그래서 어 그러면 글의 길이만큼만 검색해야 하는건가?

hello~가 6글자니

hello~ 이상으로 치니까 검색이 안되더라구요

 

그래서 그러면 와일드카드로 자릿수를 알아낼수 있나?

왜냐하면 admin이 쓴 글의 내용이 몇글자 인지 모르니 말이죠..

admin이 쓴 글의 내용을 한글자씩 맞추려고 생각함...

 

그래서 ______ 6개를 입력하니 딱 6개까지는 guest가 나오는데

그 이후에는 guest가 안나오더라구요

 

그래서 아 그러면 admin은 과연 글 내용이 몇일까?

해서 계속 admin의 결과 값이 안나올때까지 계속 검색했습니다

이게 안나오도록 계속 검색해보니

44글자까지는 위와 같이나오는데

 45글자를 입력하니  결과 값이 안나왔습니다

 

그래서 어 그러면 44글자네! 

그러면 하나씩 script짜서 검색해봐야겠다!

뭐 이런식으로 말이죠

a_____________

b_____________

c_____________

..........

특수문자 까지 고려해서 ascii table에 나온 값을

하나씩 다 돌려봐야겟구나!

 

근데 여기서 주의할 것이!!!

예를들어  flag가

flag_hi_my_name_is_name이라고 할때

저 _ 표시가 진짜 원래 플래그의 문자 일수도 있고

_가 와일드 카드일수도 있어서

("의사"선생님에서의 "의사"와 "의사"소통에서 "의사"가 다르듯이)

 

근데 일단은 뭐 무시하고 최대한 나머지 글자라도 많이 맞추고

_로 되어있는 글자 검증하려고 했습니다

 

그래서 코드를 아래와 같이 짰습니다

requests를 import 해서

url에 링크 넣어주고

php sessionID key : value 형식으로 넣어주고

for i in range(1,45)는 1~44 글자여서

for j in range(97,126)으로 되어있는데

맨처음에는 for j in range(34,126)으로 돌렸어요

 

for j in range(97,126)은 맨 마지막에 _문자가 뭔지 찾으려고

돌린 for문이였습니다

스포긴 하지만 몇개의 _ 문자는 { } ?였습니다

 

저 코드는 첫 글자부터 시작해서 계속 하나씩 비교해가면서

찾으면 answer에 추가하고

다시 다음글자 찾고

그걸 스크립트로 만든것입니다

 

_의 갯수를 맞추느라 고민끝에 (44-i)로 했습니다

저 로직은 좀만 생각하시거나 직접 손으로 해보시면 이해가실 겁니다 :)

 

그렇게 하시면 저 사진에도 나와 있듯이, flag가 나옵니다

flag{himiko_toga_is_cute_dont_you_think_so?}