Problem Problem Analysis 이번 문제는 이전에 풀었던 blind injection 문제에 약간의 변화와 조건을 곁들인 문제다. 조건은 OR과 AND 사용 금지인데 우회 법은 이전에 설명했으므로 빠르게 exploit 하겠다. Exploit 우선 blind injection이기 때문에 python을 쓰면 손쉽게 풀이가 가능하다. import requests url = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php" cookie = {'PHPSESSID':'ec8s5fjt73b18gp3r1ns2g2e7t'} len = 0 while True: query = f"1\' || id=\'admin\' && length..
전체 글
Problem Problem Analysis 이번 문제는 앞의 문제와 비슷한 문제로 조건이 바뀐 게 끝이다. 조건은 OR과 AND 사용 금지. 하지만. || 혹은 &&로 OR과 AND를 대체할 수 있어 매우 간단하다. 참고로 & 또한 URL에서 특수한 기능을 하기 때문에 encoding 해주어야 한다. (&의 hex 값은 26) Exploit ?pw=1' || id='admin
Problem Problem Analysis 첫 번째 두 번째 문제와 비슷하지만 한 가지 중요한 조건이 있다. 바로 공백을 쓰지 못한다는 점. 하지만 매우 쉽게 벗어날 수 있는데 바로 공백 대신 %0a 혹은 ()를 사용하면 된다. %0a는 URL encoding에서 개행을 의미하는 것으로 공백 대신 사용하면 공백으로 취급해준다. 그래서 결국 공백 대신 ()을 써서 구분해주거나 %0a을 쓰면 끝 Exploit ?pw=1'OR%0aid='admin'%23 ?pw=1'OR(id='admin')%23
Problem Problem Analysis 이번엔 조금 특수한 문제다. 단순히 논리 오류가 아닌 blind injection 기법을 사용해야 한다. 문제를 보면 pw를 한번 받고 또 해당 pw를 따로 검사해서 제대로 값이 불려 오는지 검사한다. 즉, 알맞은 pw를 찾아야 문제가 풀리는 것이다. 그럼 이제 admin의 비밀번호를 찾아야한다. 비밀번호를 찾기 위해선 특수한 함수를 사용해야 하는데, 여러 함수들이 있다. 예를 들어, like, mid, left, substr 등이 있고 이 중에서 골라서 사용하면 된다. 이번 문제에서 사용할 substr은 다음과 같이 인자를 받는다. substr(해당 칼럼, 문자 위치, 문자 개수) 이 함수는 본래 문자열을 추출하기 위한 함수로 substr(pw, 1, 1)이..
Problem Problem Analysis 이번엔 약간의 조건이 생기기 시작했다. 싱글 쿼터, 더블 쿼터, ` 금지, pw가 아닌 no라는 특수한 숫자 부분 우선 싱글 쿼터와 더블 쿼터를 사용할 수 없어 id='admin'이라고 일러줄 수가 없다. 그렇다면 너무 돌아가지 말고 no값을 맞춰주면 되는게 아닐까? Exploit ?pw=-1 OR no=2 ?pw=-1 OR no=2 일부러 앞의 no에는 -1을 줘서 틀린 값을 주고 앞에 2를 주어 참이 되도록 하였다.
Problem Problem Analysis 이전에 충분히 설명을 했으니 이제 쭉 진행해보겠다. 우선 이전 문제와 크게 다른 점은 없다. 달라진 점은 id가 admin인 값을 불러와야 한다는 점과 비밀번호 부분이 약간 달라졌다는 것. 우리는 이전에 사용한 구문에서 약간만 수정하면 된다. Exploit ?pw=1') OR id='admin'%23 ?pw=1') OR id='admin'%23 md5부분을 ')으로 임의로 끝낸 다음 id='admin'을 주어 admin이 있다면 불러오는 식으로 바꿨다.
Problem Problem Analysis 가장 기본적인 문제로 아무 결과나 조회가 되면 solve인 문제다. 보통은 id와 pw가 전부 맞아야 결과를 불러오지만 기본적인 쿼리문 자체를 조작해버려 다른 값을 가져오게 할 수 있다. 예를 들어 select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}' 이 구문에서 parameter에서 id 값과 pw 값이 각각에 해당하는 위치에 들어가게 되는데 pw 위치에 싱글 쿼터를 입력하게 된다면 어떻게 될까? 해당 sql 구문을 끝내고 또 입력이 가능한 것이다. 예를 들어 id에는 admin pw에는 1'을 입력하면 select id from prob_gremlin where id='admin' ..