WriteUp/Webhacking.kr

    webhacking.kr : challenge 33

    webhacking.kr : challenge 33

    첫번째 소스코드는 다음과 같다. Challenge 33-1 view-source ?get=hehe를 넣어줬다. _____________________________________________________________________________________ 다음 소스코드가 나왔는데 Challenge 33-2 view-source 이번에는 get 방식이 아니라 post 방식으로 받는다. 즉 입력을 다른 방식으로 해주되, post랑 post2로 해줘야한다. 문제 출제의도자체가 get이랑 post 차이점을 파악하는거 같다. get 방식 자체는 ?를 이용해서 input값을 넣어주어야 하는데, post 방식은 그게 아니고, 코드 안에 직접 넣어주는 형태로 들어간다. 즉 소스코드에 다음과 같이 추가해준다. ..

    webhacking.kr : challenge 27

    필터링 항목부터 체크하자 if(preg_match("/#| select | \( | | limit | = | 0x /i",$_GET['no'])) exit("no hack"); select, \(, limit, =, 0x를 필터링한다. 못봤는데 공백도 필터링한다. $r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error"); 여기서 인증을 해주는데, GET방식으로 가져오는거 확인했다. 가져오는 대상은 no다 . where id ='guest' and no=('false') or id='admin' and no=('2') 를 주면 될 거같은..

    webhacking.kr : challenge 25

    일단 flag.php 를 열어보면, FLAG is in the code 라고 나오는데, hello 파일은 기본으로 열려있는 것이고, index 에는 아무것도 들어있지 않다. 일단 개발자 도구에 있는 파일을 index.php?fille=flag 파일이다. 즉 우리가 원하는 flag.php가 아니다. RFI 와 LFI (Local File Inclusion) 공격을 이용해서 할 수 있다고 한다. 여기서는 LFI를 사용하는데, php 코드상에서 include() 사용시 input 에 대한 적절한 필터링이 이루어지지 않아 발생하는 취약점이라고 한다. 우선 wrapping 방식들 중에서 php://filter 를 이용해서 푼다. 주로 인코드/디코드 옵션을 이용해서 서버안의 문서를 열람할 수 있다. 파일값을 bas..

    webhacking.kr : challenge 24

    webhacking.kr : challenge 24

    여기서 모르는 것부터 먼저 찾아봅시다. htmlspecialchars(); -> 특수문자를 일반 문자열로 인식할 수 있도록 바꿔주는 역할. ip = 127.0.0.1 이 되면 인증이 될 것 같다. 이렇게 넣어주게 된다면 127.0.0.1 ->7.0.0.1->0.0.1->1 이렇게 된다. 역과정을 보면 112277...0.0.1 127.1 0.0. 이 없어지는 것을 우회하면 될듯 112277...00...00...1 정답

    webhacking.kr : challenge 23

    webhacking.kr : challenge 23

    Your mission is to inject 이게 궁극적 목표다 일단 제출 칸의 값의 이름은 code다. 필터링 목록이 없다. 알파벳을 연속되게 해주면 필터링하는거같다. 일단 html로 인코딩해서 넣어주었다. Your mission is to inject alert(1); 이렇게 들어갔는데 왜 안되누 일단 이게 코드값으로 들어가서 안되는거같다. 이걸 실행으로 해주려면 .. 문자 사이사이에 NULL문자를 넣어주면 된다. 그러면 필터링에 안걸리니까 ?code=a%00l%00e%00r%00t%00(1);

    webhacking.kr : challenge 22

    webhacking.kr : challenge 22

    admin 으로로그인 해야되는게 목표다. 회원가입창이 있으니까 일단 간단하게 가입해서 로그인 해보자. hi! starson1 your password hash : bf69a4c3b0da457bf159b60ca2ff230a 이렇게 로그인 해쉬를 준다. 실제로 비밀번호를 해쉬해서 보관하나 보다. decode 해보자. md5 로 해쉬되어있으면서 뒤에 apple이라는 값이 별도로 붙는다 (salt)인듯. 컬럼 이름은 id pw 로 주어진 상황이다. 즉 이렇게 생겼겠지. id pw guest ~~ admin ~~~ starson1 hash('2019330012+apple') 로그인 창 자차에서 인젝션을 시도하기는 힘들듯 하다.ㅠㅠ 해쉬되버려서, join 에서 admin 값으로 아이디를 만들수 있다면 할수 있을 것..

    webhacking.kr : challenge 21

    제목에 대놓고 Blind SQL Injection 이라고 써있다. 별도의 소스는 없어서 필터링 항목이 뭔지는 모르겠다. 국룰로 id : guest pw : guest 를 넣어본 결과 login success 가 떴다. guest의 비밀번호를 찾아보는 식으로 해보자. union에 필터링 걸려있는거같다. id=%27admin%27%20and%20length(pw)>0%23&pw=1 참인 문장을 주었을 때 wrong password 라고 나온다. 거짓인 문장을 주면 login fail이라고 나온다. 참거짓을 판단할 수 있으니 다했다. python 코드 짜서 보자 found the length : 36 길이가 36이다. 이제 문자열을 찾아주면 되겠지 import requests url="https://webha..

    webhacking.kr : challenge 20

    먼저 맨 위에 time limit: 2second 가 있다. nickname 과 comment 를 입력해주고 captcha를 적어줘야할꺼같다. 2초안에 하려면, 제한시간을 늘려주거나, timer를 멈춰주어야한다. st가 timer 역할을 해주는것같은데 시작 타이머 값을 늘려주었다. 너무 늘려준건지 No cheat 문구가 뜬다 이렇게 하는게 맞는듯 대충 중간값에 끼도록 범위에 넣고 Burp suite 를 이용해서 공격해줬다. 근데 이게 되려면 하나 공격하는데 걸리는 시간이 1초보다 짧아야 될텐데 느리다. 일단 python 으로 해서 해보자. 먼저 파이썬으로 해야하는 것을 적어보자면 ________________________________________ 웹사이트에서 captcha 값을 읽어와야한다. 그리고..

    webhacking.kr : challenge

    webhacking.kr : challenge

    admin 을 제외하고 다른 아이디로는 다 로그인이 된다. guest도 되고, admin으로 로그인하면 3초걸리고 timeout되서 나가진다. 일단 입력은 get 방식으로 받는데 코드를 보고싶다. 이거는 admin을 아이디로 쳤을 때 코드값이다. 3초뒤에 정해진 url로 이동하는 것이다. 그래서 admin으로 들어가 있는 동안, 주소 뒤에 ./을 넣어줬더니 풀렸다. 이유를 생각해보자 부분에서 http-equiv ="refresh"는 새로고침 해주는 역할이라고한다. content에서 3은 리프레쉬하는 시간이고, url은 이동 url이라고 한다. 정확히는 id를 admin./로 주면 일어나는 일이었다. 참 신기한데 이유를 모르겠는데 입력으로 admin./a 를 주면 admina가 나온다. 즉 아무 의미없는 ..

    webhacking.kr : challenge 14

    문제를 보아하니 기본적인 sql injection 문제같다. 근데 function을 보면 아닌거같다. function ck(){ var ul=document.URL; // 주소를 문자열로 반환 ul = www. ~ ul=ul.indexOf(".kr"); // ul = 18 ul=ul*30; // ul = 540 if(ul==pw.input_pwd.value) { location.href="?"+ul*pw.input_pwd.value; } else { alert("Wrong"); } } 즉 540을 input으로 주면 풀리는 문제다 혹은 주소창에 ?ul*pw.input_pwd.value 를 넣어주면 되는데 이거는 계산이….ㅎㅎ 암튼 이정도로 끝