반응형

CTF & WarGame 70

[webhacking.kr] 30번 문제

550점인 30번 문제를 풀어보자. mysqli_connect는 MySQL, MariaDB에 연결하는 함수이다. 해당 함수를 사용하기 위해서는 값들이 필요한데 해당 소스코드에는 어떤 값들도 들어있지 않다. 이런 경우에는 default값을 가져와서 사용하게 되는데 기본 값을 아래의 php 매뉴얼 사이트에서 확인할 수 잇다. https://www.php.net/manual/en/ini.list.php mysqli_select_db 함수는 mysqli_connect 를 통해 연결된 객체가 선택하고 있는 DB를 다른 DB로 바꾸기 위해 사용된다. 사용법 mysqli_select_db(연결객체, DB명) 이제 문제를 풀기 위해서는 공인 IP로 접근이 가능한 개인 서버가 필요하다. - chall30 DB 만들기 -..

[webhacking.kr] 29번 문제

400점인 29번 문제를 풀어보자. 파일을 업로드 할 수 있어, 테스트로 파일을 업로드 해보았다. time, ip, file 명 순으로 입력되는 것을 볼 수 있다. Injection을 시도할 곳을 찾는 중에 filename에 컬럼 순서는 '파일이름' , 타임스탬프(INT), '아이피' 순으로 입력하면 공격이 가능한 것으로 보인다. 테스트 구문 : filname="test",1234, '내 ip')#" 이제 DB값을 가져오기 위한 코드를 작성해서 flag값을 가져오자. - DB명 출력 filename="test', 1234, '내 ip'),((SELECT database()), 1234, '내 ip')#" - 테이블명 출력 테이블 명이 2개 이상일 수 있기 때문에 group_concat 사용 filenam..

[webhacking.kr] 27번 문제

150점인 27번 문제를 풀어보자. id가 admin이면 문제가 풀리는 것으로 확인된다. 그러나 select, limit, 스페이스, =, 0x 등의 문자열이 필터링 되고 있다. admin의 no값이 2이므로 우리는 우회하여 no의 값을 2로 만들면 된다. '='가 필터링 되므로 like 를 사용하고, 공백은 %09(탭)으로 대체해서 쿼리문을 작성한다. 쿼리문 : no=0)%09or%09no%09like%09%272%25%27%09--%09 정상적으로 문제가 풀리는 것을 확인할 수 있다.

[webhacking.kr] 26번 문제

100점인 26번 문제를 풀어보자. 첫화면은 소스코드 보기만 있고, 별 다른 특징은 없다. 소스코드에서 $_GET['id']값이 admin이면 "no!"를 echo하게 된다. 그리고 $_GET['id']을 url 디코딩 했을 때 값이 admin이면 문제가 풀리게 된다. admin을 URL 인코딩 후 전송해보았지만 "no!"라는 값이 뜨게 된다. 이렇게 된 이유는 웹 서버와 브라우저 사이에서 데이터 교환 시 브라우저는 폼에서 입력받은 데이터를 자동으로 인코딩한 값을 php서버로 보내고 php는 받은 인코딩된 값을 자동으로 디코딩하기 때문에 우리가 GET방식으로 보낸 url은 php서버에서 자동으로 디코딩 됬기 때문에 preg_match에 걸려 "no!"가 뜨게 된 것이다. 그럼 여기서 admin을 2번 U..

[webhacking.kr] 25번 문제

150점인 25번 문제를 풀어보자. file에 file명을 입력하면 자동으로 php가 붙어 include 되는 것으로 보인다. LFI 취약점을 이용해 보자. 우리는 php wrapper를 사용해서 LFI 사용해보자. - php wrapper란? 우선 wrapper란 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램입니다. 원래 php wrapper는 개발자들의 개발을 돕기 위해서 만들어진 기능이지만 우리는 이 기능을 사용한 lfi에 대해 알아보도록 하겠습니다. 우리가 php wrapper를 사용한 lfi공격에 대해 알아야 하는 이유는 앞에서 배운 기본적인 lfi공격은 다음과 같은 형식으로 구성되어 있었습니다. www.[우리가 공격할 웹 사이트의..

[webhacking.kr] 24번 문제

100점인 24번 문제를 풀어보자. 문제를 들어가면 접속한 ip와 agent 정보가 나오게 된다. 소스코드를 확인해 힌트를 찾아보자. $REMOTE_ADDR은 클라이언트의 IP주소를 가져오고, $HTTP_USER_AGENT는 클라이언트의 접속환경 정보를 가져오게 된다. 그러나 $_SERVER보다 $_COOKIE가 뒤에 처리되므로 $REMOTE_ADDR를 쿠키에 넣어주고 조작할 수 있따. if문을 살펴보게 되면 만약 $REMOTE_ADDR이 존재한다면 a) .. -> . b) 12 -> 공백 c) 7. -> 공백 d) 0. -> 공백 으로 치환하게 된다. 문제에서는 $REMOTE_ADDR값이 127.0.0.1이면 문제가 풀리게 되는데, 치환되는 값을 생각해서 쿠키값을 입력해보자. REMOTE_ADDR : ..

[webhacking.kr] 23번 문제

200점인 23번 문제를 풀어보자. XSS 공격에 성공하면 문제가 풀리는 것 같다. 대소문자 변환, img태그, base64인코딩 등을 이용한 시도를 해보았지만 전부 no hack이 뜨게 된다. 특수문자가 이스케이프 처리 되는 지 입력해 보았는데 한 글자씩 입력해보면 치환을 거치지 않는 것을 확인했다. 그럼 문자열을 입력해보게 되면 필터링이 된다. 그럼 각 글자사이마다 NULL byte를 입력해서 재시도 해본다. 여기서 NULL byte injection이란? URL로 인코딩 된 널바이트 문자(0X00 또는 %00)를 이용해, 악의적인 공격자에 의해 의도하지 않은 동작을 시키는 것이다. 문자열을 저장할 때 null 문자를 삽입하여 null문자열이 있는 곳까지만 출력하고 끝난 것으로 간주함을 이용한 공격이..

[webhacking.kr] 22번 문제

500점인 22번 문제를 풀어보자. admin 계정으로 로그인을 하라고 문제에서 힌트를 주고 있다. join 페이지로 이동해서 admin 계정은 이미 존재하는 계정으로 나오고, 테스트를 위한 임의의 계정을 생성한다. - 참인 경우 - 거짓인 경우 이제 참/거짓 반응을 이용해서 Blind SQL Injection을 시도하자. Request는 POST 방식으로 보내게 된다. import requests url = "https://webhacking.kr/challenge/bonus-2/index.php" cookies = {'PHPSESSID':'세션'} pw_length = "" pw = "" # 패스워드 길이 구하기 for i in range(0,100): data = {"uuid":"admin' and..

[webhacking.kr] 21번 문제

250점인 21번 문제를 풀어보자. Blind SQL Injection을 통해 해결하라는 힌트를 알려주고 있다. id : guest / pw : guest 로 로그인을 시도해보면 login success가 뜨게 된다. 우리는 admin 계정으로 로그인 하기 위해 Blind SQL Injection을 통해 참 / 거짓일 때의 반응을 살펴보자. - 참일 경우 wrong password - 거짓일 경우 login fail 참 / 거짓일 경우의 반환값을 확인했으니 이 조건을 이용하여 파이썬 코드를 통해 패스워드를 알아보자. - 패스워드 길이 및 패스워드 문자열 구하기 import requests url = "https://webhacking.kr/challenge/bonus-1/index.php" cookie ..

반응형