본문 바로가기

Web Hacking

(91)
[Webhacking.kr] old-19 write up 일단 풀긴했는데 의도와는 다른 풀이인 것 같다.. 문제에 들어가면 바로 저 화면은 아닌데 입력폼 하나가 존재한다. guest를 치면 hello guest라는 문자열이 리턴된다. admin을 쳐봤다. 다음과 같은 문자열이 나온다. 게싱이 필요한 문제 같다.. 먼저 코드를 확인했지만 별다른 단서가 없어서 쿠키를 봤다. 일반 문제와 다르게 userid라는 쿠키값이 존재한다. 처음에 추측한 걸로는 userid값이 내가 guest를 입력한다면 guest에 대한 암호화 값이라고 생각했다. 일단 base64는 길이가 너무 길기 때문에 아닌 것 같았다. 그러던 와중, admin 문자열을 필터링하고 있다고 생각해서 admi%00n을 넣어서 admi까지만 인식하게 했다. 그랬는데 풀림 ㄷㄷ 풀린 이유를 생각해보면 user..
[Webhacking.kr] old-44 write up 문제는 입력폼 하나만 주어진다. 코드를 보자, 코드는 간단하게 구성되어 있다. 주석으로 ls 명령어를 실행시키라는 힌트가 주어진다. if문을 살펴보면, 입력폼에 입력한 값에서 5바이트를 가져와 system 인자에 넘긴다. system 함수 인자로는 echo 'hello! {$id}'가 들어가 있기 때문에 command injection을 위해 싱글쿼터 탈출이 필요하고 ls 실행을 위해 메타 문자 세미콜론을 써야한다. 즉, 싱글쿼터와 메타문자 3바이트를 쓰면 나머지는 2바이트 밖에 사용이 불가능하다. system("echo 'hello! ';ls''") ls 결과 flag_29cbb...과 index.php가 나왔다. 여기서 약간의 게싱이 필요했다. flag_29cbb...는 flag형식이 아니기 때문에 ..
[Webhacking.kr] old-51 write up 👆 위는 문제 화면이다. 뭔가 sqli의 냄새가나는데, 코드를 보자. 코드를 보니 sqli가 확실해졌다. 문제는 쿼리문이 참일 경우 해결이 된다. 필터링 부분을 보자. 필터링 부분을 보면 addslashes로 인해 싱글쿼터 탈출이 불가능하며, pw에 md5 해시함수가 걸려 있어서 pw에서도 싱글쿼터 탈출이 불가능하다.. 아무리 생각해봐도 답이 안나와서 살짝 힌트를 보니 md5 함수에 취약점이 존재한다. md5 함수의 두 번째 인자에 true or false값을 줄 수 있다. 기본값은 false이다. 먼저 false일 경우에는 32바이트의 16진수 문자열로 해시화되어 리턴되지만, true일 경우에는 16바이트의 2진수 바이너리 값이 리턴된다. 이 말은 2진수 바이너리가 or이나 싱글쿼터를 나타낼 경우 쿼리..
[Lord of SQLInjection] los 11번 golem write up 문제는 위와 같다. blind sqli 같아 보이지만 substr이 필터링 되고 있고 = 부등호 역시 필터링 되고 있다. 첫 번째 조건에서 id가 admin일 때 쿼리의 참 거짓을 확인할 수 있다. 이점을 이용하자. admin's pw length 길이는 >, 7일때는 참을 반환하고 있다. 8을 넣어보자 8을 넣으니 거짓이 됐고 따라서 admin의 길이가 8자리임을 추측할 수 있다. exploit import requests import string ch = string.digits + string.ascii_letters + string.punctuation url ..
[Lord of SQLInjection] los 10번 skeleton write up 싱글쿼터 탈출 후 주석처리 ㄱㄱ..
[Lord of SQLInjection] los 9번 vampire write up admin을 필터링하고 있지만 str_replace로 대체만 하고 있기 때문에 admiadminn으로 우회
[Lord of SQLInjection] 8번 troll write up 문제 코드이다. 문제 해결 조건으론 쿼리문의 결과로 id가 admin일 경우 해결된다. 필터링은 두 가지다 1. 싱글쿼터 -> 우회 불가능 -> 싱글 쿼터 탈출 안됨;; 2. admin -> 우회 가능 경우의 수는 두 가지다. 싱글쿼터를 탈출해서 id='admin'을 만든다. 또는 싱글쿼터 안에서 id='admin'을 만든다. 전자는 내가 가진 지식으론 불가능인 것 같다. 후자로 접근 ㄱㄱ 싱글쿼터 탈출 x char()함수나 concat() 등을 이용하면 싱글쿼터 탈출이 안 돼서 함수를 문자열로 인식한다.. 시도 1 null 바이트 삽입 널 바이트 삽입을 통해 우회를 시도했다. 결론은 실패. query에는 admin으로 들어가 있으나 admi까지만 문자열로 인식하는 것 같다. 정규표현식을 자세히 보니 i..
[Dreamhack] File Vulnerability Advanced for linux write up 드림핵 웹해킹 로드맵 마지막 문제다 .. 드디어 먼저, 코드를 보자 import os, subprocess from functools import wraps from flask import Flask, request app = Flask(__name__) API_KEY = os.environ.get('API_KEY', None) def key_required(view): @wraps(view) def wrapped_view(**kwargs): apikey = request.args.get('API_KEY', None) if API_KEY and apikey: if apikey == API_KEY: return view(**kwargs) return 'Access Denied !' return wrappe..