반응형

WEB hacking 106

Dreamhack Are you admin? WriteUp

문제 풀이app.py메인 페이지 접근 시 intro 페이지로 리다이렉트 진행한다.intro 페이지에서는 name과 detail 파라미터가 존재하며, intro.html에 값을 전달한다.@app.route("/", methods=["GET"])def index(): return redirect("/intro")@app.route("/intro", methods=["GET"])def intro(): name = request.args.get("name") detail = request.args.get("detail") return render_template("intro.html", name=name, detail=detail)intro.html만약 name과 detail이 존재한다면 ..

Dreamhack Hello, go! WriteUp

문제 풀이app.go 분석 시 template을 사용하는데 name의 값을 %s로 입력 받으며, 사용자 검증이 없기 때문에 SSTI 공격이 가능하다.package mainimport ( "html/template" "net/http" "bytes" "fmt" "strings" "github.com/labstack/echo/v4")func greetHandler(c echo.Context) error { name := c.QueryParam("name") if name == "" { name = "go" } if strings.Contains(strings.ToLower(name),"flag"){ return c.String(http.StatusBadRequest, "flag is not allowed..

bugbountyclub Open Redirect

실습 설명실습 페이지 접근 시 4개의 실습이 존재한다. 실습 1번실습 1번 페이지에 접근하면 URL을 입력하는 입력창이 존재한다. URL 입력 창에 네이버 주소를 입력하여 Submit 버튼을 클릭한다. 네이버 주소를 입력 후 요청을 확인한 결과 redirect_url 파라미터에 입력 값이 들어가며, 응답 패킷에서 Location 헤더에 네이버 주소가 들어가여 네이버 주소로 이동하게 된다.실습 2번실습 2번 페이지 접근 시 here 부분에 링크가 적용되어 있다. 해당 링크를 클릭한다. here 링크를 클릭하면 redirect_url 파라미터에 index.php를 포함하여 요청을 진행한다. 응답 결과에서 Location 헤더에 index.php가 존재하며, index.php 경로로 이동하게 된다. redir..

WEB hacking 2025.07.03

Lab: Password reset broken logic 문제 풀이(WriteUp)

문제 설명패스워드 리셋 기능에서 취약점이 존재한다. 이를 이용하여 carlos의 계정에 로그인하면 문제가 해결된다.문제 풀이로그인 페이지에 접속하면 로그인 기능과 패스워드 찾기 기능이 존재한다. 먼저 로그인을 수행한다. 로그인에 성공하면 My Account 페이지에 접근된다. forgot-password 페이지에 접근하면 입력창에 username 또는 email을 입력 받는다. 이메일을 확인하면 비밀번호 재설정 링크가 존재한다. 해당 링크를 클릭한다. 비밀번호 재설정 링크 접속 시 비밀번호를 변경할 수 있다. 비밀번호를 1234로 재설한 한 후 패킷 확인 결과 username 파라미터에 사용자 계정인 wiener이 존재한다. username 파라미터를 carlos로 변경하여 전송한다. carlos:123..

Lab: 2FA simple bypass 문제 풀이(WriteUp)

문제 설명carlos 계정 페이지에 접근하면 문제가 해결된다.문제 풀이wiener 계정으로 로그인을 성공하면 2차 인증으로 4자리 코드를 입력해야한다. 이메일에서 4자리 코드를 확인한다. 4자리 코드를 입력할 경우 My Account 페이지에 접근된다. carlos 계정으로 로그인을 수행한다. carlos 계정으로 로그인할 때도 /login2 페이지로 이동하여 2차 인증을 요청한다. 하지만 응답에 세션이 존재하는것을 보고 2차 인증을 하지 않고 My Account 페이지에 접근을 시도해보았다. 2차 인증을 하지 않고도 My Account 페이지에 접근이 되었으며, 문제가 해결되었다.

Lab: Broken brute-force protection, multiple credentials per request 문제 풀이(WriteUp)

문제 설명Carlos의 계정으로 로그인에 성공하면 문제가 해결된다.문제 풀이로그인 실패 시 Invalid username or password 에러가 발생한다. password를 브루트 포스 공격한 결과 1분 동안 로그인 차단이 된다. 다음과 같이 비밀번호를 리스트 형식으로 여러 패스워드를 전송할 경우 로그인에 성공하였다.["123456", "password", "12345678", "qwerty", "123456789", "12345", "1234", "111111", "1234567", "dragon", "123123", "baseball", "abc123", "football", "monkey", "letmein", "shadow", "master", "666666", "qwertyuiop", "1..

Lab: Username enumeration via account lock 문제 풀이(WriteUp)

문제 설명브루트 포스 공격을 통해 주어진 사용자 이름과 비밀번호로 로그인에 성공하면 문제가 해결된다.문제 풀이로그인 페이지에 접근한 후 로그인 요청을 수행한다. 버프스위트 Intruder 기능을 사용하여 브루트 포스 공격을 시도한 결과 arkansas 계정만 로그인이 1분 지연이 되었다. 이를 통해 해당 계정이 존재하는 것을 유추할 수 있다. password 브루트 포스 공격을 수행한다. 응답 결과에서 1분 지연에 대한 내용을 제외하고 확인한 결과 password가 tigger일 경우에만 아무런 에러 값이 존재하지 않는다. arkansas:tigger로 로그인한 결과 로그인에 성공하여 문제를 해결하였다.

Lab: Broken brute-force protection, IP block 문제 풀이(WriteUp)

문제 설명브루트 포스 공격을 통해 피해자의 계정에 로그인하면 문제가 해결된다.문제 풀이로그인 페이지에 접근한 후 로그인 요청을 수행한다. 로그인을 여러번 시도 후 로그인에 실패할 경우 1분동안 로그인을 할 수 없다. 하지만 로그인 실패와 성공을 번갈아서 하면 차단당하지 않는 다는것을 발견하였다. 이를 적용해 브루트 포스 공격 페이로드를 제작하였다.해당 코드를 통해 아이디와 패스워드 리스트를 생성하였다.def create_username_list(): for i in range(200): with open("username.txt", "a") as fa: fa.write("wiener\n") fa.write("carlos\n")def create_n..

Lab: Username enumeration via response timing 문제 풀이(WriteUp)

문제 설명주어진 사용자 이름과 비밀번호를 통해 로그인에 성공하면 문제를 해결할 수 있다.문제 풀이로그인 페이지에 접근한 후 로그인을 수행한다. 로그인 실패 시 Invalid username or password 에러가 발생한다. 버프스위트 Intruder 기능을 사용하여 브루트 포스한 결과 너무 많은 로그인 시도를 해서 30분 차단을 당하였다. X-Forwarded-For 헤더를 추가하여 IP 우회가 가능하다. password 길이를 길게 설정한 후 브루트 포스 공격을 진행한다. 브루트 포스 공격 결과 아이디 ar 계정만 응답 시간이 오래걸렸으므로 사용자 아이디가 ar인것을 유추할 수 있다. 사용자 아이디를 ar로 설정한 후 password를 브루트 포스한다. password 브루트 포스 결과 비밀번호가..

반응형