전체 글(30)
-
[dreamhack]CSRF Advanced
초기화면이다. 먼저 문제를 파악하기 위해 소스코드를 분석해 보았다. 먼저 /change_password와 /login 부분을 유심히 지켜보았다. (전에 풀었던 csrf-2r가 /change_password이 부분을 통해 풀었기 때문) @app.route("/change_password") def change_password(): session_id = request.cookies.get('sessionid', None) try: username = session_storage[session_id] csrf_token = token_storage[session_id] except KeyError: return render_template('index.html', text='please login') pw ..
2024.04.22 -
[dreamhack]web-csrf2
초기화면이다. vuln, flag, login 페이지가 있음을 알 수 있다. 우선 문제파악을 위해 python코드를 살펴보았다. @app.route("/vuln") def vuln(): param = request.args.get("param", "").lower() xss_filter = ["frame", "script", "on"] for _ in xss_filter: param = param.replace(_, "*") return param 먼저 이 코드를 살펴보면 xss 공격을 유발하는 문자들은 필터링되고 있지만, csrf를 유발하는 등은 필터링되지 않는 것을 볼 수 있다. @app.route("/flag", methods=["GET", "POST"]) def flag(): if re..
2024.04.21 -
lord of sql injection level 9
초기화면이다 코드를 살펴보면 config.php 파일을 포함하여 데이터베이스 연결 정보를 가져온다. login_chk() 함수를 호출하여 사용자 로그인 여부를 확인한다. 데이터베이스 연결을 생성한다. $_GET[id] 파라미터에서 작은따옴표(')가 포함되어 있는지 확인하고, 포함되어 있다면 "No Hack _"라는 메시지를 출력하고 스크립트를 종료한다. $_GET[id] 파라미터를 소문자로 변환한다. $_GET[id] 파라미터에서 "admin" 문자열을 제거합니다. $query 변수에 prob_vampire 테이블의 id 칼럼에서 수정된 $_GET[id] 파라미터와 일치하는 레코드를 선택하는 SQL 쿼리를 저장하며, 쿼리 결과를 화면에 출력합니다. 쿼리 실행 결과를 $result 변수에 저장한다. $re..
2024.04.16 -
lord of sql injection level 8
초기화면이다. 코드를 살펴보면 config.php파일을 포함하여 데이터베이스 연결 정보를 가져온다 login_chk() 함수를 호출하여 사용자 로그인 여부를 확인한다 데이터베이스 연결을 생성한다 $_GET[id] 파라미터에서 작은따옴표(')가 포함되어 있는지 확인하고, 포함되어 있다면 "No Hack _"라는 메시지를 출력하고 스크립트를 종료한다. $_GET[id] 파라미터에 "admin"이 포함되어 있는지 확인하고, 포함되어 있다면 "HeHe"라는 메시지를 출력하고 스크립트를 종료한다 $query 변수에 prob_troll 테이블의 id 칼럼에서 $_GET[id] 파라미터와 일치하는 레코드를 선택하는 SQL 쿼리를 저장합니다. 쿼리 결과를 화면에 출력하며, 쿼리 실행 결과를 $result 변수에 저장합..
2024.04.16 -
lord of sql injection level 7
초기화면이다 먼저 코드에 필터링함수를 확인해 보면 앞선 문제들과 같이 prob와 _ , . , ( , )을 필터링하지만 추가로 or과 and를 필터링하는 것을 알 수 있다. 추가로 i를 통해 대소문자를 구별하지 않는 것도 확인할 수 있음을 볼 수 있다. 또한 clear 조건을 확인하기 위해 조건문 코드를 계속 확인해 보니 이전 문제들과는 다르게 비밀번호가 필요하다는 것을 알 수 있다. 아마도 비밀번호를 찾아서 입력해야 clear 할 수 있을 것이라 생각했고, 즉 Blind SQL Injection이다 먼저 비밀번호의 길이를 알아내보았다 https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw=' || LENGTH(pw)=8;# 비밀..
2024.04.16 -
lord of sql injection level 6
초기화면이다. 이코드에 6번 라인에서 SQL Injection을 수행할 때 or, and 문자를 사용할 수 없게 필터링 되어있다. 여기서는 or와 and를 대신해서 사용할 문자를 선택해야한다. 여기서 id가 guest로 되어 있기 때문에 새로운 조건문을 활용하여 admin으로 바꿔야 (선택해야한다) 단, or와 and가 막혀 있기 때문에 이 문자를 대신하여 사용할 ||와 &&를 사용해야한다. 그래서 필자는 아래와 같은 구문을 삽입 해주었다. pw='||id='admin 여기서 ||는 or 대신에 SQL문에서 사용할 수 있는 문자입니다. 이렇게 되면 id가 guest인 값의 비밀번호가 선택되지 않기 때문에 거짓 where문이 된다 이후 ||id='admin'이 완성되도록 적절히 값을 삽입하면, id값을 a..
2024.04.09