[어설픈] webhacking.kr 39번 문제풀이

2019. 1. 12. 19:05Web Hacking/Webhacking.kr



안녕하세요!

오늘도 비교적 간단한 

100점짜리 문제인

39번 문제풀이를 

진행하도록 하겠습니다!


우선 문제에 들어가니 

아래와 같이 뜨네요!


제출하라고?

그냥 아무거나 넣어 봐야하나?





그래서 혹시 몰라서 

그냥 ' 를 넣어봤습니다

그랬더니 아래와 같이 뜨네요


그래서 아무 숫자나 넣어봐도 

아래와 같이 떠서


뭔가 소스코드를 보고

쿼리 오류가

안나게끔 해야겠구나!

라고 생각했습니다!



그래서 일단 F12를 눌러서

보니 index.phps가 있네요


분명히 저기가면 이제 

저희가 원하는 소스코드가 

기다리고 있겠죠? ㅎㅎ



역시나

소스코드가 있네요.


뭐 이제는 거의 아무것도 없으면

기계적으로 F12누르다 보니

익숙해졌네요 


코드를 한 줄씩 분석해 볼까요?

일단 pw변수에 ????라는 값이

들어가 있네요!


일단 어디에 쓰일지는 모르니까 

저 값이 들어갔나 보다!

하고 pass~


그리고 저희가 입력한 input 값이

post 방식으로 보낸건데, 그리고

id라는 이름하에 보내진거구요


근데 이 놈이 존재하면!

if 문안으로 들어가네요!


str_replace 사용자가 지정한 문자열 

바꿔주는 친구죠!


\\라는 친구가 있으면 빈칸으로 바꿔줘라~

""는 "과 " 사이에 아무것도 없으니

공백(띄어쓰기)도 아닌거에요!! 

주의하세요!!


그리고 str_replace가 하나 더!

'가 있으면

''로 바꿔주네요!

오케이 알겠다!


그리고 substring 함수가 나왔네요!

이 함수 참 오랜만이군..


substring( ) 함수는

문자를 자를 때 사용하는 함수에요!


※substring(자르고 싶은 문자열, 어디서 부터 자를꺼야?, 거기서 몇글자 자를꺼야?)

이렇게 보시면 돼요!

ex) substring('잘라줘',0,1)


이렇게 되면,

(1) 잘라줘라는 문자를!

(2) 0번째부터 (index가 0부터 시작해요 1이 아니라!!)

(3)문자 하나를 잘라!


그렇게 되면 잘라줘에서 잘 만 나오게 됩니다!


그러니 post[id] 값을 0 부터(시작부터)

15글자 잘라!

이렇게 이해하시면 됩니다!

 


그리고 마지막에 쿼리문이 있네요!

 

good를 select해라!

zmail_member 테이블에서

where id= 이 부분을 보는데...?!?!?!?!


어라?!?! id= ' $_POST[id] 따음표 하나가 빠졌네?

 원래 ' 로 열었으면 끝에도 ' 를 넣어야 하는데

이래서 쿼리가 문제였구만!

쿼리문이 안닫혀있네!


그래서 바로 쿼리문에다가 good이라는 값을 입력하고

뒤에다가 '를 넣어주면 되겠지?

라는 생각을 했습니다!


왜 good이 들어가야해요?

select good이라고 앞에 있는데

id도 good이여야

상식적으로 맞는거 같아서요


근데 사실 이 문제의 경우는

good이라고 안 적고

다 빈칸으로 채우고 

뒤에 ' 하나 넣어도 풀리긴해요!


근데 뭔가 select good이라 하길래

id도 good일거 같아서 good이라 입력한거에요!


근데 안풀리네요!

오류가 뜨네요!


     '

        

생각을 해보니까!


아 맞네!

그 놈의 str_replace 때문에....

내가 어디에 넣든 '를 넣으면


하나가 더 복사돼서 

''이 되어 버리네!


무슨말이냐면...

id='$_POST[id]'' <===== 여기서 처럼 하나 가 더 생김

후우 이를 어쩌지


아 근데 뭐든지 웹해킹은

주어진 조건을 최대한 활용해야죠!


수학문제처럼 말이죠!

substring 함수가 눈에 거슬리네요!

이 친구가 왜 여기 있을까?

용도가 뭘까?


고민을 하다가!

답이 나왔습니다!


'를 맨끝에 입력하면 

되는구나!


왜?

도대체 어째서?


너가 무조건 ''로 두개가 생긴다매

그래서 문법상 오류라매!


네 맞아요! ''로 두개가 생기긴 하는데

위에 있는 substring함수가

절묘하게 앞에 15글자 까지만

가져가서 16번째 글자인 '는 누락돼요!


무슨말이냐!!!

good''를

     good' | (여기까지만 가져갈게) '

하고 뒤에 ' 를 버려요 ㅋㅋ


그래서 결국 하나만 '가 생기니

풀리는 문제였습니다!


이건 문제들의 조건들만 

잘 생각해보면 되는 문제였네요!


 그럼오늘도 고생하셨습니다!