본문 바로가기

Write Up/los

(10)
los skeleton[10번] 문제다. 문제풀이 조건이 id는 admin이어야 풀린다. if($result['id'] == 'admin') solve("skeleton"); 현재 id를 guest로 설정한 것을 무력하 시킨 뒤 admin으로 다시 설정해주면 된다. 쿼리를 짜주면 ?pw=' or id='admin'이고 뒤에있는 and 1=0를 주석으로 무력화 시켜야 한다. ?pw=' or id='admin'%23이걸 보내주면 풀린다. 풀린다.
los vampire[9번] 문제다. 이번 문제풀이의 조건도 id가 admin이어야 한다. if($result['id'] == 'admin') solve("vampire"); $_GET[id] = str_replace("admin","",$_GET[id]); 이 구문을 보면 admin을 만나면 없애린다. 그렇다면 잘 우회를 해줘야 하는데 admin안에 admin을 넣어 admin을 없애면 admin이 나오게 한다. (쓰면서 왜이렇게 웃기냨ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ) aadmindmin이렇게 하면 가운데 admin이 삭제되면서 admin이 완성된다. ?id=aadmindmin
los troll[8번] 문제다. if($result['id'] == 'admin') solve("troll"); 우선 문제풀이 조건을 보면 id가 admin이어야 한다. 이번에는 admin을 필터링한다. if(preg_match("/admin/", $_GET[id])) exit("HeHe"); 이 구문으로 알 수 있다. 그럼 어떻게 우회해야 할까? 음... i표시가 없는 것을 보니 대소문자를 구별한다. 그럼 ADMIN으로 우회을 할 수 있을 것이다.
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..