Wargame | CTF/WebHacking

    Juice Shop - User Credentials (★★★★) 풀이

    SQL 인젝션을 통해서 모든 사용자의 계정정보를 조회하는 문제입니다. 이전 문제인 크리스마스 제품을 조회하는 문제에서 search에 파라미터를 넘겨주는 부분에서 SQL Injection 이 가능함을 확인하였습니다. 해당부분에 오류를 발생시키기 위해 '; (싱글쿼터와 세미콜론) 을 넣어주었습니다. 서버에서 오류와 함께 SQL 문을 리턴해주었네요. 알아낸 SQL 문을 이용, 그리고 UNION 을 사용하여 Users 테이블을 조회하면 되는데요. 문제는 컬럼개수를 모른다는 것입니다. UNION 은 유니온하는 테이블의 컬럼 개수와 같아야 하는 조건이 필요합니다. 컬럼의 개수를 알기위해서는 테이블의 구조를 알아야 하는데, 구조를 알지 못하기 때문에 노가다가 필요합니다.')) UNION SELECT '1','2' F..

    Juice Shop - Misplaced Signature File(★★★★) 풀이

    역시나 널바이트 인젝션을 이용한 문제입니다. SIEM 시그니쳐 파일에 접근하라네요. SIEM(Security Information and Event Management) ftp 내 suspicious_errors.yml 을 열어줍니다. 파일내 SIEM 이 detection 하는 키워드가 나와 있습니다.

    Juice Shop - NoSQL Injection Tier 1(★★★★) 풀이

    서버를 잠시동안 sleep 하라는 문제입니다. Juice Shop 을 하면서 정말 많은것을 배우는것 같습니다. 현재 NoSQL은 널리 사용되고 있음에도 불구하고 Injection에 대한 정보는 많이 없고, 관심도 적은것 같습니다. SQL Injection 이나 마찬가지일텐데 말이죠. 대표적인 NoSQL 은 MongoDB 가 있으며, 클러스터 환경에서 많이 사용됩니다. 데이터의 일관성이 중요하지 않고, 많은 데이터가 단시간에 쓰여지고, 굳이 바꿀 필요가 없는경우. 예를 들면 게임로그 같은 경우에 쓰인다고 하네요.이 문제를 풀려면 MongoDB에 대한 기본적인 지식이 필요합니다. 여기서는 사용자의 리뷰를 데이터 베이스에서 검색할 때, product 번호를 쓰는데요. 데이터베이스 구문을 에측해 보면, db.r..

    Juice Shop - Access Log(★★★★) 풀이

    서버의 access log에 접근하라고 합니다. 사실 이 문제를 풀기 위해선 OWASP zap 플러그인 중 DirBuster 라는 플러그인이 있는데 이런 툴들을 이용해야합니다. 이 툴은 접근할 수 있는 디렉터리를 Bruteforce 공격을 통해서 찾아내야 합니다. 찾아낸 디렉터리중 logs를 포함한 디렉터리에 접근 하면 되는 문제인데요. 칼리에서 네트워크가 안되는 문제로 이 플러그인 다운로드가 불가능 하므로 답지를 보고 그냥 진행하였습니다.브루트포스로 support/logs 라는 디렉터리에 접근할 수 있는 것을 확인한 뒤에, 접근을 시도 해줍니다.

    Juice Shop - Deprecated Interface(★★) 풀이

    현재 사이트는 B2C인데 B2B 때 쓰던것이 남아있다고 하네요. 힌트를 보면 파일 업로드 쪽인데 파일 업로드 쪽에 xml 을 업로드 할 수 있도록 되어있습니다. xml 파일을 업로드 해줍시다.

    Juice Shop - Christmas Special(★★★★) 풀이

    현재는 프론트 엔드단에 없는 크리스마스 제품을 주문하라는 것입니다. 프론트 엔드단에는 없는데 주문하라는 말은, 데이터베이스에는 있으나 WHERE 절의 조건에 의해서, 메인화면의 상품을 뿌려줄 때 안보이게 했다고 유추해볼 수 있습니다. 메인화면을 받아올때, GET 방식으로 사진같이 받아옵니다. 임의로 q라는 파라미터로 apple을 넘기니 apple이 포함된 상품들이 반환되어 나오는것을 확인하였습니다. 프론트엔드단의 검색기능이라고 보면 됩니다. q라는 파라미터로 전달된 값이 where 절에 들어가서 검색이 된다고 생각 할 수 있습니다. 여기에다가 SQL 인젝션을 시도해보겠습니다. '; 라는 파라미터를 넘겨주어서 데이터베이스 오류를 발생시켰더니 서버에서 요청된 SQL 문 전체를 반환하였네요. 상품들을 요청하는..

    Juice Shop - Forgotten Developer Backup(★★★★) 풀이

    거저먹는 문제입니다. 널바이트 인젝션을 사용합시다. package.json.bak 파일입니다. 성공적으로 오픈됬네요.

    Juice Shop - Easter Egg Tier 2(★★★★) 풀이

    뭔가 더 찾으라고 합니다. 저번글에서 base64로 인코딩된것이 있었죠. 디코딩 해보니 이상한 글자가 또 나왔습니다. 왠지 카이사르 암호의 일종같습니다. 일정 숫자만큼 문자를 shift 하는 간단한 암호입니다. rot1부터 복호화를 시도해 보았습니다. rot13이네요 맞네요. 정상적으로 복호화 되었습니다. 슬래쉬가 있는걸로 봐서는 URL 같은데요 한번 접근해 볼까요. 맞네요. 무슨 이상한 행성이 나왔습니다.

    Juice Shop - Easter Egg Tier 1(★★★★) 풀이

    이스터 에그를 찾는 문제입니다. NULL Byte Injection 을 하면서 ftp URL 내에 이스터 에그가 있던것을 발견 했었죠. 그걸 일단 널바이트 인젝션으로 열어 줍니다. 역시나 그냥 열리지는 않습니다. %2500.pdf 를 넣어준 뒤 GET 요청 해줍니다. 성공적으로 서버로 부터 응답이 왔습니다. 진짜 이스터 에그는 따로 있다고 하는데요. 안내 메세지 밑에 쓰인 이상한 글자들은 아마도 Base64 인코딩 포멧인것 같습니다. 일단 뭔지는 잘 모르겟네요. 어쨌든 이스터에그 티어1문제는 클리어입니다.

    Juice Shop - Product Tampering(★★★) 풀이

    OWASP SSL Advanced Forensic Tool (O-Saft) 라는 제품 내용중에 다른 링크로 리다이렉트하는 부분을 수정하여서 다른 링크로 리다이렉트 되게 만들라고 합니다. 이 제품의 ProductId는 9라는 것을 확인하였습니다. RESTful 하게 만든 웹은 자원(Resource), 행위(Verb), 표현(Representations) 으로 구성되어 있습니다. 여기서 자원은 URI 을 의미하고, 행위는 HTTP METHOD를 의미합니다. REST API를 디자인 할때 URI 에는 정보의 리소스를 표현해야하고, 자원에 대한 행위는 HTTP METHOD 로 표현되어야 하는데요.여기서도 마찬가지로 URI 에 자원에 대한 내용인 Products 그리고 ProductId를 나타내는 숫자 9 가 있..

    Juice Shop - Forgotten Sales Backup(★★★) 풀이

    bak 확장자를 가진 파일에 접근하라는 문제 입니다. 그냥 /ftp 확장자에서 기밀문서를 열람했던 문제와 같이 열려고 하면 .md 와 .pdf를 가진 파일만 허용되었다고 하면서 파일을 열 수가 없습니다. 여기서 이용해야 할 방법은 널바이트 인젝션(NULL Byte Injection) 입니다.C언어에서 문자열의 끝을 나타내는 0x00(NULL) 바이트를 이용하는 것인데요. 내부적으로 C API를 이용하게 되면 0x00 을 문자열의 끝으로 인식하게 되어 0x00 이후의 문자열은 무시됩니다.HTTP 요청으로 /ftp/coupons_2013.md.bak%2500.pdf 를 보냅니다 여기서 %25는 %의 URL 인코딩입니다. 00은 00입니다. 프론트 엔드단에서는 %2500이 그대로 문자열로 인식되어서 뒤의 .p..

    Juice Shop - Basket Access Tier 2(★★★) 풀이

    다른 사람의 장바구니에 물품을 담는 문제입니다. 장바구니를 구별하는것은 BasketId 입니다. 해당 값을 바꿔서 전송하면 될 것 같습니다. 하지만 서버에서 에러를 전송합니다. Invalid BasketId 라고 하네요. 동일한 이름의 HTTP 파라미터를 제공하면 웹어플리케이션이 예상치 못한 방식으로 동작할 수 있다고 합니다. 이를 공격자가 악용 할 수 있다고 합니다. 파라미터로 BasketId를 한번 더 보내서 인증은 정상적인 나의 장바구니로 하고, 물품은 다른 사람의 장바구니에 넣을 수 있습니다.정상적으로 남의 장바구니에 물품을 넣었네요.

    Juice Shop - XXE Tier 1(★★★) 풀이

    XXE Injection 을 하는 문제 입니다 XXE Injection 이란 (XML External Entity Injection) 인데요 XML에 있는 외부 객체를 참조할 수 있는 기능을 이용해서 서버내 파일을 참조하게 만드는 해킹 기법입니다. XML 소스는 이렇게 작성해 줍니다. 서버 내 로컬 파일을 참조하기 위해 file 이라는단어를 쓰고, passwd 파일을 참조하도록 합니다. 작성한 XXE 파일을 업로드 합니다. Request에서 작성한 XXE 파일이 넘어가는 것을 확인할 수 있습니다. 서버의 Response를 인터셉트해서 확인하면, 서버의 passwd 파일이 참조되는것을 확인 할 수 있습니다. 모든 내용이 나오지는 않고, 짤리네요 아마도 서버에서 글자수를 제한해둔것 같습니다. 브라우저의 De..

    Juice Shop - XSS Tier3(★★★) 풀이

    프론트 엔드단에서 Persisted XSS 공격을 하지말라고 합니다. 툴을 이용해서 서버 쪽으로 요청을 보내서 XSS 공격을 하는것 같습니다. 먼저 메인페이지의 쥬스 목록들을 받아오는 요청을 확인합니다. JSON 방식으로 판매하는 각 쥬스에 대한 정보를 받아옵니다. 경로는 api/Products 이며 GET 방식으로 받아옵니다. 인증정보를 이용하기 위해 Send to Repeater를 눌러 Repeater로 보내줍니다. Repeater 에서 POST 방식으로 전송방식을 변경해줍니다. POST 방식이고, Content-Type는 JSON 방식 바디를 보낼것이므로 수정해주고, 맨 밑에 쥬스 항목추가를 위한 바디를 입력해 줍니다. Content-Length 는 자동으로 계산되어서 보내지는것 같습니다. 딱히 수..

    Juice Shop - Upload Size(★★★) 풀이

    100KB 이상 업로드를 해야하는 문제입니다. 먼저 100K를 넘지 않는 파일을 생성해 줍니다. dd 라는 명령어를 사용하면 된다고 하네요. 99KB의 파일이 생성 되었습니다. Complain 페이지에서 이 파일을 업로드 한 후, 버프슈트로 요청을 가로채 줍시다. 100KB가 넘도록 의미없는 데이터를 추가하여 보내줍니다.