본문 바로가기
728x90

Web89

Webhacking.kr Challenge old-40 문제 풀이 이번 문제는 sql injection인걸 바로 알 수 있다. guest 계정의 no, id , pw가 기본값으로 입력되어 있어 쉽게 로그인할 수 있다.아마 admin계정으로 로그인하는게 아닌가 예상된다. no, id ,pw 모두 get으로 전송되고 있고 3개의 파라미터 중 어느 파라미터를 이용할지 확인해봐야 한다... 2024. 3. 30.
Webhacking.kr Challenge old-44 문제 풀이 이번 문제는 이름을 적는 칸이 있고 이름을 입력 시 hello! (입력값)을 출력해 준다. 소스코드를 보면 id값을 받아 5번째 자리까지만 system함수를 이용해 출력해 준다. 주석으로 나는 그냥 실행하기만 하면 된다는 글이 쓰여있는데 여기서 우리는 system함수를 이용해야 된다는 걸 알 수 있다. 바로 PHP code injection인데 PHP에서 exec() 함수나 eval() 함수, system함수를 사용한 경우 세미콜론(;)을 사용하여 다른 함수를 실행할 수 있다는 취약점이다. system함수에서는 쉘명령어를 사용할 수 있는데 우선 flag값이 있는 곳이 어디인지 알아야 하므로 ls를 이용해 현재 디렉토리의 파일 목록을 출력해 봤다. 그러자 flag_29cbb98dafb4e471117fec4.. 2024. 3. 26.
Webhacking.kr Challenge old-35 문제 풀이 이번 문제는 핸드폰 번호를 적는 칸이 있다. 소스코드를 보면 id와 phone을 get파라미터로 받고 있고 phone은 *, /, =, select, -, #, ;이 필터링되어 있다. id는 길이가 5로 제한되어 있으며 admin이 필터링되어 있다. insert문을 이용해 우리가 입력한 id, 자신의 ip, phone을 db에 넣어주고 있다. 그래서 id가 admin이고 ip가 자신의 ip와 같으면 문제가 풀리게 된다. 이번 문제는 우리가 많이 풀어봤던 유형으로 https://jh-hack.tistory.com/160 Webhacking.kr Challenge old-8 문제 풀이 이번 문제는 id를 출력해주고 있다. 코드를 보면 agent라는 변수에 HTTP_USER_AGENT라는 전역변수 값을 넣어주.. 2024. 3. 24.
Webhacking.kr Challenge RPG1 문제 풀이 이번 문제는 신기하게 게임형식으로 이루어져 있다. 게임을 시작하면 캐릭터를 움직일 수 있고 상자를 먹어야지 flag를 알려주는 것 같다. 하지만 물로 막혀있는 부분은 캐릭터가 지나가지 못해 상자까지 이동할 수 없다. 그래서 생각한 게 1. 캐릭터의 위치를 위로 옮긴다. 2. 상자의 위치를 위로 옮기다. 3. 물을 없앤다. 3가지 방법을 생각하고 코드를 봤다. 문제에는 여러 개의 js파일이 보이고 게임 구성 코드가 적혀있다. 하지만 코드가 너무 길어 캐릭터나 상자의 위치를 정의하는 코드를 찾기 쉽지 않았다. 그래서 다른 방법을 찾기 위해 네트워크를 봤더니 다양한 데이터들을 json형태로 불러오지만 맵이 로드될 때 Map001.json파일이 로드되는 걸 확인했다. 많은 데이터중에 "data"라는 키값의 데이.. 2024. 3. 22.
Webhacking.kr Challenge old-50 문제 풀이 이번 문제는 45번 문제와 유사한 문제이다. 코드를 보면 id, pw 둘 다 addslashes함수로 ', ", \, null을 필터링하고 foreach를 이용해 id와 pw 둘 다 from, pw, (, ), %, =, , 공백을 필터링하고 있다. 또한, id만 union을 추가로 필터링하고 있다. 쿼리 출력값이 lv=3이면 문제는 풀린다. 우선 id쪽을 공략해 보자 addslashes는 멀티바이트를 이용하여 우회가 가능하고 id = 123%a1'%0bor%0blv%0blike%0b2%23&pw=123을 입력해 보면 (%0b -> 공백 우회) level : 2가 출력되는 걸 볼 수 있다. 그럼 lv=3을 넣으면 바로 풀리지 않을까? 3을 넣으니 Wrong이 출력되는걸 볼 수 있다. 그러면 db에 lv가.. 2024. 3. 20.
Webhacking.kr Challenge old-8 문제 풀이 이번 문제는 id를 출력해주고 있다. 코드를 보면 agent라는 변수에 HTTP_USER_AGENT라는 전역변수 값을 넣어주고 ip변수에는 REMOTE_ADDR라는 전역변수 값을 넣어준다. REMOTE_ADDR은 많이 다뤄봤듯이 ip의 정보를 담고 있는 변수고 HTTP_USER_AGENT는 User-Agent헤더값을 담고 있는 변수다. 이 HTTP_USER_AGENT값을 통해 id를 검색하고 id가 admin일 경우 문제가 풀린다. 또한 id반환값이 없을땐 agent와 ip변수를 이용해 guest라는 id로 컬럼을 추가해 주고 저장된 id값이 70개가 넘으면 전부 삭제하고 다시 저장한다. 취약점이 발생하는 부분은 자연스럽게 컬럼을 추가하는 부분에서 일어날 것이라 예상되고 agent와 ip변수 중 우리가.. 2024. 3. 19.
Webhacking.kr Challenge alien golf 문제 풀이 이번 문제는 쿼리문이 2개로 이루어져 있다. 이런 문제 형태를 본 적이 있는데 블로그에 올려놨던 https://jh-hack.tistory.com/42 admin O 쿼리 1번의 출력값이 id='admin'이면 sandbox2를 출력하고 종료 -> admin X 쿼리 2번의 출력값이 id='admin'이면 sandbox를 출력하고 종료 -> admin X 쿼리 2번의 출력값이 id='admin'이면 no의 길이가 140byte보다 작으면 문제 해결. -> admin O admin값만 변경하면 되므로 0x61646d696e 이 부분을 CONCAT(char(97+round(rand())),0x646d696e)으로 써주면 rand함수는 0~1 사이 랜덤값을 생성해 주고 round함수는 반올림 함수로 round.. 2024. 3. 18.
Webhacking.kr Challenge old-9 문제 풀이 문제에 접속해 보면 1, 2, 3이 있고 각 번호를 누르면 url을 보면 no파라미터로 번호를 받고 있고 no=3을 들어갔을 때 컬럼과 3번의 id가 password라고 출력되는 걸 확인할 수 있다. 우선 코드가 공개되어 있지 않지만 sql injection인 게 유력하므로 쿼리문을 유추해 보면 mysqli_fetch_array(mysqli_query($db,"select id, no from chall9 where no=? ”));일것으로 예상된다. sql injection 시도해 본 결과 필터링 목록 : union, select, ‘, =, -,+,%, , char, PROCEDURE, or, and, ||, 공백을 확인했고 더 많은 필터링이 존재할 것이다. 처음에 컬럼값을 확인해야 하므로 union.. 2024. 3. 15.
Webhacking.kr Challenge old-45 문제 풀이 sql injection 문제이고 코드를 보면 id와 pw 둘 다 addslashes함수와 admin, select, limit, pw, =, 가 필터링되어 있으며 쿼리 출력값이 id=admin일 때 문제가 풀린다. 이 문제는 보자마자 멀티바이트 문제인걸 알 수 있다. $_GET['id'] = mb_convert_encoding($_GET['id'],'utf-8','euc-kr'); id만 euc-kr에서 utf-8로 인코딩하는 코드가 있는데 addslases는 이렇게 멀티바이트를 사용하는 언어로 인코딩 될 때 우회할 수 있다. 멀티바이트란? - 아스키 문자 코드에다가 다른 문자(2byte)들을 포함한 문자 집합이다. 어떤 문자는 1byte이고, 어떤 문자는 2byte이다. 예를 들어 우리가 싱글쿼터('.. 2024. 3. 14.
Webhacking.kr Challenge old-4 문제 풀이 이번 문제는 암호화된 문자열이 출력되고 password 제출칸이 존재한다. 코드를 보면 brute force 방지용 sleep함수가 있고 10000000~99999999의 랜덤 한 숫자와 "salt_for_you" 문자열이 hash라는 변수에 초기화되고 그 값은 $_SESSION['chall4']에도 초기화된다. 그리고 hash값을 sha1으로 500번 암호화를 하여 출력된 값이 문제에서 나타난 문자열이다. 문제는 우리가 입력한 password값과 $_SESSION['chall4'] 즉, 초기 hash값과 같으면 문제가 풀린다. 그러면 우리는 문제에 나타나는 문자열을 500번 복호화하여야 되는데 sha1은 단방향 암호화로 복호하가 불가능하다. 처음에는 파이썬 코드로 암호화된 hash를 계속 출력하여 문제.. 2024. 3. 7.
728x90