[websec.fr] easy - Level 15
2021. 9. 12. 22:54
워게임/Websec.fr
level 15에 들어가기 앞서 RCE를 이용(?)해서 flag 값을 도출 할 수 있을 것 같은 힌트가 보였다.. 우리가 값을 넣으면 create_function -> $fun -> $success 를 출력하게 된다. 우리는 create_function이라는 함수를 봐야한다. create_function은 매개변수를 전달받아 익명 함수를 생성하는 함수이다. 이때 잘못된 방법으로 사용할 시 RCE 취약점이 발생하게 되는데 위 소스코드 처럼 두번째 인자에 임의적인 값을 주입하여 원하는 코드를 실행시킬 수 있게된다. 위와 같이 return -1;} print_r($flag); /* 값을 넣으면 flag 값을 얻을 수 있었다. 참조 https://blog.jhyeon.dev/2020/05/15/function-..
[websec.fr] easy - Level 13
2021. 9. 12. 00:24
워게임/Websec.fr
첫 화면에 1,2,3 디폴트로 값이 들어가 있는것을 확인하고 go를 눌러 결과 값을 확인해보았다. 각 id에 해당하는 값과 권한을 출력해주는 것 같다. 소스코드를 보니 가장 먼저 쿼리문이 보인다. SELECT user_id, user_privileges, user_name FROM users WHERE (user_id in (".$selector.")); 보니 tmp 값이 implode 되어 쿼리 문에 들어가서 출력되는것 같다. 여기서 보아야 할 포인트는 tmp값이 1미만일 경우 unset 함수를 호출 한다는 것이다. 그러면서 count값이 줄어들면서 반복하는데 그러다보면 배열 끝에 있는 일부 요소 체크하지 않게 되는점을 이용한다. 일단 user_password에 flag 값이 있을 것이라고 추측하여 쿼..
[websec.fr] easy - Level 11
2021. 8. 22. 23:54
워게임/Websec.fr
11번은 UNION 또는 JOIN이 블랙리스트로 필터링이 되어 있다고 설명되어져 있다. 또한 User ID 입력 폼에 숫자 이외의 문자는 입력이 방지되어 있는 듯 하다. 바로 소스보기를 통해서 확인해보자. 보면 위에서 말한것처럼 id 값을 is_numeric 함수에서 2미만의 값과 숫자만 입력할 수 있게 설정되어 있다. 그리고 아래 내용을 보면 SQLite을 사용하고 있으며, query문에 자세히 보면 SELECT id, username FROM $table 값이 들어가는 것을 볼 수 있으니 우리는 $table에 값을 넣어 flag 값을 얻으면 된다. 바로 넣어보자. 그러면 이렇게 flag 값을 얻을 수 있었다.
[websec.fr] babysteps - Level 04
2021. 7. 18. 20:13
워게임/Websec.fr
level 4번 시작! 바로 소스보기를 통해 확인.. 첫번째 소스코드를 처음부터 살펴보자. 2가지 내용을 확인할 수 있었다. 1.SQL이란 객체를 생성하고 connect 함수를 실행시키고 query에 쿼리문이 담겨있다. 2.leet_hax0r 쿠키값을 base63로 디코딩을 한 후 unserialize를 하는 것을 확인 할 수 있다. 두번째 소스코드를 보면 첫번째 소스코드에서 알 수 있었던 connect 함수를 여기서 호출하는것을 확인할 수 있다. 그리고 마지막 __destruct() 함수를 볼 필요가 있다. __destruct() 함수는 소멸자로서 특정 객체를 참조 후 또는 객체가 명시적으로 파기된 후 메소드를 호출한다. 정리하면 SQL 객체가 실행되고 파기된 후 destruct()함수가 호출되면 us..
[websec.fr] easy - Level 08
2021. 7. 14. 23:17
워게임/Websec.fr
level 8 같은 경우는 GIF 파일만 올릴 수 있으며 우회를 하여 flag값을 얻는 문제인거 같다. 소스보기를 통해 살펴보니 업로드 파일 크기, 파일 확장자 체크를 하는듯 보인다. 이를 통해서 flag 값을 얻을려면 아마 웹쉘같은 파일을 업로드 시켜보면 flag 값에 대한 힌트를 받을 수 있지 않을까 라는 생각으로 접근을 하였다. 그러나, 웹쉘 파일을 통해서 시스템 명령어를 넣어서 업로드 시켜보았지만 먹히지 않았다.. 그러던 중 소스코드에서 php를 사용하는 것을 보고 php 명령어를 찾아보는 중에 scandir함수를 발견했다. scandir() 함수는 지정된 디렉토리의 파일 및 디렉토리의 배열을 반환하는 함수이다. 이를 바탕으로 문제를 풀어보자! 문제를 푸는데 사용하는 명령어는 아래와 같다. 짜란!..
[websec.fr] easy - Level 02
2021. 7. 11. 21:05
워게임/Websec.fr
level 02번의 설명을 보면 이전의 비슷한 문제라고 설명이 나와있다. (믿지 못한다면 확인해 보라고 한다..) 더해서 preg_replace() 함수를 통해서 union, order, select, from, group, by를 필터링하고 있다 설명한다. 소스보기를 통해서 살펴본 결과 level 01과 동일하다 물론 union, order, select, from, group, by는 NULL(공백) 필터링 되는 것을 확인 할 수 있었다. 실제로 웹 진단을 하다보면 문자를 공백 치환하는 경우를 많이 볼 수 있는데 조치가 미흡할 경우 우회할 수 있는 방법이 많이 있다. 예를들면 태그 중 script를 공백으로 치환하는 경우인데, 조치 미흡으로 인해 를 사용하게 되면 가운데 script가 공백으로 치환되..
[websec.fr] babysteps - Level 25
2021. 7. 7. 00:17
워게임/Websec.fr
3번째 시도,, level 25 문제 바로 소스코드 확인들어가자.. 코드를 보면 REQUEST_URI를 parse_url함수를 통해서 parse 한 뒤 qurey에 flag 값이 들어가면 die메시지가 출력된다. 각 함수의 특징들을 살펴보자. 1.parse_url()은 host, port, user, path, query 등의 값을 반환하는 함수 2.parse_str()은 이름=값(query)의 형태로 만들어주는 함수 3.stripos()는 문자열을 찾는 함수 자세한 내용은 아래 참고 url을 통해서 확인 가능! 정상적으로 parse_url 함수가 사용 될 경우 query문에 flag 문자열이 들어가게 되므로 die메시지가 출력되게 된다. URL: /index.php?page=flag Array ( [p..
[websec.fr] babysteps - Level 17
2021. 7. 4. 21:58
워게임/Websec.fr
Level 17을 보면 flag값을 추측 할 수 있냐? 라는 질문과 함께 소스코드를 확인하라고 나와있다. 클릭해보자. 소스를 확인해 보니 POST로 보내준 flag 값과 $flag 값이 일치할 경우 flag 값을 출력해주고 틀리면 "Invalid flag, sorry."라는 문구를 출력해 주는 것을 확인할 수 있다. 이때 flag값을 비교하는 strcasecmp에서 발생하는 취약점(비교 할때 '=='를 사용)을 이용해서 flag를 찾을 수 있었다. strcasecmp에서는 값을 비교 할때 strcasecmp($a, $b)를 실행하게 되면 $a가 작을때 음수, $b가 작을때 양수, $a와 $b가 같으면 0이 반환된다. 즉, 0을 리턴할 수 있는 방법이 있다면 flag 값을 얻을 수 있다는 의미이다. 0을 ..
[websec.fr] babysteps - Level 01
2021. 7. 3. 22:26
워게임/Websec.fr
Level 01을 보면 user ID로 username을 보는데 사용되고 db에서 username을 반환한다고 설명되어 있다. This application -> source를 통해서 SQLite3를 사용한다는 정보와 쿼리문이 보인다. ($injection을 통한 힌트로 인젝션을 진행해보자.) 1. 1 union select 1,2를 활용해서 컬럼 수를 확인해 본다. 진행 중 3부터 오류가 나는 것을 확인하고 컬럼 수가 2개인 것을 확인 **참고 SQLite 명령어 설명 sqlite_master information_schema(tables,columns) sql 컬럼 정보 2. 컬럼 명을 확인하기 위해서 1 union select 1, sql from sqlite_master 사용 위와 같이 테이블 정..