본문 바로가기

모의해킹

(163)
File Vulnerability Advanced for linux [WEB LEVEL1] 파일 다운로드 취약점을 이용해 푸는 문제이다. 소스코드를 보면 /admin페이지에 가서 cmd를 실행시킨다.(Access denined 문구 나옴) /file페이지에서는 경로를 출력시킨다.(파일 다운로드 취약점) /admin 페이지에서 실행을 시키기 위해서는 API_KEY값이 필요하다. 환경변수파일에 API_KEY가 보통은 있다고 한다. /admin 페이지에서 cmd를 실행시키기 위한 API_KEY값을 확인한다. 현재 실행중인 프로세스의 환경변수를 확인하기 위해 /proc/slef/environ 경로로 이동했다. 검색을 통해 찾았음,,, * /proc/PID/environ - 프로세스의 환경변수 * /proc/self - 자신의 /proc/PID로 이동 어떤 작업을 했는지 확인을 했을때, API_KEY ..
Apache htaccess [WEB LEVEL1] 파일 업로드 취약점을 이용해 권한을 획득하는 문제이다. 여기서 알아야할 것은 제목 부분에 나온 htaccess 이다. *htaccess : 디렉토리별로 설정을 변경할 수 있다. 설정 지시어가 있는 파일을 특정 문서 디렉토리에 두면, 그 디렉토리와 모든 하위디렉토리에 지시어를 적용한다. Allowoverride none 으로 설정되어 있으면 htaccess 설정파일을 사용할 수 없다. https://httpd.apache.org/docs/2.4/ko/howto/htaccess.html 참고 deniedExts 변수를 보면 php관련 확장자는 허용이 안된다. .htaccess 파일에 php 파일이 .test 확장자로도 실행이되게 지시문을 작성해준다.
fly me to the moon [WEB LEVEL1] Javascript로 만들어진 게임인가..? Score 가 31337 정도가 되어야 문제가 풀리는 문제인 거 같다.(Score을 조작하는 문제) javascript 코드를 보면 eval 함수를 사용해 난독화가 되어있다. 그러면 난독화를 풀기 위한 툴을 찾아보자 해당 사이트에 난독화된 코드를 넣어 주면 난독화가 풀린다.(간단한 난독화는 풀린다.) getScore에서 socre 값을 0x8518x7 으로 반환하고 , 0x8518x7는 0x08618x6을 반환하기 때문에 최종적으로 socre값은 0x08618x6 부분이기에 값을 31337로 변경을 해준다. 해당 socre 값이 31337를 넘었기에 flag값이 출력이 된다.
Command Injection Advanced Command Injection 취약점 문제이다. * 해당 문제를 풀기 위한 알고 있어야 할 것 escapeshellcmd와 curl 명령어 URL 주소를 입력해보자. https://www.google.com 주소를 입력을 했을 때, 해당 주소의 응답 값을 가져오는 거 같다. 첫 번째로 http가 포함이 되었는지 확인을 한 다음 shell_exec 명령어를 사용해 해당 URL 주소의 결과 값을 html엔티티로 결과를 보여주고 해당 URL 주소를 md5으로 암호화해 cache_file에 저장해 출력해 준다. 여기서 취약점으로 볼 수 있는 곳은 escapeshellcmd 함수에서 \ 문자가 추가되지 않아 curl 명령어의 "-o" 옵션을 사용해 임의의 디렉터리 파일을 생성할 수 있다. dreamhack에서 ..
simple_sqli_chatgpt [WEB LEVEL1] chatGPT을 사용해 푸는 문제는 처음 본다. userlevel에 번호를 넣어 로그인하는 건가..? 소스 코드를 보면 userid 가 'admin'이고 userlevel 이 0 이 되어야 flag값이 출력이 된다. chatGPT을 이용을 안해도 소스코드를 보면 풀 수 있는 문제이다. 사용했던 쿼리문은 0' and userid='admin' --이다.
CSRF Advanced [WEB LEVEL1] CSRF 취약점 문제이다. 페이지를 보면 생각 나는 CSRF은 계정의 Password을 변경하는 시나리오가 생각이 난다. 정상적으로 패스워드를 변경했을 때, 패킷정보를 확인해 본다. 해당 패킷을 보면 csrf token이 있어 이 부분만 해결을 하면 풀리는 문제인 거 같다. *CSRF TOKEN 방식은 매 요청마다 난수를 임의로 생성하여 세션에 저장하고 전송시키는 방식이다. 소스코드를 보면 csrf token이 어떻게 만들어지는지 확인을 할 수 있다. - username에 remote_addr을 더해서 MD5 인코딩해주면 해당 csrf token을 만들 수 있다. MD5 암호화 도구를 사용해 해당 csrf token을 만들어 페이로드를 작성하면 된다. csrf 취약점이 발생하는 flag 페이지로 이동해 ..
md5 password [WEB LEVEL1] MD5 true 취약점은 binary로 반환된 문자열이 DB의 쿼리문으로 그대로 들어갈 때 발생한다. MD5 함수는 문자열에 대한 값을 16진수로 출력해 준다. *true 옵션을 주면 raw binary로 출력해 준다. password를 입력하면 md5으로 복호화하는 건가?? 확실한 로직을 알기 위해 source 코드를 봐보자. 소스 코드를 보면 mysqli_real_escape_string 함수는 mysql_query에서 특수 문자열을 이스케이프 하기 위해 사용한다. -> SQL Injection을 막아주기 위해 특수문자 앞에 이스케이프를 붙여주는 기능( \ 백슬래쉬) SQL 쿼리문을 보면 password = ' md5($ps, true)' 부분에 쿼리문을 넣어 참으로 만들어줘야 한다. 방법으로 or로..
baby-sqlite [WEB LEVEL1] 로그인을 하면 flag 값을 획득하는 문제인 거 같다. 소스 코드에서 쿼리문을 보면 uid 랑 upw 값에 입력값을 넣기 위해서는 '를 사용해야 하는데 필터링되어 있다. level 부분에는 ' 를 사용하지 않아 여기 부분에 injection 구문을 넣으면 될 거 같다. UI에는 level을 입력하는 구간이 없어 burp suite를 사용해 level에 대한 파라미터를 입력해 준다. level 파라미터에 데이터 값을 넣어주면 error는 안되지만 flag 값을 받을 수 없다. sqlite에서는 || 가 더해주는 기능으로 사용된다. 그리고 select 대신에 valuse를 사용할 수 있다는 걸 강의를 통해 배우게 되었다.