2019. 1. 11. 20:16ㆍWeb Hacking/Webhacking.kr
안녕하세요!
오늘도 비교적 쉬운
150점짜리 문제!
27번을 풀어보겠습니다!
문제를 들어가니 이렇게 뜨네요!
대놓고 나는 sql injection이다
문제의 방향을 바로 제시해 줬죠?
구문 저희가 inject해서
원하는 값을 도출하면 되겠죠?
일단 먼저 sql injection 하려면
뭐가 필터링 되어 있고, 어떻게 해야 풀리는지
코드를 봐야해서 F12를 눌러서
소스코드를 보려 했더니
index.phps라고 있네요!
오호 그럼 저기로 이동해 볼까요?
근데 이동하기 전에
저는 항상 몇 개씩
궁금해서 랜덤한 값을
입력해 보았습니다!
1을 넣으니 아래와 같이 guest가 뜨네요!
그리고 이번엔 syntax error나
오류 메세지가 어떻게 나오나
(왜냐면 오류코드가
힌트가 되니까요)
확인해보려고 '를 입력하니
쿼리 에러라고 뜨네요!
뭐 이 정도만 하고 그러면
index.phps로 이동해볼게요!
코드 보러 고고!
일단 한 줄씩 해석을 하자면
no 값이 있을 때!
모든 게 시작되네요!
그리고 바로 eregi 함수가 와서
사용자가 지정한 문자열을 필터링
하네요!
#, union , from , challnege, select, /, limit, =, 0x등이 있네요!
그리고 밑에 쿼리문이 있네요!
id를 challenge 27 table에서 가져오는데
조건이 있오!
id가 guest 이고
no 값이 ($_GET[no])이여야 하오
근데 문제가 풀리려면
쿼리 값이 admin이여야 풀리고
guest면 guest를 출력해라!
근데 제가 아까 그냥 1 대입했는데,
guest가 출력 됐으니
id ='guest' and no=1가
참이라는 뜻이네요!
즉 guest는 no=1이구나!
그러면 admin의 no는 몇 번 일까?
이렇게 생각을 해봤습니다!
근데 원래 php에서
문자열은 ' ' 혹은 " " 안에 전달되고
숫자는 ' '나 " "없이 그냥
쓰이잖아요!
예) id='admin' <---- admin이 문자열이라 ' '안에 넣음
no=1 <------ 1은 ' '나 " "로 감쌀 필요 없이 그냥 대입가능!
근데 여기서는 no = ( )를 추가적으로 넣으셨네요!
그러면 저희가 저 괄호를 빠져나오려면
숫자 뒤에 )를 입력해야 겠네요!
바로 다음 사진과 함께 설명할게요!
Get 방식이니까 url 창에다가 했습니다!
자 그리고 일단 id를 저희는
admin으로 하고 싶은데
select id='guest'로 고정 되어 있으니
앞의 문장을 거짓으로 만들고,
그 뒤에다가 저희가
원하는 id='admin'을 넣어야 겠죠?
그래서 no=0을 넣으려 했는데
뒤에다가 )를 붙였습니다!
왜냐?
그래야지 no=( 0)가 되서 no가 닫히잖아요
물론 원래 뒤에 있던 ) 는 계속 남아 있게되죠!
근데 괜찮아요 이거 맨뒤에서
주석처리 하면 되니까요!
그리고 바로 뒤에다가 or을
입력하고 저희가 원하는
참인 문장을 입력하면 되죠!
id like 'admin'
=를 못쓰니 like으로 대체했습니다!
admin은 문자열이니 ' '로
감싼거구요!
그리고 맨뒤에 남은 ) 요놈 없앨려고
--+ 입력해서 주석처리했습니다!
그리고 enter를 눌렀는데
query error가 뜨네요!
흠.... 뭐지....?
로직은 분명히 맞는데
' '나 " "가 필터링 되는 기능이 있나...
그래서 그냥 ' '와 " " 를 버리고
다르게 접근하였습니다!
no가 각각의 사용자에게 부여되는 값처럼
보여서 ( 이건 los-eagle 문제에도 비슷한 게 존재해서 경험상 유추가능..)
admin의 no 값을 guess 한거죠!
근데 저희가 솔직히 어느 세월에
일일이 다 찾아요 ㅋㅋ
그래서 살짝 마법을 부렸죠!
guest의 no 값은 1이고
admin의 no 값은
그러면 뭐 최소한 1보단 크겠네?
(시작이 1부터라는 가정하에...)
오키 그러면 뭐 식 세워 봅시다!
똑같이 0)해서 no = (0) 닫아주고
뒤에 or 넣고
저희가 원하는 참 값 넣으면 되죠!
no가 1보다 크다
no>1
그리고 맨 마지막에는 ) 때문에
주석 --+를 입력하니!
문제가 풀리네요!!!
근데 url창 말고
일반 밑에 있는 입력창에
똑같이 입력해봤는데
안되더라구요!
그래서 앞으로도 그렇고 제일 확실하게
get방식이면 url창에다가 입력하세요!
그럼 오늘도 고생하셨습니다!
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[어설픈] webhacking.kr 20번 문제풀이 (0) | 2019.02.21 |
---|---|
[어설픈] webhacking.kr 39번 문제풀이 (0) | 2019.01.12 |
[어설픈] webhaacking.kr 58번 문제풀이 (0) | 2019.01.08 |
[어설픈] webhacking.kr 23번 문제풀이 (0) | 2019.01.07 |
[어설픈] webhacking.kr 25번 문제풀이 (0) | 2019.01.07 |