본문 바로가기

Webhacking

[LOS] Level 6 darkelf 문제풀이 [힌트] 1. 주석처리 # : %23, ' : %27 2. or and 우회 or : || and : && if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 첫번 째 필터링 것들은, prob, _, ., (, ), 대소문자를 구분하지 않음, 필터링 하는 문자열을 사용 시 No Hack을 출력한다. if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 두번 째 필터링하는 것들은 and 와 or를 필터링하고 있다. 이를 대체하기 위해서는 &&와 ||를 사용할 수 있다. if($result['id'] == 'admin') solve("darkelf"); id값으로 admin이 들어오면 문제가 풀리는..
[LOS] Level 5 wolfman 문제풀이 [힌트] 1. 화이트스페이스(빈칸) 우회 - Tab : %09 - Line Feed(\n) : %0a - Carrage Return(\r) : %0d - 주석 : /**/ - 괄호 : () - 더하기 : + 2. 주석처리 방법 # : %23, ' : %27 if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 을 통해서 핑터링을 하고 있다. 필터링 하는 문자는 prob, _, ., (, )가 존재하며, 해당 문자를 입력 시 No Hack이 뜬다.(대소문자를 구분하지 않는다) 그 다음 줄을 보니 또 필터링을 진행하고 있다. if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 여기서 ..
[LOS] Level 4 Orc 문제풀이 [힌트] 1. 주석처리 # : %23, ' : %27 2. Blind SQL을 통해서 패스워드를 한글자 한글자 비교해서 찾아야 함 3. length()를 사용해 패스워드 길이를 찾아야 함 length() 사용법 : ex) length('pw') = 5 -> 반환 값 5일 경우 1(True), 아닐 경우 0(False) 4. ascii와 substr을 이용해서 각 자리마다 하나씩 패스워드 찾기 ascii : Ascii code 표를 이용해서 문자를 10진수로 변경할 수 있다. ex) ascii('a') = 97 -> 반환 값 : 1(True) substr : 문자열에서 일부 문자열을 추출한다. ex) substr('pw', 1, 1) -> 반환 값 : 'p' ex) substr('pw', 1, 2) -> ..
[LOS] Level 3 goblin 문제풀이 6번째 줄에 preg_match를 보면', ", `를 사용하지 못하게 설정되어 있다. 7번째 줄에 id값에 guest가 들어가있고, no의 값을 받는다. 10번째 줄에 id가 admin이면 문제가 해결된다. 따라서 싱글쿼터(')를 사용하지 않고 id값에 admin을 넘겨주는 것이 목적이다. no값에 1을 삽입해보니 Hello guest라고 출력되는 것을 보니 guest의 no값은 1인것 같다. ※운이 좋아서 guest의 no값이 1이라는 것을 알아서 id='guest' and no={$_GET[no]}부분을 무력화 시킬 수 있겠지만, no의 값을 모르는 상태에서 쿼리문을 확실하게 무력화시키기위해서는 의미없는 값을 집어넣는 것이 가장 좋다 MySQL의 문자열 함수 MySQL에서 SQL Injection을 ..
[LOS] Level 2 Cobolt 문제풀이 SQL Comment Attack SQL Query를 가장 쉽게 정복할 수 있는 방법중에 하나는 바로 주석을 이용하는 것이다. Mysql에서 많은 종류의 주석이 쓰이는데, 공격에 많이 쓰이는 주석을 말해보면, 1. -- (Mysql기반) 2. # (%23 : 오라클기반) 3. /* 4. // 5. %00(주석은 아니지만 쿼리를 바로 끝낼 수 있는 것 Null Byte 문자) 7번째 줄을 보면 gremlin 문제와 비슷해보이지만, pw부분에 md5()함수로 패스워드를 해싱하는 것을 볼 수 있다. 10번째 줄을 보면 id의 값이 admin이면, cobolt문제가 해결되는 것 같다. 즉, 패스워드 값을 확인하지 않는다는 것이다. gremlin문제와 같이 id값에 admin을 넣고 pw부분을 주석처리 해보도록하..
[LOS]Level1 gremlin 문제풀이 SQL Injection SQL Injection은 1998년에 phrack에 기법이 소개된 이후로 언제나 owasp 상위권을 차지하고 있으며, 수 많은 웹 사이트에서 수많은 개인정보를 유출하는데 사용된, 또는 사용되고 있는 기법이며, 웹 어플리케이션에서 일어나는 취약점 중 가장 강력한 취약점 중 하나이다. PHP, JSP등의 웹 프로그램에서 DB서버로 전달되는 Query를 특수문자(싱글쿼터, 백슬래쉬 등)을 이용해 공격하는 것을 말한다. php 소스를 확인해 보니 가장먼저 10번째 줄의 소스가 눈에 띈다. if($result['id']) solve("gramlin"); php 소스에 대해 자세히는 모르지만, 대충 추론해보자면, "Id의 결과가 있으면 gremlin 문제는 해결된다"라는 의미인 것 같다...