이 문제를 풀기 위해 알아야 할 점은 다음과 같다. - redis는 명령어를 이용해 메모리 데이터를 저장하는 파일의 저장 주기를 지정 가능하다. - 저장되는 파일의 경로와 이름, 그리고 데이터도 함꼐 설정 가능하다. - eval 명령어를 통해 lua 스크립트를 실행 시킬 수 있다. 먼저 데이터 저장이 되는 파일을 알기 위해 config.php에서 dir을 get해보면 {"dir":"\/var\/www\/html"} 임을 알 수 있다. html 경로에 있으니 냅두고 dbfilename을 redis.php로 set해준다. 그 후 데이터 저장 주기도 설정해줘야 하는데 계속 저장되는게 좋으니 save 60 0 으로 set해준다. (60초 이내에 0개 이상 데이터가 변경되면 저장한다.) 그 후 redis.php에..
Web Hacking
처음 접속하면 hello.php로 접속되는 것을 볼 수 있다. 일단 flag를 찾아야 하니 flag.php로 접속해보면 별반 중요한 내용이 들어있지는 않다. 유추해 볼 수 있는점은 .php가 자동으로 붙는다는 점이고 flag.php의 내용을 파악해야 한다는 점이다. 버프스위트도 돌려보고 혼자 해보다 안돼서 찾아보니 php wrapper를 사용해야 한다고 한다. https://www.php.net/manual/en/wrappers.php PHP: Supported Protocols and Wrappers - Manual Even though their names will be the same, you can have more than one //memory or //temp stream open concu..
이 글은 화이트 해커를 위한 웹 해킹의 기술_최봉환 책의 내용을 바탕으로 작성하였습니다. 칼리 리눅스에는 여러가지 해킹 툴이 마련되어있는데 책에서 배운 내용을 바탕으로 가상 웹을 해킹해보려 한다. 가상 웹은 https://pentesterlab.com/exercies/from_sqli_to_shell 에서 다운 받은 파일로 실습했다. 먼저 웹 해킹의 첫번째 단계는 정보 획득이다. nikto명령어를 통해 웹사이트의 정보를 가져왔다. 여러 디렉토리 및 버전 등의 정보들이 나타난다. 그리고 웹 사이트 곳곳을 확인하기 위해 버프 스위트의 target기능을 활용해줬다. 웹 사이트의 여러 페이지를 볼 수 있는데 이 중 /cat.php?id=1인 곳을 먼저 확인해줬다. 1. sql injection & XSS sql..
sql injection bypass WAF 문제와 많이 비슷한 문제지만 특이점은 \n, \r \t, -, + 등 개행 및 줄바꿈, 주석 등을 아얘 못쓰게 막아놨다는 점이다. import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost') app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user') app.config['MYSQL_PASSWORD'] = os.environ.get('MYSQL_PASSWORD', 'pass'..
sql injection이 발생하는 주 이유는 사용자가 입력한 값을 쿼리에 그대로 대입시키기 때문이다. 그 예방책으로 쿼리문을 파라미터 쿼리로 변경하는 방법이 있다. 다음은 DVWA에서 가져온 예제 코드이다. if(is_numeric($id)) 괄호 안에 내용을 보면 prepare(), bindParam(), execute()를 각각 호출해 쿼리문을 실행하고 있다. 특히 prepare함수에 쿼리문이 담겨있는데 이를 prepared statement라고 한다. 쿼리문을 prepare함수로 준비상태로 대기시켜 놨다가 bindparam으로 id값을 바인딩한다. 그 후 execute함수로 실행시키는데 준비상태로 들어간 쿼리는 실행 전에 권한이 부여되지 않다가 실행 시킬때 권한이 확인되는 특징이 있다. 여기선 짧..