김승현
[Lord Of SQLInjection] orc 4번 문제 write up 본문
문제
문제는 이렇게 되어 있고 그냥 admin이 id로 입력되어 있고 pw에만 쿼리를 입력해서
sqli를 성공시키는 문제인 것 같다.
쿼리문을 확인해보면
select id from prob_orc where id='admin' and pw='{$_GET[pw]}'
이렇게 생겼다. pw에 적당한 값을 입력해보자.
이런 식으로 id가 admin이면 되게 했는데 Hello admin는 떴지만 orc clear! 가 뜨지 않았다.
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
자세히 코드를 보면 위의 내용을 볼 수 있는데 result의 pw가 파라미터인 pw와 동일해야지 문제가 풀리는 방식이다.
blind sqli로 비밀번호를 한 자리 한 자리씩 알아보자.
?pw=' or id='admin' and length(pw)='[정수]
위의 쿼리문을 입력하면 pw의 길이가 우리가 입력한 정수가 일치할 때만 Hello admin을 출력할 것이다. 시도해보자.
7을 입력하자 아무 일도 없지만
8을 입력하니까 Hello admin이 출력된 걸 봐선 admin의 pw 길이가 8자리인 걸 알 수 있다. ascii와 substr을 이용해서
admin의 password를 구해보자.
?pw=' or id='admin' and ascii(substr(pw, 1, 1))<50 %23
위의 코드를 주소에 입력하면 pw의 첫 번째 문자가 ascii code로 50보다 작은지, 즉 2보다 작은 값인지 찾는 것이다.
위의 코드를 조금씩 바꿔가면서 하다보면 찾을 수 있다.
hello admin이 뜨는 걸로 봐선 50보다 작은 값인 걸 알 수 있다. 더 해보자.
50에서 25로 해보고 25에서 37정도로 가보고 이런 식으로 줄이다 보면 48임을 알 수 있다. 48은 0을 의미한다.
두 번째 자리 pw는 57 미만에선 뜨지 않는 걸 보니 57, 즉 9를 의미한다. 이렇게 8자리 password를 하나하나
찾아보면 095a9852라는 pw가 나온다. ?pw=095a9852를 입력해보자.
'Web > Lord Of Sql' 카테고리의 다른 글
[Lord Of SQLInjection] darkelf 6번 문제 write up (0) | 2023.03.12 |
---|---|
[Lord Of SQLInjection] wolfman 5번 문제 write up (0) | 2023.03.12 |
[Lord Of SQLInjection] goblin 3번 문제 write up (0) | 2023.03.05 |
[Lord Of SQLInjection] cobolt 2번 문제 write up (0) | 2023.03.05 |
[Lord Of SQLInjection] gremlin 1번 문제 write up (0) | 2023.03.04 |