본문 바로가기

webkr54

webhacking.kr 9번 Webhacking.kr#9[Blind SQL Injection] 9번 문제를 열면 아래와 같은 화면을 볼 수 있다.우선 1, 2, 3을 눌러보았다. 아래와 같이 1을 누르면?no=1을 수행하고Apple이 나타난다. 2는?no=2이며Banana가 나타난다. 3은 마찬가지로?no=3 이며Secret이 나타난다. 1, 2, 3 이외의 숫자를 입력하면 어떻게 되는지 알기 위해0을 입력해보면 아래와 같이 첫 화면에서 봤던 페이지가 나온다. 이 점을 이용하면 Blind SQL Injection이 가능할 것으로 보인다.위의 페이지에서 힌트로 주어진 컬럼인 id와 no를 보면 no가 1일 때의 id는 Apple일 것으로 추정된다. 따라서 먼저 id의 길이가 5인지 확인해보면 아래와 같이 맞다는 것을 알 수 있다. 참.. 2019. 1. 29.
webhacking.kr 3번 3번 문제를 열면 아래와 같은 화면을 볼 수 있다. 우선 퍼즐(네모로직)을 풀면 아래와 같이 된다. 그리고 gogo 버튼을 누르면 name을 입력하는 창이 나온다. name을 입력하니 아래와 같이 name, answer, ip가 입력된 것을 볼 수 있다. 이 때, 위의 결과 페이지로 갈 때 우리가 입력한 name 뿐 아니라hidden 으로 answer가 전달되는 것을 볼 수 있다. 따라서 이 answer를 true로 만들기 위해 원래 값 뒤에||1 을 입력하였다. 그 결과, answer에 new_sql_injection이 나오는 것을 볼 수 있다. 이 값으로 인증하면 clear할 수 있다. 2019. 1. 29.
webhacking.kr 2번 [Cookie-Based SQL Injection, Blind SQL Injection] 2번 문제를 열면 아래와 같은 화면을 볼 수 있다. 페이지 곳곳을 둘러 보면 패스워드를 입력받는 곳을 두 군데 볼 수 있다.첫 번째는 Board이다. 두 번째는 아래와 같은 admin 페이지이다. 이 때 패스워드 창 자체에서는 SQL Injection이 힘들어서 페이지 내에서 다른 요소들을 찾아야 한다. 이 때, 쿠키를 보면 다른 문제들과 달리 time이라는 쿠키 값이 있는 것을 볼 수 있다. 또한 페이지 내의 주석을 보면 시간이 나타나 있는 것을 볼 수 있다. 쿠키 값과 관련이 있는 듯하여 time을 true로 바꾸어 보았다. 그 결과, 2070-01-01 09:00:01 이 나타난다. false일 때 또한 확인해.. 2019. 1. 29.
webhacking.kr 8번 8번 문제를 열면 아래와 같은 화면을 볼 수 있다. 아래는 index.phps 코드이다. 우선 clear하기 위해서는 admin이어야한다.이 때, insert하는 쿼리를 볼 수 있는데 values를 이용하기 때문에 이 점을 활용하면 id를 admin으로 만들 수 있을 듯하다. 따라서 먼저 Burp Suite를 이용하여 User-Agent를 aaa로 변경하였다. 그 결과, hi guest가 출력된 것을 볼 수 있다.Insert가 정상적으로 수행된 것으로 보인다. 이제 admin을 넣을 것이다. insert into lv0(agent, ip, id)values(‘a’, ‘1.1.1.1’, ‘admin’), (‘b’, ‘$ip’, ‘guest’)처럼 동작하게 하기 위해 a’, ‘1.1.1.1’, ‘admin’.. 2019. 1. 29.
webhacking.kr 35번 [SQL Injection] 35번 문제를 보면 아래와 같이 phone을 입력받고 있다. 아래는 index.phps 코드이다. clear하기 위해서는 admin의 ip와 $_SERVER[REMOTE_ADDR]이 일치해야한다.이 때, 쿼리문을 보면 insert into를 수행하는 것을 볼 수 있다.우리가 입력한 값인 phone은 values()의 마지막에 들어가는 것을 볼 수 있다. 이 점을 이용하여 id는 admim, ip는 본인의 ip로 설정하면 될 것으로 보인다. 이 것은 mysql에서 insert into - values - 를 수행할 때 여러개의 value_list를 허용하기 때문에 가능하다. 예를 들면,insert into challenge35_listvalues (‘sand’, ‘0.0.0.0.. 2019. 1. 29.
webhacking.kr 32번 32번 문제를 보면 아래와 같은 랭킹 페이지를 볼 수 있다. NAME을 눌러보면 HIT이 1 증가한 것을 볼 수 있다. 가장 아래에 있는 join 버튼을 누르면 목록에 id가 추가된다. 그리고 해당 id를 클릭하면 마찬가지로 HIT이 1 증가한 것을 볼 수 있다. 이 때, 다시 클릭하면 no라는 메시지가 나오는 것을 볼 수 있다. 중복으로 누르는 것을 막아놓은 듯하여 쿠키 값을 보니vote_check 항목에 ok라는 값이 들어가 있는 것을 볼 수 있다. 따라서 이 쿠키 값을 지워 HIT을 100으로 만들면 clear할 수 있을 것으로 보인다.이를 자동화하기 위해 python을 이용하였다.Params에 PHPSESSID 쿠키 값만 전달하고 vote_check 를 전달하지 않았다. 그 결과 clear할 수 .. 2019. 1. 29.
webhacking.kr 48번 [Command Injection] 48번 문제를 보면 아래와 같은 화면을 볼 수 있다.먼저 테스트로 파일 a와 abcd라는 메시지를 send하였다. 그 결과, 아래와 같은 창을 볼 수 있다. 이 때 delete를 지원하는 것을 볼 수 있다.파일을 delete한다면, rm [file_name]을 이용하지 않을까 하고 추측할 수 있다. 만약 그렇다면, ;을 이용하여 원하는 명령어를 수행할 수도 있을 것이다.예를 들면, rm ; ls이면 rm을 수행한 뒤 ls를 수행한다. 따라서 ;ls라는 이름의 파일과 abcd라는 메시지를 Send하였다. 아래와 같이 정상적으로 Send 되었다. 그 뒤 Delete를 누르면 아래와 같이 ls의 결과를 볼 수 있다.예상대로 delete가 rm 명령어를 수행하도록 구현되어 있.. 2019. 1. 29.
webhacking.kr 41번 41번 문제를 보면 아래와 같이 파일을 입력받는다. 아래는 index.phps 코드이다. 코드를 보면, 파일을 입력 받은 뒤 hidden_dir 폴더에 필터링을 거친 파일 이름으로 파일을 생성한 뒤 pw를 write한다. 따라서 hidden_dir의 이름을 알 수 있으면 해당 파일을 열어 pw를 읽을 수 있을 듯하다. 이 때, 입력한 파일 이름이 필터링 되는 것을 이용하여파일 이름이 공백이 될 경우를 시도해 보았다. 입력 시에 공백을 입력하지는 않았지만 필터링 된 값에 대한 검증이 없는 경우 문제가 될 수 있다. 공백으로 replace되는 >를 이름으로 하는 파일을 업로드 하였다.그 결과 Warning 메세지를 통해 hidden_dir을 알 수 있다. 이제 해당 경로를 통해 pw를 읽기 위해 임의의 파일.. 2019. 1. 29.
webhacking.kr 51번 51번 문제를 보면 아래와 같은 admin page를 볼 수 있다. index.phps를 보면 아래와 같은 코드가 있다. solve()를 호출하기 위해서는 query문 결과의 id가 admin이어야 한다.이에 주석을 시도해보았으나 Wrong이 출력된다. 따라서 다른 방법으로 풀어야 하는데,md5()에서 raw_output을 true로 준 것을 알 수 있다. php 메뉴얼을 보면 md5의 두번째 인자인 raw_output은 default로 false이다. True로 설정할 경우 raw binary format으로 리턴된다. 이 점을 이용하여 password를 true로 만들면 clear할 수 있다. 출처: http://php.net/manual/en/function.md5.php pw=’$input_pw’.. 2019. 1. 29.