Wargame(Web)/Webhacking.kr Writeup
Webhacking Writeup 8번 문제
Webhacking 8번 문제입니다. 소스코드를 제공해주고 있으니 먼저 소스코드를 보겠습니다. PHP코드로 이루어져 있으며 query등이 보이는 것으로 SQL 인젝션이 필요한 문제라고 생각하였습니다. 먼저 코드를 읽어보면 $agent에 HTTP_USER_AGENT를 공백제거후 대입하고 $ip에는 REMOTE_ADDR 접속자의 IP를 받아 대입한다고 합니다. 그다음으로 넘어가서 $result 을 보면 addslashes 함수로 처리한 HTTP_USER_AGENT를 확인해 $ck에 대입시키는데 값이 존재할때는 admin인지를 if구문으로 판단하고 없다면 'agnet', 'ip', 'guest'로 추가한다고 되어 있습니다. Write up 코드에서 우리는 admin으로 로그인을 해야합니다. 하지만 현재 db에..
Webhacking Writeup CHILD 문제
Webhacking Writeup CHILD 문제 문제에 접속해보면 URL에 get방식으로 inject된것을 그대로 출력해주고 있습니다. Error Report링크를 들어가보면 에러를 전송하면 관리자가 바로 읽는다고 합니다. 아마 봇을 이용한 자동화를 구현해놓은것 같은데 이런경우 Reflected xss에 취약해집니다. 처음에는 xss공격을 먼저 시도해봤더니 CSP라는 보안으로 막혀있습니다. 검색해 찾아보니 네트워크 부분을 살펴보면 더 잘 살펴볼 수 있더라구요 CSP로 script-src는 *google.com 만 통과된다고 합니다. 해서 CSP bypass *google.com 키워드로 검색해 찾은 글이 https://github.com/zigoo0/JSONBee GitHub - zigoo0/JSONB..
Webhacking Writeup 50번 문제
Webhacking Writeup 50번 문제입니다. 문제사이트에 접속해보면 45번 문제와 같은 페이지로 보입니다. 소스코드를 제공해주니 먼저 살펴보겠습니다. 이번에는 id=admin 일때 문제가 해결되는 것이 아닌 lv=3 일때 해결된다고 합니다. 이전 45번에서 사용했던 mb_convert_encoding을 똑같이 사용하고 있으니 %aa를 이용한다면 싱글쿼터 우회가 가능할 것으로 보입니다. 먼저 필터링을 살펴보면 GET방식으로 입력시 from, pw, (, ), , %, =, 를 필터링 하고 있습니다. 일단 lv이 어떻게 해야 출력되는지 부터 보겠습니다. guest를 그대로 입력하니 lv=1 이 출력됩니다. 그럼 싱글쿼터를 우회하는 방식을 이용해 2를 출력해보겠습니다. 이전 45번 문제와 비슷하게 %..
Webhacking Writeup 45번 문제
Webhacking Writeup 45번 문제입니다. 문제사이트에 접속하면 guest가 id pw에 기본입력되어있고 소스코드를 제공해줍니다. 소스코드를 먼저 살펴보면 id와 pw에 add슬래시로 싱글쿼터, 더블쿼터, 백슬래시, NULL인경우 역슬래시를 추가해주고 있습니다. 다음으로 처음보는 함수인 mb_convert_encoding() 함수인데 찾아보니 첫번째 인수 입력된 값을 두번째 인수 utf-8 형식으로 바꾼다. 세번째 인수 현재 인코딩 형식인 euc-kr 즉 입력한 id값은 euc-kr 방식으로 입력받아 utf-8방식으로 바꿔서 아래 result 부분에 삽입되는것을 알게되었습니다. 문제코드에서는 result의 id가 admin이기만 하면 solve(45)가 실행된다고 하니 pw까지 맞춰야 하는 블..
Webhacking Writeup 51번 문제
Webhacking Writeup 51번 문제입니다. 사이트에 접속하면 admin page라고 친절하게 알려줍니다 캡쳐사진에는 없지만 우측아래에 소스코드를 링크를 제공해주니 접속해보면 id와 pw를 POST 형식으로 전달을 받고 있습니다. 일단 id에는 자주보는 add슬래시 함수가 싱글쿼터 더블쿼터 공백등을 막고있고 pw는 md5암호화 방식으로 되어있는데 추가로 뒤에 true? 이부분은 검색이 필요할 것같습니다. 다음 우리가 인젝션할 구문을 살펴보면 id를 입력하고 pw를 입력받고 있습니다. 다음 구문인 result 를 보면 다행이 id만 확인하므로 pw의 값을 정확히 찾아야 하는 블라인드 sql은 아닌것을 알 수 있습니다. 그러면 일단 admin page라고 하였으니 id=admin 으로 예상하고 pw..
Webhacking Writeup 34번 문제
Webhacking Writeup 34번 문제입니다. 사이트에 접속해보면 debug me 가 alert로 출력됩니다. 일단 스크립트 코드를 보겠습니다. 살짝 도망칠까 고민했습니다... 엄청난 양의 코드가 작성되어 있습니다. 일단 정리를 위해 vsc코드로 옮겨 살펴보면 오른쪽에 빽빽하게 자리한게 다 코드입니다... 문제를 풀려면 이정도 노가다는 해야죠! 일단 ==로 끝나는 것을 보아 base64가 가장먼저 생각납니다. 해서 base64로 복호화를 시도했는데 3번째 에서 s 가나오길래 맞는값이 있겠지 있겠지 하면서 40여개를 복호화 시도했습니다... 그러다가 도저히 이건 아닌거 같아 if나 for문이 나오는 코드부분을 먼저 살펴보기로 했습니다. 코드도 살펴보려고 노력했으나.... 3분의 1쯤 읽다가 포기하고..
Webhacking Writeup 21번 문제
Webhacking Writeup 21번 문제입니다. 접속해보면 대놓고 블라인드 SQL문제라고 알려줍니다. 그럼 일단 블라인드 SQL 푸는 방식답게 True 의 경우와 False 경우를 찾아야합니다. True를 출력해줄 1=1# 을 이용해봤는데 아무것도 출력되지 않았습니다. URL을 보면 pw= 이후 비어있는것으로 보아 pw에도 값 입력이 필수인것 같습니다. 해서 pw에도 값을 추가해보니 wrong password가 출력되었습니다. wrong password가 True의 경우이니 다음으로 False의 경우도 찾겠습니다. login fail이 출력되었습니다. 이제 위에서 말한대로 True의 경우와 False의 경우를 찾았으니 블라인드 SQL이 가능해졌습니다. 우리가 찾을건 admin의 계정이므로 id는 a..
Webhacking Writeup 44번 문제
Webhacking Writeup 44번 문제입니다. 사이트에 접속하면 소스코드를 제공해줍니다 제공해주는 소스부터 보겠습니다. 코드가 매우 간결합니다. 거기에 주석까지 친절하게 달아줬네요 코드부터 해석해보면 POST 방식으로 id를 전달받는데 if구문으로 id가 존재한다면 substr함수로 id를 5개만 변수 id에 저장을 합니다. 그리고 특이하게 시스템 함수를 사용하는데 검색해보니 인수를 2개받고 위의 사진처럼 커맨드가 실행가능한 함수라고 합니다. 그런데 제공된 소스에서는 더블쿼터로 (" ") 하나로 묶여있습니다. 즉 인젝션을 수행해 2개의 인수로 나눠야 한다는 겁니다. 주석내용은 ls를 수행하면 된다는 내용으로 즉, 우리는 인수를 2개로 만들고 커맨드중 ls를 사용하면 된다고 알 수 있었습니다. 여러..