Index of /webhacking.kr 1(200): Cookie 2(500): Blind SQL Injection 3(350): SQL Injection 4(150): Encode/Decode 5(300): 코드 분석, MySQL 특징 6(100): Encode/Decode 7(300): SQL Injection (Bypass) 8(350): SQL Injection (Insert) 9(900): Apache Auth Bypass, Blind SQL Injection (If) 10(250): 코드 분석 및 변조 11(300): 정규표현식 12(250): 코드 분석 13(1000): Blind SQL Injection 14(100): 코드 분석 15(50): 코드 분석 및 변조 16(100): 코드 ..
source 가 주어져 있다. id 파라미터가 없을 경우 $_GET[id] 는 guest가 입력이 된다.$_GET[id] 파라미터에는 아래와 같은 문자가 있거나 18글자 이상이 되면 Access Denied가 발생한다. select $_GET[id] from c_61 order by id desc limit 1다른 문제들과 달리 특이하게 컬럼 위치에 입력한 값이 들어가는 것을 볼 수 있다.그리고 id 컬럼의 값으로 admin이 나오면 문제를 해결할 수 있다. ?id=id 해서 Query를 완성시켜주면 아래와 같이 zombie 라는 값이 출력되는 것을 볼 수 있다. admin을 만들어주기 위해서는 별칭을 이용하면 쉽게 해결할 수 있다.?id=0x61646d696e id또는?id=0x61646d696e as..
페이지에 접근하면 Access Denied와 함께 소스 파일을 제공한다. 소스 파일을 보면 $_COOKIE[PHPSESSID]에 0~9의 값이 있을 경우 Access Denied가 발생하는 것을 볼 수 있다.따라서 쿠키값을 문자로만 구성하여 적용시키고 다시 로그인을 하면 Access Denied 대신에 hi라는 문구를 볼 수 있다. GET 파라미터로 mode=auth가 있을 경우 Auth~를 출력한 다음 readme/$_SESSION[id].txt 파일의 내용을 $result에 담는다.그리고 $result게 담긴 값과 $_SESSION[id] 값이 같을 경우 Done! 이라는 표시와 함께 문제를 해결할 수 있다. mode=auth가 없을 경우에는 readme/$_SESSION[id].txt 파일을 만들어..
소스와 함께 JOIN, LOGIN을 할 수 있는 테이블을 볼 수 있다. 소스를 눌러서 내용을 보면 위에 있는 코드는 LOGIN 부분이고 아래 부분은 JOIN 부분인 것을 알 수 있다. - LOGIN 부분($_POST[lid] && $_POST[lphone])두 값이 전송되면 c59 테이블에서 해당 값이 있는 지 조회를 하고 조회한 아이디가 admin이면 문제를 해결할 수 있다. - JOIN 부분($_POST[id] && $_POST[phone])두 값이 전송되면 여러 검증을 거치게 된다. phone은 20글자가 넘으면 접근이 제한되고 admin|0x|#|hex|char|ascii|ord|from|select|union가 있을 경우에도 접근이 제한된다.id는 admin이라는 문자가 올 수 없다. inser..
SWF 플래시 문제이다. 소스를 보면 kk.js 파일만 보인다. 개발자 도구를 이용하여 정보를 살펴보면 kk.js 외에도 kk2.js, hackme.swf 를 볼 수 있다. kk.js 파일kk = hack kk2.js 파일kk = hackme.swf hackme.swf만 실행 swf 소스를 보면 하단에 pw가 맞을 경우에 이동되는 URL 경로를 볼 수 있다. 해당 경로로 이동해보면 문제를 풀 수 있다. 다른 방법으로 크롬에서는 URL 경로창에 마우스를 클릭하여 활성화하고 Ctrl + s 하면 해당 swf 파일을 다운 받을 수 있다.swf 파일을 다운 받아서 디컴파일러를 이용하여 문제를 풀 수도 있다. 해당 경로로 바로 이동해도 되지만 pw 다음에 나와있는 10;(_ 문자열 값을 입력해보면 pw 값과 동일..
message를 적을 수 있고 secret 옵션으로 yes, no가 있다.그리고 Secret key를 입력할 수 있고 phps 소스 파일이 주어져 있다. 소스 파일을 보면 $_POST[pw]와 $secret_key가 같으면 문제를 풀 수 있고, $_GET[msg]와 $_GET[se] 값을 입력하면 $_SESSION[id]와 $secret_key와 함께 challenge57msg 테이블에 삽입이 된다.msg를 입력할때 $_GET[se]는 yes를 선택하면 1, no를 선택하면 0의 값이 같이 삽입되는 것을 볼 수 있다.$_GET[se] 값이 1일 경우에는 Done 표시가 발생하나 0일 경우에는 표시가 발생하지 않는 것을 알 수 있다.(다른 방법으로 0을 입력해보면 1과 동일하게 Done 표시가 발생하여 공..
BOARD 게시판에 2개의 글과 검색 기능을 볼 수 있다. admin의 readme 글을 눌러보면 아래와 같이 access denied가 표시되면서 내용을 볼 수가 없다. guest의 hi~ 글을 눌러보면 아래와 같이 hi~ 라는 내용을 볼 수가 있다. 즉, admin이 작성한 readme의 내용을 보면 문제를 풀 수 있다. 검색 기능을 이용하면 내용을 알아낼 수 있다.h를 검색하면 모든 글이 목록에 표시가 되고 i를 검색하면 guest 글만 표시가 된다.내용의 일부만으로 검색이 되는 것을 알 수 있고 admin에 내용 중에 h는 있지만 i는 없는 것을 알 수 있다.이러한 방법으로 admin의 내용을 유추할 수는 있지만 비효율적이다. SQL에서 Like를 이용한 비교에서 _ 와 %가 와일드 카드 문자로 ..
크롬에서는 동작하지 않지만 IE에서는 초록색 물컹이가 마우스 포인터를 잡으러 따라온다.rank를 눌러보면 다른 사람의 점수를 볼 수 있다. score 점수가 2147483647int 형(32 비트) 최대값이다. 마지막에 small letter 이라는 표시가 있다.다른 정보를 알아보기 위해서 소스를 보면 hint가 나와있다. 테이블에 대한 정보가 힌트로 나와있다.(ip는 id와 같고, score, password가 있다.) 점수를 클릭해보면 id // score 가 표시가 된다. or 또는 || 를 이용해서 항상 참으로 만들어주면 id에 localhost가 표시된다.조건이 거짓이 될 경우 score에 해당하는 id가 표시된다.즉, 이를 이용해서 SQL Injection을 할 수 있다.하지만, union, ..
페이지에 접근하면 Password is 와 함께 패스워드가 한 글자씩 출력이 된다.따라서 문제를 풀기 위해서 한 글자씩 출력되는 것을 받아적거나 스크립트를 짜서 알아내야 한다. 더 쉬운 방법을 찾아보기 위해서 소스를 보면 출력되는 코드를 볼 수 있다. 33번 라인이 페이지에 출력을 하는 부분이 있는데 여기에 = 대신에 += 을 사용해서 문자가 누적해서 기록되도록 바꾸고 36번 라인은 삭제하였다.그리고 해당 스크립트를 콘솔로 실행을 하면 패스워드가 한꺼번에 보인다. 패스워드를 인증하면 문제를 풀 수 있다.
hello world 소스를 보면 index.phps 파일이 주어져 있다. index.phps 파일을 보면 answer 파라미터로 $hidden_table 을 입력해주면 문제를 풀 수 있다.그리고 val 파라미터를 통해서 입력을 할 수 있지만 필터링이 되어있는 것을 볼 수 있다. select test1 from $hidden_table where test2=$_GET[val]val 이 입력되는 부분을 보면 '(single-quote)가 없는 것을 볼 수 있다.val=1 을 입력하면 testval=2 를 입력하면 guestval=3 을 입력하면 adminval=4 를 입력하면 oldzombie가 출력이 되지만, 테이블 명을 알아낼 수는 없다.테이블 명을 알아내기 위해서는 UNION을 써야하지만 해당 문자도..
Admin page 라는 표시와 함께 ID, PW를 입력해서 로그인을 할 수 있고, Source 가 있는 것을 볼 수 있다. 먼저, 소스를 보면 id, pw를 입력받아서 pw는 md5() 함수를 거친 다음 비교를 통해서 id가 admin 일 경우 문제를 풀 수 있다.간단하게 id 부분에 admin'-- - 을 넣고 pw 부분에는 임의의 값을 집어넣어서 인증 우회를 시도하였으나 실패하였다.소스 코드 상에는 나와있지 않지만 '(single quote)를 입력할 경우 \(backslash)가 붙어서 우회가 정상적으로 되지 않는 것 같다.다른 방법을 찾아보기 위해서 소스를 다시 보면 md5() 함수에 true 라는 옵션이 추가되어 있는 것을 볼 수 있다. string md5 ( string $str [, boo..
Free Training Zone ftp://do9.kr/Vmware_Redhat_9_FTZ.zipVMware 파일로 되어 있는 FTZ를 다운 받아서 압축을 풀어준다. VMware Fusion을 실행해서 Red Hat Linux.vmx 파일을 열어준다.설치는 아래와 같이 진행하면 된다. guest 계정으로 로그인 한다. (id: guest) $ /sbin/ifconfig 명령어로 ip를 확인한다. 맥에서 터미널을 열고 ssh로 접속하면 된다. FTZ에서 사용할 수 있는 계정은 아래와 같다.일반계정: guest관리자계정: root/hackerschool리눅스 명령어를 훈련할 수 있는 계정: trainer1/trainer1단계별로 문제를 풀어볼 수 있는 계정: level1/level1
문제 페이지에 나와있는 대로 id와 pw 값을 guset로 제출을 하면 level : 1 이라는 정보를 출력한다. 더 많은 정보를 얻기 위해서 소스를 보면 index.phps 소스 파일이 주어져 있는 것을 볼 수 있다. index.phps 소스 파일을 보면 Challenge 45 문제와 동일하게 mb_convert_encoding() 함수를 사용하고 있는 것을 볼 수 있다. select lv from members where id='$_GET[id]' and pw=md5('$_GET[pw]') 입력할 수 있는 두 개의 값 id, pw 중에서 id에 대해서만 mb_convert_encoding() 함수를 사용하고 있기 때문에 멀티바이트를 이용하여 '(single-quote)를 닫아주고 /* 주석을 열어준다..
SQL INJECTION 문제 소스를 보면 index.phps 소스 파일이 주어져 있다. 소스 파일을 보면 GET[lv]로 입력되는 값 중에 union,select,or,and 등을 입력하면 종료가 된다.따라서 소스 파일에 나와있는 문자를 제외하고 조건으로 id=admin을 만들어주면 된다. Query를 보면 single quote가 없기 때문에 hex(0x61646d696e)를 이용하여 admin을 만들어주고 or 대신에 || 를 이용해서 우회해주면 문제를 풀 수 있다. ?lv=1을 입력할 경우 zzibong이 발생하고 ?lv=2를 입력하면 아무런 값도 발생하지 않는다.따라서, ?lv=2||id=0x61646d696e 를 입력하면 문제를 우회하여 풀 수 있다.
PHP Object Injection PHP magic methodsPHP 클래스에는 magic functions라 불리는 특별한 메소드가 있다.magic functions은 이름을 보면 '__' 으로 시작하는 특징이 있다.__construct(), __destruct(), __toString(), __sleep(), __wakeup(), ... __construct()클래스의 생성자새로운 Object가 생성될 때마다 메소드 호출 __destruct()클래스의 소멸자PHP Script가 끝나면 무작위로 메소드 호출특정 Object 모든 참조가 삭제된 직후 또는 Object가 명시적으로 파기된 후 메소드 호출 construct_destruct.php:Colored by Color Scriptercs __t..