Security/Web 문제풀기
Webhacking.kr 41번
파일을 업로드할 수 있는 폼들이 있다. 우선 소스를 보자! 소스코드를 보면 파일명에서 ., , /를 필터링하고 복사해서 upload_dir에 저장하고 그 위치에 flag를 write하는 것을 알 수 있다. 그럼 upload_dir를 찾아보자! 파일 이름을 엄청 길게 해서 업로드를 하면 오류 메시지와 함께 해당 디렉토리의 위치를 알려준다! 다만 로컬에서 하면 파일 이름을 아무리 길게 해서 만들어도 소용이 없으므로 burpsuite 같은 툴을 이용해주자! 찾은 디렉토리와 업로드 했던 파일을 url에 써주면 flag를 알 수 있다!
HackCTF read file
이번에는 HackCTF의 Web 문제 중 Read File 문제를 풀어보자! File is flag.php라고 나와있다. 뭐 바로 풀리진않겠지만 url에 flag.php를 넣어보자! 음 flag가 필터링 되어있을까? url 아무 곳에나 flag를 넣어보자 구글 주소 사이에 flag를 넣어도 아무 문제 없이 처음 페이지가 잘 나오는 것을 보아 flag가 필터링되어있음을 알 수 있다! flag가 필터링되어도 flag.php가 출력되게끔하면 성공!
Webhacking.kr 42번
webhacking.kr 42번을 풀어보자! 해당 페이지의 소스를 보면 flag.docx의 download를 누르면 Access Denied가 뜨게 되어있다. 그런데 test.txt를 보면 ?down=dGVzdC50eHQ= 라고 수상한 알파벳들의 나열이 있다. 앞구르기 하면서 봐도 base64로 인코딩된 상태...! 디코딩을 해보면 test.txt가 나온다..!!!!!! 그럼 flag.docx를 인코딩해서 넣으면 될 것 같다. flag.docx를 인코딩한 값은 ZmxhZy5kb2N4이다. 이를 링크에 넣으면 다운로드가 진행된다!!!! 다운로드 된 파일 안에 FLAG 값이 존재한다.
Webhacking.kr 25번
webhacking.kr 25번 문제를 풀어보자. url을 보니 file=hello라고 되어 있는 것을 보아 GET 방식으로 파일을 받아오며 회색창에 그 파일이 출력되는 것 같다. 그리고 실제 파일은 hello.php인데 hello까지만 출력되는 것을 보아 file 파라미터로 받아온 값에는 자동으로 .php를 붙여 실행하는 것 같다. flag.php 파일을 열기 위해 url에 flag을 입력해보자! 흠... FLAG가 코드 안에 있다...? 소스코드를 알아보기 위해 php://filter라는 PHP Wrapper을 사용해보자. php는 입출력, 오류 파일 등에 접근할 수 있는 다양한 I/O 스트림을 제공하는데 이를 PHP Wrapper라고 한다. php://filter/convert.base64-enco..
Webhacking.kr 6번
webhacking.kr 6번 문제를 풀어보자 첫 화면에 들어가면 ID와 PW가 보인다. 먼저 소스를 보자 코드를 정리해보면 user 쿠키값이 없을 때 val_id 값에 guest, val_pw 값에 123qwe를 저장하고 20번 반복하면서 val_id, val_pw를 인코딩하고 항목 안에 1~9의 숫자가 있으면 해당되는 특수문자로 대체한 뒤 user 쿠키와 password 쿠키에 저장하는 코드이다. 디코딩 부분도 마찬가지로 user와 password 쿠키값을 가져와서 각 특수문자에 대칭되는 1~9의 숫자로 치환하고 20번의 디코딩을 한 후 디코딩한 id가 admin이고 pw가 nimda면 문제가 해결된다. 따라서 admin과 nimda를 20번 인코딩한 후 숫자를 해당되는 특수문자로 바꾼 뒤 그 값들을..
Webhacking.kr 45번
webhacking.kr 45번을 풀어보자! 전형적인 id와 pw를 입력하는 SQL injection 문제다. 소스를 보자! id와 pw 둘다 addslashed() 함수를 적용하고 있다. addslashed() 함수는 문자열에 작은 따옴표, 쌍 따옴표, 역슬래시 문자가 포함되어 있다면 그 문자앞에 역슬래시를 붙여주는 함수다. 그리고 id 값은 멀티바이트 문자로 바꾸고 admin, select, limit, pw, =, >,
Webhacking.kr 44번
webhacking.kr 44번을 풀어보자! 어떠한 값을 제출할 수 있는 form이 있다. 우선 소스를 보자! id의 길이는 5이며 ls를 execute하라고 되어있다. system() 부분이 소스의 실행부분이기 때문에 이 부분에 맞게 id를 전송해야한다. system 구문에서 ls를 실행하기 위해 ';'ls 를 입력해 전송하자! 이 flag값을 URL에 붙여 전송하면 FLAG 값 얻을 수 있다!
Webhacking.kr 29번
webhacking.kr 29번 문제를 풀어보자. 처음 들어가면 보이는 화면이다. 파일을 선택 후 제출하는 버튼이 있다. 그냥 아무 파일이나 한번 업로드해보자. 나는 그냥 메모장에 New File이라는 제목을 달고 올려보았다. 올렸더니 위 사진과 같이 올린 시간, ip, 그리고 file 이름이 올라가는걸 볼 수 있다. 버프스위트로 파일 올리는 과정을 intercept 해보니 filename=""에 파일 이름이 들어간다는 것을 알 수 있다. (가상환경으로 kali linux를 사용 중이다) filename=""의 "" 안에 파일이름',시간,'ip주소')# 을 넣으면 아래와 같이 파일이 정상적으로 업로드됨을 확인할 수 있다. 파일이름, 시간, ip주소 순서인 이유는 노가다로 알 수 있다.(ㅎ) 칼럼 순서가 ..