본문 바로가기

Hacking38

[DreamHack] 드림핵 amocafe 소스코드 풀이 해당 문제는 비트연산을 통해 나온 결괏값을 다시 초기 상태로 되돌렸을 때의 값을 찾는 문제다. 위의 그림의 값을 초기 상태로 되돌려 input박스에 입력해야 한다. 코드 설명 menu_str = '' # 결과값이 저장될 변수 org = FLAG[10:29] #초기 상태 값 org = int(org) st = ['' for i in range(16)] #문자열 저장공간 16자리를 만들어 둠 변수 생성과 초기 값을 형변환 하여 비트 연산을 준비한다. for i in range (0, 16): res = (org >> (4 * i)) & 0xf #4바이트씩 왼쪽으로 비트를 이동한 후 마지막 4바이트를 res에 저장 if 0 < res < 12: if ~res & 0xf == 0x4: #NOT을 .. 2023. 11. 17.
[DreamHack] 드림핵 random-test 해당 문제는 인증 코드의 취약점을 활용하여 브루트포스 공격을 시도하는 문제이다. 소스코드 풀이 locker_num에는 랜덤 한 소문자 알파벳+숫자, password에는 100~200의 랜덤 한 숫자가 저장되어 있다. 해당 문제에서 중요하게 봐야 할 코드는 아래의 코드이다. if locker_num != "" and rand_str[0:len(locker_num)] == locker_num: ... return render_template("index.html", result = "Good") 해당 코드는 랜덤 한 문자열이 저장되어 있는 rand_str의 0번째부터 locker_num의 길이만큼만 비교를 하여 True일 경우 Good을 리턴한다. 예를 들어 rand_str에 저장된 문자열이 test라 할 .. 2023. 11. 17.
[DreamHack] 드림핵 Type c-j 올바른 id와 pw 값을 넣으면 flag값을 반환하는 문제이다. 소스코드 화면의 기본적인 출력을 담당하는 페이지며 로그인 기능을 구현하였다. 정해진 id와 pw값을 지정한 후 form을 통해 입력받은 데이터와 비교하여 맞을 경우 flag를 아닐 경우 에러를 출력한다. 풀이 function getRandStr($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[mt_r.. 2023. 11. 14.
[DreamHack] 드림핵 baby-union union을 사용한 sql-injection 문제이다. 사이트에 접속을 하면 uid와 pwd를 입력하는 칸이 보이고 입력된 문자를 통해 query가 만들어지는 것을 확인할 수 있다. 소스코드 input을 받고 users의 모든 정보를 조회하는 sql query문을 만들어 DB에 전송하고 받은 응답값을 출력하는 코드이다. 해당 서버의 DB의 구조 코드이다. users테이블의 컬럼 정보와 flag가 있을 테이블의 컬럼 정보를 정의하며 일부 유저를 정의하였다. 풀이 cur.execute(f"SELECT * FROM users WHERE uid='{uid}' and upw='{upw}';") 해당 코드는 입력받은 값을 바로 qurey문에 넣어 적용하는 코드이다 이렇게 할 경우 변조된 값이 들어오더라도 인증 절차.. 2023. 11. 14.