목록Hacking & Security/Web_hacking 문제풀이 (30)
선릉역 1번 출구
? 딱히 아무것도 없어서 소스코드를 확인했다. 소스코드를 확인하니 귀여운 이모티콘처럼 생긴 애들이 마구 나왔다. 뭔가 난독화가 되어있는 것 같다. 도저히 모르겠어서 찾아보니 'AAEncode'라는 난독화가 되어있는 것이라고 한다. 그래서 맨 뒤에 있는 ('-')만 제외하고 복사해서 console창에 복붙하면 난독화가 풀린다. (function anonymous( ) { var enco=''; var enco2=126; var enco3=33; var ck=document.URL.substr(document.URL.indexOf('=')); for(i=1;i
view-source를 클릭해 소스코드를 확인하자 str_replace(변경할 문자열, 바꿀 문자열, 대상)이다. 여기서 query가 true인 행의 갯수만큼 1이 반환된다. 그러니까 1개라도 있으면 성공이다. 그리고 \ -> 공란, '는 ''으로 replace되고 있고 POST되는 내용의 0에서 시작해 15size만큼의 내용까지만 POST['id']값으로 사용한다. mysql에서 'a'와 'a '는 같다. 공백을 따로 구분하지 않는다는 것인데 이 성질과 substr을 적절하게 섞은 'admin' == 'admin '를 사용하면 '가 ''로 바뀌지만 15까지 자르기 때문에 결국 admin이 된다는 것이다. 이미 앞에 '가 있기 때문에 작성은 admin '으로 해준다. id=admin인 행이 존재하기 때문..
query문 중간에는 #이 들어있어서 그 뒷 문장들이 주석처리 된다. 그러나 여기서 중요한 것은 #의 경우 한 줄만 해당된다는 것이다. 그래서 pw에 먼저 line feed인 %0a을 입력해주면 그 뒤 문장은 인식이 된다. id='guest' and 0이면 앞 문장이 false되고 || id = 'admin'이 true가 되어서 result['id]값이 admin이 된다. clear
and ~뒤는 날려버린다고 생각하자 그럼 pw를 공략하는 방법밖에 없는데 pw를 true가 되게하려면? -> a=b=c를 활용하는 것이다. pw=%27)=0;%00이 딱 6글자다. clear
이 문제도 마찬가지로 where절이 true가 되게 해야한다. strrev(addslashes(~))를 주목하자. addslashes란 특수문자(', ", \, NULL)앞에 \를 붙여주는 것이고 strrev는 문자열을 뒤집는 함수이다. \를 입력했을 때, \\으로 표기되는 것을 볼 수 있다. strrev에 의해서 "를 넣어줬을 때 id 값이 "\으로 들어가서 또 다시 id의 '을 무력화 시킬 수 있다. 전 문제처럼 pw에 or 1 %23을 뒤집어 작성하면 된다(strrev때문) clear
id랑 pw둘 중 어떤 것을 공략해야할까? 평소같았으면 pw를 공략했겠지만 지금은 따옴표가 막혀있기 때문에 id를 공략하려고한다. study(4)에서 배운 '를 무력화시키는 방법은 \사용이 있었다. 그럼 id에 \를 넣어주자 그럼 id의 값이 '\' and pw'가 되어버린다. 정확히는 \' and pw =이다. 그리고 pw의 인자로 true값을 넣어준 뒤 주석처리를 해서 '를 날려버린다. clear