본문 바로가기

분류 전체보기

(15)
los orge[7번] 문제다. 문제를 보면 if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); or과 and를 필터링 했다. 우회법은 이전 라업에서 말했듯이 or -> || and -> && 이렇게 해주면 된다. 문제풀이 조건을 보자면 if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); pw의 값을 맞춰야한다. 즉, blind sqli를 해줘야한다. ?pw=' || length(pw)=~~~%23을 이용해 pw의 길이를 알아낸다. 여기서 ~~~는 대충 숫자로 부르트 포싱을 해준다. pw의 길이는 8이다. 이제 substr()을 이용해서 pw의 각 자릿수를 파싱해와서 부르트 포싱을 해준다. ?pw=' || subs..
los darkelf[6번] 문제다. if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 이번에는 or, and가 필터링 되어있다. 어떻게 우회할 것인지 생각을 해보면 아래처럼 우회를 할 수 있다. and -> && or -> || 그럼 쿼리를 짜보자. ?pw=' || id='admin 짠 쿼리를 보내주자. 클리어다.
los wolfman[5번] 문제다. if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 이 부분에서 공백을 필터링 하는 것을 볼 수 있다. 문제 풀이 조건은 id가 admin이어야 한다. 조건을 만족시켜주기 위해서 ?pw=' or id='admin을 쿼리로 보내줘야 한다. 공백을 우회해야 하는데 %09로 우회가 가능하다. 그렇게 다시 쿼리를 짜면, ?pw='%09or%09id='admin이 된다. 이 쿼리를 보내주면 문제를 풀 수 있다.
los orc[4번] 문제다. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 이번문제의 문제풀이 조건은 admin의 pw를 맞춰야 한다. 그 말은 Blind SQL Ingection을 해야 한다. bsqli의 순서는 1. pw의 길이를 구한다. 2. pw의 각 자리를 파싱하여 brute force를 한다. 우선 pw의 길이를 구하는 쿼리문은 ?pw=' or length(pw)=~~~%23 이다. ~~~에는 숫자를 brute force 해주면 된다. length(pw)는 pw의 길이를 가져오는 함수다. 그렇게 손 브루트 포싱을 해서 pw의 길이가 8인 것을 알아냈다. (python requests 모듈을 사용해서 프로그램으로 제작해도 된다.) 그 다음에..
los goblin[3번] 문제다. 이번에는 id를 guest로 고정시켜뒀는데 문제풀이 조건이 id==admin이다. if($result['id'] == 'admin') solve("goblin"); 그렇다면 id='guest'를 무력화 시켜줘야한다. no에 1을 넣어주고 id를 admin으로 바꿔줬다. 근데 여기서 ' " `가 막혀있다. 그래서 char로 우회해주기로 했다. ?no=1 or id=char(97,100,109,105,110) 으으음... guest다. 왜 guest가 출력되는지 생각해보면 id=guest가 무력화되지 않았기 때문일것이다. 그 말은 즉 guest의 no가 1이라는 것이다. 그렇다면 guest의 no일 가능성이 거의 없는 숫자를 쿼리에 넣으면 id=guest가 무력화 될것이다. (사실 처음부터 2535..
los cobolt[2번] 2번입니다. 바로 시작하죠 으으음... 이번에는 if($result['id'] == 'admin') 을 만족시켜야 문제가 풀리는군요. pw는 md5로 해싱되어있습니다. 어떻게하면 해시를 뚫지 고민해보니 굳이 pw를 참으로 만들 필요가 없다는 것을 알았습니다. solve() 조건을 보면 id=admin이면 됩니다. pw는 상관 없다는 것이죠. 즉 ?id=admin'%23 을 쿼리에 넣어주면 뒤에 있는 pw구문이 주석처리 되면서 id가 admin이게 되고 문제가 풀립니다.
los gremlin[1번] 바로 시작하겠습니다. 문제입니다. 제가 php를 잘 몰라서 그냥 뇌피셜로 코드를 해석했습니다. preg_match()를 구글링 해보니 문자열을 찾는 함수라고 합니다. 즉 preg_match()안에 있는 문자열을 사용하면 No Hack이라고 종료되는 것을 볼 수 있습니다. 그 다음 id와 pw를 입력받습니다. 문제를 어떻게 풀 수 있을지 생각해보니 if($result['id']) solve("gremlin"); 이 if문이 보이더군요. id의 결과값이 참이면 된다는 것입니다. id='{$_GET[id]}' and pw='{$_GET[pw]}'"; id의 값을 정해주는 줄을 보니 and 연산자 때문에 입력받는 id와 pw의 값이 모두 참이여야 됩니다. ?id=1&pw=1 일단 이렇게 id와 pw에 아무값이나..