분류 전체보기
Webgoat XXE 문제
Webgoat XXE 문제입니다. Webgoat는 드림핵처럼 해설이 작성되어 있기에 이를 토대로 실습한 XXE 문제의 Writeup을 작성하였습니다. 4번문제 XXE공격 기법을 활용해 댓글에 값을 저장하는 문제입니다. 일단 해설을 보면 ]> &js; 위 payload같은 공격코드를 삽입하면 XML이 파싱하여 값을 전달할때에 공격자의 의도대로 변경이 가능하다고 알려주고 있습니다. 코드를 삽입하려면 일단 버프스위트 같은 중간에서 패킷을 가로챌 프로그램이 필요하여 버프스위트를 이용해 중간에서 패킷을 가로채보면 a라는 값을 전달했을때 xml 구조를 사용하는것으로 확인되었으며 바디 부분에 공격코드를 삽입하면 해설에서 나온 payload가 아닌 직접 작성한 파일을 볼수 있는 공격코드를 작성해 전송해보면 XXE공격이..
XXE (XML External Entity) Injection
이 글은 XXE 기법을 사용한 워게임 문제를 해결하기 위해 정리한 글로 여러 정리된 References를 참고하여 작성한 글입니다. XXE (XML External Entity) Injection 이란 무엇인가? 먼저 XXE에서 XML은 html과 비슷한 구조를 하고 있으나 정보전달을 목적으로 만들어진 언어로 데이터 저장과 전달, 데이터의 구조를 기술하는 언어이다. 이러한 XML을 파싱(Parsing)하여 사용되는 서비스에 악의적인 XML 구문을 공격자가 삽입 및 파싱하여 공격자의 의도대로 수행되게 하는 공격을 XXE Injection 이라한다. 다음으로 XXE에서 Entity는 XML에서 사용되는 구조로 반복적으로 나오는 문장이나 문자열을 다른곳에 저장해 놓고 참조하여 재사용하는 개체인데 XML을 물리..
(Lord of SQLInjection) assassin 문제
(Lord of SQLInjection) assassin 문제입니다. pw값이 like로 되어있습니다. 여기서 알아야 하는것은 like연산자입니다. 이전 라이트업에 작성했던 사이트에서 Like에 대한 언급이 있었는데 like는 _ 혹은 %가 와일드카드라 하여서 a% 처럼 시작하는 문자도 찾을 수 있지만 _ 언더바처럼 무슨 값이든 통과가 되는 특징이 있습니다. 즉 패스워드값이 맞지 않더라도 pw의 길이를 찾기에 용이 하다는 것입니다. 해서 pw의 길이를 찾기 위해 코드를 작성해 보면 위와 같이 작성이 가능합니다. _ 언더바를 1개씩 늘려가면서 패스워드의 길이를 찾는 것인데.... 100번을 해도 찾을 수가 없었습니다. 해서 패스워드가 길지 않기를 바라며 손수 노가다를 해봤는데 8번째에서 뜬금없이 guest..
(Lord of SQLInjection) giant 문제
(Lord of SQLInjection) giant 문제입니다. 이번에는 shit 부분에 삽입을 하는 방식인데 from 과 prob_giant 가 붙어있어서 쿼리가 실행인 안되고 있습니다. 즉 공백을 넣어줘야 한다는 것인데 필터링에서 공백, \n \t \r 을 막고 있습니다. https://g-idler.tistory.com/61 [SQL Injection] 필터링 우회 방법 모음 1. 공백 문자 우회 1) Line Feed (\n) - 커서(캐럿)를 다음 줄(현재 위치에서 바로 아래줄)로 이동시키는 개행 문자 - URL Encoding: %0a - ex) no=1%0aor%0aid='admin' 2) Tab (\t) - 커서를 한 tab만큼 이동시키.. g-idler.tistory.com 주석, 괄호,..
(Lord of SQLInjection) bugbear 문제
(Lord of SQLInjection) bugbear 문제입니다. 이번문제도 no가 있는걸보니 이부분을 활용하면 될것같습니다. 필터링을 먼저보면 싱글쿼터, substr ascii = or and like 0x 까지 필터링이 엄청 늘었습니다. 우회방법은 이전에 학습것 제외하고 새로우회할 필터링은 공백과 like 입니다. 공백은 abc 사이에 공백을 넣고싶을때 (a)b(c)형태로 괄호를 사용하면되고 like 대신 in ("admin")을 사용하면 된다고 합니다. 그럼 이를 토대로 admin을 출력하는 코드를 작성해보면 no=-1||(id)in("admin")# 위 코드가 되는데 값을 전달하면 admin이 출력됩니다. 이를 토대로 length를 사용해 pw워드의 길이와 값을 찾는 코드를 작성해주면 no=-1..
(Lord of SQLInjection) darkknight 문제
(Lord of SQLInjection) darkknight 문제입니다. 이번에도 블라인드 SQL로 해결하는 문제입니다. 필터링을 보면 먼저 싱글쿼터( ' )를 막고 있으며 substr ascii = 를 막고 있으니 싱글쿼터(') substr ascii = 은 각각 더블쿼터(") mid ord like 로 우회하겠습니다. 일단 admin을 출력하는 구문을 작성하는 것이 먼저이니 더블쿼터를 사용해야 하는데 pw는 이미 싱글쿼터가 열려있으니 no부분에 삽입하는 방식으로 해결해야 할것 같습니다. no=-1||id like "admin"# 필터링에 안걸리게 더블쿼터로 admin을 감싸는 방식으로 값을 전달해보면 admin이 출력되었으니 pw길이와 값을 찾는 코드를 작성해보면 no=-1||id like "admi..
(Lord of SQLInjection) golem 문제
(Lord of SQLInjection) golem 문제입니다. 이번 문제도 이전 문제와 마찬가지로 코드가 두개에 if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); 위의 코드로 보아 패스워드가 정확히 일치해야만 해결되는 블라인드 SQL 인젝션 문제입니다. 일단 필터링을 보겠습니다. 이번 필터링은 or and substr ( = 가 필터링으로 걸려있습니다. 이전에 찾아본 필터링 우회로 or and substr = 은 || && mid like 로 해결이 가능하다는 것을 알고 있습니다. 이를 토대로 먼저 admin을 출력이 가능한 코드를 작성해보면 pw='||id like 'admin'# 으로 작성이 되는데 URL 인코딩을 거치면 p..