Webhacking.kr Challenge 7 풀이. 첫 화면이다. auth를 눌렀더니 아래와 같다.url을 보면 val=1라는 값이 전달되고 있다. 일단 소스 보기를 누른다. 별 거 없고, admin mode는 var 값이 2라는 사실과 index.phps를 볼 수 있다는 것을 알 수 있다.일단 var=2를 입력. 위와 같은 화면이 등장. 그리고 index.phps를 봐본다. 일단 db에는 val=2가 존재하지 않는 사실과 union을 이용하라는 말이 있다.union은 일단 간단히 말해 둘 이상의 쿼리를 하나의 결과로 출력해 사용하는 명령어. val이라는 변수를 get으로 받고, 그 값을 go라는 변수에 집어넣고 있다.
# Related site issues
Webhacking.kr Challenge 5 풀이. Login을 누르고 임의로 id랑 password를 쳤는데 위와 같은 메시지가 등장한다. Join을 누르니 위와 같이 Access Denied이라는 문구가 등장한다.일단 소스를 본다. script 안쪽을 보면 function no ==> Access_Denied가 나오는 것은 아까 눈으로 확인한 부분이고. function move 부분을 보면 mem/ 디렉터리에 login.php라는 것이 있다. 그럼 아까 join.php라는 것도 있고 총 2개가 있는 것.즉 회원가입을 하고 admin으로 로그인을 해야 문제를 풀 수 있다는 뜻.일단 mem/ 디렉터리가 뭔지부터 확인. 확실하게 mem/ 디렉터리에 join.php, login.php가 있다는 것을 한 번..
Webhacking.kr Challenge 11 풀이. ???? 여태 문제들과는 다른 스타일이다.일단 소스를 보도록 해보겠다. 별 거 없다...보나 안 보나 별 차이 없다. 다시 원래 화면으로 돌아가겠다. 첫번째 줄에 있는 코드를 본다.ip 주소 뒤에 보면 Password라는 것은 유추할 수 있다. 물론 두번째 줄에 echo password is ????를 봐도 알 수 있다.Password를 위해 preg_match 함수를 사용하고 있다.원래 이렇게까지 자세히는 안 봤지만 preg_match는 정규식이 맞으면 true를 리턴하는 함수.$pat과 GET 메소드의 val 파라미터를 비교하는 것을 알 수 있다.if문 앞에 &pat가 있기에 패턴이 주어진 것을 알 수 있고, 패턴이 있다는 것은 정규식을 썼다는 ..
Webhacking.kr Challenge 47. 47번 문제를 클릭하면 나오는 화면.제목에 Mail Header Injection이라는 제목이 존재.서버 문제로 mail 함수를 주석처리 해놓았다는 말이 있는데 참고 정도만 한다.소스를 본다. 별다른 건 없고 index.phps를 보러간다. 일단 POST 방식으로 POST[email]을 입력 받는다.$header="From: $_POST[email]\r\n"; readme내용 => password is $pass.참조 => From $_POST[email]\r\n Mail Header Injection라는 건 header에 cc와 bcc 등이 취약.Cc ==>(Carbon Copy, 참조) 수신자 외 다른 사람에게도 수신.Bcc ==> (Blind Car..
21.Iron_golem 풀이. if(preg_match('/sleep|benchmark/i', $_GET[pw])) exit("HeHe");Sleep이랑 benchmark가 필터링 되어 있다.Sleep은 쿼리를 초 단위로 지연 시킬 수 O.Select * from [테이블명] WHERE SLEEP(5)=0; 참조 => https://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_sleep http://BENCHMARK(count,expr) https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_benchmark 즉, Sleep과 Benchmark..
20.Dragon 풀이. $query = "select id from prob_dragon where id='guest'# and pw = '{$_GET[pw]}'";쿼리를 보게 되면 id ='guest'# 주석이 달려있다.guest 뒤에 # 주석 처리가 있어서 무엇을 get으로 어떤 것을 보내든 다 무시된다.주석을 벗어나는 방법은 line feed(%0a) 이용.id가 guest로 되어있어서 거짓 조건을 줘서 없앤 다음에 id='admin'을 입력.%0a==> 줄바꿈 문자를 사용하여 우회.일단 pw의 값에 %0A 입력 ==> ?pw=%0A. 다음 줄로 넘어가게 되고, 그럼 이제 #, 주석으로 인해 쓰지 못했던 부분 입력.?pw='%0a and 0=1 || id='admin'%23 입력. Cf) 주석을 ..
19.Xavis 풀이. if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/regex|like/i',$_GET[pw])) exit("HeHe");정규표현식이랑 LIKE를 필터링하고 있다.다른 코드를 봐도 특별히 주의해야 할 코드는 없고, 즉 admin의 pw만 알면 되는 Blind sql injection 문제.일단 비밀번호 길이를 알아본다.pw=' or id='admin' and length(pw)=40%23 입력. 일단 pw의 길이가 40이라는 것을 알았다.일단 정말 길이가 40일지 아닐지 아니면 NULL을 통해 특정 값부터는 값이 없을 수 있기에 확인해본다.substr 사용. ?pw=%27||substr..
18.Nightmare 풀이. if(preg_match('/prob|_|\.|\(\)#|-/i',$_GET[pw])) exit("No Hack ~_~");if(strlen($_GET[pw])>6) exit("No Hack ~_~"); pw는 6자리까지 사용할 수 있다. 조건을 참으로만 만들어주면 문제를 해결할 수 있을 거 같다.#,-- 주석이 필터링 되어 있어서 ;%00 세미콜론 뒤에 NULL 넣어준 것. 일단 그냥 id값만 나오게 하면 된다.필터링 되어있는 #과 --를 빼고, 나머지 ;%00, /**/ 되는지 확인해본다. 일단 admin이 뜬 걸 보니 ;%00과 /**/은 쓸 수 있는 것으로 알 수 있다.초반에 pw의 길이는 최대 6자리니까 둘 다 해보도록 하겠다.SQL에서 문자열은 0이기에 어떤 문자..