- Install wget# cd /usr/ports/ftp/wget/# make install clean - Usagehttps://code.google.com/p/firmware-mod-kit/에서 firmware-mod-kit을 wget을 이용해서 받기(Modify firmware images without recompiling!)# wget https://firmware-mod-kit.googlecode.com/files/fmk_099.tar.gz
$ find [찾을 대상 경로] [옵션] [파일명] | xargs grep [옵션] [찾을 문자열] -name [파일명]$ find . -name "*.txt" | xargs grep --color=auto -n do9darkgrep 옵션색 표시: --color=auto줄 번호 표시: -n (-n[숫자] 를 할 경우, 찾은 문자열의 줄 번호에서 숫자만큼 위아래 줄도 포함해서 보여줌)대소문자 구별무시: -i해당 문자열만 검색: -l바이너리 파일 검색: -a (파일에 NULL(0x00)이 있을 경우 바이너리 파일로 인식)에러메시지 출력 제외: 2>/dev/null -type [타입]$ find / -type f | xargs grep "do9dark" -perm [권한] $ find / -perm -4000..
- 단축키 잠금: [Win+L] 파일탐색기: [Win+E] 바탕화면: [Win+D] 시스템정보: [Win+Pause] 실행창: [Win+R] 바로가기 실행(작업표시줄): [Win+숫자] - 실행 [Win+R] 윈도우 버전 확인: winver원격 데스크탑: mstsc 네트워크 연결: ncpa.cpl 로컬 그룹정책 편집기: gpedit.msc - 보내기 설정 1. Win+R 실행창에서 shell:sendto 입력하면 아래와 같이 사용자의 SendTo 디렉터리가 열림 C:\Users\Do\AppData\Roaming\Microsoft\Windows\SendTo 2. 해당 디렉터리에 실행할 프로그램의 바로가기 파일을 생성 3. 임의의 파일 선택 후 마우스 우클릭하여 보내기 탭에 보면 실행할 프로그램의 바로가기 ..
ALL_ALL_TABLESALL_ALL_TABLES describes all object tables and relational tables accessible to the current user. ALL_TABLESALL_TABLES describes all relational tables accessible to the current user. To gather statistics for this view, use the SQL ANALYZE statement. TABSTABS is a synonym for USER_TABLES. TABTAB is included for compatibility with Oracle version 5. Oracle Corporation recommends that y..
1. Burp Suite에서 Proxy > Options > Proxy Listeners > Add 를 선택하고 포트 번호를 입력해주고 All interfaces 선택하고 확인 2. 생성한 Listener의 Running 선택 3. Android 디바이스에서 환경설정 > Wi-Fi > 해당 네트워크 선택하여 네트워크 설정 변경 (디바이스마다 차이가 있으나 일반적으로 누르고 있으면 설정창이 뜸) 4. 고급 옵션 표시 선택하고 프록시 설정 > 수동으로 변경한 다음 Burp Suite가 켜져있는 컴퓨터의 IP 주소와 앞에서 설정한 포트 번호를 입력 5. Android 디바이스에서 HTTP 통신을 해보면 프록시가 잡히는 것을 확인 6. HTTPS 프록시도 잡기 위해서는 인증서가 필요 인증서를 받기 위해서 And..
1. Burp Suite에서 Proxy > Options > Proxy Listeners > Add 를 선택하고 포트 번호를 입력해주고 All interfaces 선택하고 확인 2. 생성한 Listener를 Running 선택 3. iOS 디바이스에서 설정 > Wi-Fi > 세부정보 보기 4. 세부정보 하단에 HTTP 프록시 수동을 선택하고 Burp Suite가 켜져있는 컴퓨터의 IP 주소와 앞에서 설정한 포트 번호를 입력 5. iOS 디바이스에서 HTTP 통신을 해보면 프록시가 잡히는 것을 확인 6. HTTPS 프록시도 잡기 위해서는 인증서가 필요 인증서를 받기 위해서 iOS 디바이스에서 사파리를 이용하여 http://burp 로 이동한 뒤 CA Certificate 선택 7. PortSwigger C..
- Install vsftpd# cd /usr/ports/ftp/vsftpd/# make install clean - Configuration# vi /usr/local/etc/vsftpd.confanonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_file=/var/log/vsftpd.logxferlog_std_format=YESftpd_banner=Welcome to DO9 FTP service.secure_chroot_dir=/usr/local/share/vsftpd/emptylisten=YESbackgroun..
PHP 5.3.0부터 POSIX Regex 대신 PCRE Regex가 사용된다. (PHP 6.0부터 완전 제거) 자세한 내용은 아래를 참고하면 된다. http://php.net/manual/en/reference.pcre.pattern.posix.php As of PHP 5.3.0, the POSIX Regex extension is deprecated. There are a number of differences between POSIX regex and PCRE regex. This page lists the most notable ones that are necessary to know when converting to PCRE. The PCRE functions require that the pa..
PHP 5.3 이상 버전에서 strcmp() 함수를 이용하여 비교를 할 경우에 발생할 수 있는 취약점 ID: PW: Colored by Color Scripter cs 위와 같이 id와 pw를 입력하여 인증할 수 있는 창이 있다. 여기에서 strcmp($pass, $pw) == 0 이 부분에 취약한 부분이 있다. 일반적으로 strcmp($str1, $str2)를 비교하여 str1이 str2보다 작으면 0보다 작은 값을 반환하고, str1이 str2보다 크면 0보다 큰 값을 반환한다. 그리고 동일할 경우에 0을 반환한다. 그렇기 때문에 id는 admin, pw는 php_strcmp_vulnerability를 입력해주면 $pass와 $pw가 같기 때문에 0을 반환해서 $pass 값을 출력하게 된다. id와 ..
- Install tmux # cd /usr/ports/sysutils/tmux/ # make install clean - Configuration # vi /root/.tmux.conf # Set bind key set-option -g prefix C-x bind-key C-x last-window (이미 Ctrl+x가 있을 경우 한 번 더 입력해주면 사용 가능) # Set status bar set -g status-bg black set -g status-fg white set -g status-left '#[fg=green]#H ' set -g status-right '#[fg=yellow]#(uptime | cut -d "," -f -2)' # Highlight active window set..
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..
문제 페이지를 보면 메모와 파일을 업로드할 수 있는 것을 볼 수 있다. 위와 같이 메모와 함께 파일을 업로드해보면 아래와 같이 파일명이 3글자 이상 안된다는 것을 알 수 있다. 파일명을 123으로 해서 내용은 test 로 올려보면 아래와 같이 메모와 파일이 업로드되어 올라간 것을 볼 수 있다. 실제로 업로드된 파일에 접근해보면 내용이 null 로 변경이 되는 것을 알 수 있다. 삭제를 해보면 mode=del 과 time=1440951597 값이 전달이 되면서 메모와 업로드된 파일이 삭제되는 것을 확인할 수 있다. 구조는 알 수 없지만 파일명이 3글자로 제한되어 있다는 점과 삭제를 할 때 time 값을 토대로 데이터베이스에서 비교를 통해서 메모와 파일이 삭제되는 것이라 생각할 수 있다. 그리고 삭제를 할 ..
Mail Header injection 문제이다. 문제가 요구하는 답을 입력할 경우 문제가 풀리도록 하드 코딩되어 있다.소스를 보면 index.phps 소스 파일이 주어져 있다. 소스 파일을 보면mail("admin@webhacking.kr","readme","password is $pass",$header);부분을 볼 수 있는데 여기서 조작을 할 수 있는 부분은 $header 부분 밖에 없다. mail() 함수에 대한 자세한 내용은 아래 페이지에 자세하게 나와 있다.참고(http://php.net/manual/en/function.mail.php)bool mail ( string $to , string $subject , string $message [,string $additional_headers ..
level 1을 전송해보면 아래와 같이 zzibong information, money : 10000 이라는 정보를 얻을 수 있다. 소스를 보면 index.phps 소스 파일이 주어져 있는 것을 알 수 있다. 소스 파일을 보면 lv 부분에 여러가지 필터링이 되어 있는 것을 볼 수 있다. 실행이 되는 Query를 보면 입력 부분이 상수형으로 되어있는 것을 알 수 있다."select id,cash from members where lv=$_GET[lv]"따라서 아래와 같이 간단하게 인증 우회하여 문제를 풀 수 있다.아래 방법 외에도 2진수(0b)를 이용하거나 like, in 과 같은 연산자를 이용해서도 문제를 풀 수 있다. 띄어쓰기는 %0a, %09로 우회할 수 있다.