문제를 풀자
pw 파라미터를 get 방식으로 받아서 만약 id값이 존재하면 Hello와 함께 출력해준다.
그리고 addslashes를 거친 후 해당 pw를 처리한 결과가 실제 admin의 pw와 같으면 문제가 풀린다.
blind sql injection을 해야한다.
여기서 필터링 것을 보면 regex와 like가 필터링된 것을 볼 수 있다.
like는 '%가%'처럼 검색할 수 있는 것이란걸 이미 알고 있다.
regex는 검색 결과 like처럼 정규식으로 검색할 수 있는 기능이다.
왜 정규식을 막았을까? 라는 의문을 가지며 문제풀이를 시작하였다.
가장 간단하게 이전처럼 시작하였다.
pw=' or ascii(substr(pw,1,1))>0#
을 넣어주었다.
하지만 예상처럼 Hello ID 부분이 뜨지 않았다.
뭘까? 란 생각에 -200을 했는데 Hello Admin이 떴다. 뭐지??
범위를 줄였더니 >0에서는 안되지만 >-1에서는 된다.
pw의 첫번째자리가 ascii코드표로 0인가보다.
이는 NUL값이다.
길이 확인시 40이라고 나와서 확인해본 결과 첫번째부터 모두 NUL값으로 나왔다. 이상해서 생각해보다가 비밀번호가 한글일 수도 있지 않을까란 생각을 하였다.
찾아본 결과 확장 ASCII 코드가 있었다. 이는 128번부터 255번까지 존재한다.
이를 위해서는 ascii() 대신 ord()를 이용해야한다.
pw='' or ord(substr(pw,1,1))=184#'
그 결과 첫번째 글자의 ascii 코드는 184임을 확인하였다.
그 이후 efficient blind sql injection 코드를 이용해서 답을 구하려했지만 디코딩이 복잡하여 그냥 숫자로 출력되게 한 뒤 온라인 ASCII Converter를 이용하였다.
답은 ¸ùÅ°ÆÐÄ¡¤»
'Solve Problem > LOS' 카테고리의 다른 글
[LOS] 21번 문제 (0) | 2018.02.22 |
---|---|
[LOS] 20번 문제 (0) | 2018.02.14 |
[LOS] 18번 문제 (0) | 2018.02.10 |
[LOS] 17번 문제 (0) | 2018.02.08 |
[LOS] 16번 문제 (0) | 2018.02.08 |