본문 바로가기

Webhacking.kr

(20)
old-61 코드 분석"; echo "view-source"; $_GET['id'] = addslashes($_GET['id']); if(preg_match("/\\(|\\)|select|from|,|by|\\./i",$_GET['id'])) exit("Access Denied"); if(strlen($_GET['id'])>15) exit("Access Denied"); $result = mysqli_fetch_array(mysqli_query($db,"select {$_GET['id']} from chall61 order by id desc limit 1")); echo "{$result['id']}"; if($result['id'] == "admin") solve(61); echo "";?>URL ..
old-52 처음 문제 화면을 열면 이런 페이지가 나타난다.'admin page' 를 클릭하면 로그인 창이 뜬다.‘취소’를 클릭하고 소스를 보자. 코드분석"; if($_SESSION['login'] == "admin"){ if(preg_match("/^172\\.17\\.0\\./",$_SERVER['REMOTE_ADDR'])) echo $flag; else echo "Only access from virtual IP address"; } else echo "You are not admin"; echo "[logout]"; exit;}if(!$_SESSION['login']){ if(preg_match("/logout=1/",$_SERVER['HTTP_REFERER'])){ header('..
old-27 소스코드 분석# : 샵(주석 용도로 쓰이는 경우 차단)select : SELECT 키워드 차단\\( : 왼쪽 괄호 ( 차단: 공백(스페이스) 차단 — 오직 공백 문자(ASCII 0x20) 만limit : LIMIT 키워드 차단= : 등호(비교/할당연산자) 차단0x : 16진수 리터럴 접두사 차단즉, #, select, (, (스페이스), limit, =, 0x 이 어느 하나라도 포함되면 exit("no hack") 이 실행\ 익스플로잇Payloador no like 2--=>select id from chall27 where id='guest' and no=(0)%09or%09no%09like%092--%09%09는 TAB 키의 URL 인코딩이다.필터링 로직에서 TAB을 필터링 하지 않으므로 공백 문자(..
old-21 문제에 진입하면 BLIND SQL INJECTION 이라는 문구와 함께 로그인 창이 뜬다.guest를 입력했더니 로그인 “success”가 출력된다.올바르지 않은 비밀번호를 입력하면 login fail이 출력된다.혹시 내가 알아야 되는 것이 admin일까 싶어서 admin, admin을 넣어 봤더니 login fail이 나온다.일단 URL을 보자.id와 pw값을 전달하는 데 GET방식을 이용함을 알 수 있다. 또한 url을 통해 컬럼 값을 유추할 수 있다.그렇다면 파라미터를 통해 SQL Injection을 시도해본다.guest' or id='admin' and pw='' or 1=1# 지금까지 볼 수 없었던 “wrong password”문구를 볼 수 있다.쿼리를 약간 변형해보자.guest or id='a..
old-32 본인의 아이디를 클릭했을 떄 투표가 되는데, 이떄 HTTP 요청은 이렇다.GET /challenge/code-5/?hit=Korjsh HTTP/1.1Host: webhacking.krCookie: vote_check=ok; PHPSESSID=6kk1r5vd5an95e8pi0b91c9rh5User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip,..
old-25 취약점 분석 flag 파일이 어디있는지는 알 수 있다.문제는 어떻게 PHP 소스코드를 유출시키는가다.php://filter로 소스가 보이면 → LFI(로컬 파일 포함/읽기) 취약점. 추가로 index.php 같은 파일을 읽어 앱의 동작/필터 규칙을 파악할 수 있음http://webhacking.kr:10001/?file=file:///var/www/html/flag나 http://webhacking.kr:10001/../../../../var/www/html/flag 등의 방법으로는 불가능하다.Path Traversal은 안 먹힌다는 것⇒ 남은 방법은 LFI밖에 없다.익스플로잇Payloadhttp://webhacking.kr:10001/?file=php://filter/convert.base64-enc..
old-50 코드 분석SQL INJECTIONid : pw :    |"); if($result['lv']==2) echo("level : 2"); } if($result['lv']=="3") solve(50); if(!$result) echo("Wrong"); }?>view-sourceid, pw 파라미터 값을 받아 각각을 addslashes()로 이스케이프 시킨다.id 파라미터 인코딩 방식을 "utf-8" 에서 "euc-kr"로 바꾼다.id, pw에 from , pw , ( , ) , 공백 , % , = , > , id에 union이 들어갈 경우도 프로그램을 종료한다.sql 쿼리를 실행해 lv 값을 가져온다.lv 값이 3이면 clearSQL문을 따로 빼보자...
old-43 RevengE 문제 페이지에 접속해보면 다음과 같이 소스코드가 제공된다.Webshell을 업로드하여 ‘cat /flag’ 명령어를 실행해 FLAG 값을 알아내야 한다.소스코드 취약점 분석readImage($_FILES['file']['tmp_name']); $image->resizeImage(500, 500, imagick::FILTER_GAUSSIAN, 10); $image->writeImage("./upload/".$name); echo "Done!./upload/{$name}"; }?>우선 이 코드를 분석해보자.$image = new Imagick();Imagick 객체 생성이미지 처리 기능을 사용할 준비를 함내부적으로는 ImageMagick 기능을 사용즉:“이제 이미지 다룰 객체 하나 만들겠다..