webhacking/etc 54

webhacking.kr 25, 26, 28, 30

25. 어떤 함수가 덮어씌워있거나 끝에 확장자 txt가 붙는거같은데 널바이트를 붙이면 뒤에는해석 안한다. /?file=password.php%00 26.admin을 그냥 입력하면 안되고, decoding했을때 admin이어야 한다. admin은 인코딩 사이트에서 인코딩해도 admin이므로 직접 하는수밖에 없다. 인코딩은 글자 하나당 %16진수 아스키코드로 하면 된다. 한번하면 %61%64%6d%69%6e이고, 두번하면 %2561%2564%256d%2569%256e가 되므로 입력하면 통과. 28..htaccess를 에디트플러스로 만든 후에 내용AddType application/x-httpd-php-source .phps .php를 추가해준다이 뜻은 .phps .php확장자의 파일들을 php-source파..

webhacking/etc 2015.01.15

wargame.kr crack_crack_crack_it

내 주언어인 파이썬으로 짜려고 했는데 파이썬의 crypt모듈은 리눅스에서만 쓸 수 있다. 그냥 리눅스 키기 싫어서 php로 짰는데 리눅스 키더라도 파이썬이 더 편했을것같다. php에는 crypt()라는 함수가 있어서 이걸로 짰다. 찾아보니 파이썬 모듈도 있음. http://www.sabren.net/code/python/crypt/md5crypt.py # -*- encoding: cp949 -*- import md5crypt,string b = string.ascii_lowercase+string.digits for l in b: print l for k in b: for j in b: for i in b: id = 'G4HeulB'+l+k+j+b if md5crypt.unix_md5_crypt(id,'..

webhacking/etc 2015.01.12

WeChall Prime Factory, Training: Math Pyramid, hi

Prime Factory 100만이 넘는 최초의 소수 중에서 소수 각각 자리의 합이 또 소수인 수를 두개 구해서 이어서 보내라. # -*- encoding: cp949 -*- n = 1000000; cnt = 0 while 1: for i in range(1,n): if n%i==0 and i!=1: break elif i==n-1: sum = 0 for i in range(len(str(n))): sum += int(str(n)[i]) for j in range(1,sum): if sum%j==0 and j!=1: break elif j==sum-1: cnt += 1 if cnt == 2: print str(before)+str(n) exit(1) before = n n += 1 Training: Ma..

webhacking/etc 2015.01.12

webhacking.kr 3,4,11

3. 퍼즐 풀고 이름쓰는공간이 나오는데 이름 쓰면서 answer인자가 옆으로 들어가는데 끝에 ||1을 붙여 주면 answer부분이 항상 참이 되서 답 도출. 4.==으로 끝나므로 base64인코딩 예상 가능. 디코딩 후 영소문자+숫자 40글자. sha1예측 가능.두번 디코딩하면 test나옴. 11.정규표현식$pat="/[1-3][a-f]{5}_.*본인 아이피 주소.*\tp\ta\ts\ts/";[1-3]은 1~3중에 하나. [a-f]{5}는 a~f중에 하나. 그리고 그게 5개. _는그대로, .*는 그뒤에 문자가 들어가야됨. \t은 url인코딩해서 집어넣으면.?val=1aaaaa_본인 아이피 주소%09p%09a%09s%09s

webhacking/etc 2015.01.08

선린 ctf web

http://ctf.uproot.co.kr/challenge.php 의 웹문제. web1퍼즐을 풀지 말고 소스를 보면.이라고 나와있는데 빨간색 부분이 의심스럽다. 저기로 들어가보면 클리어. web2테트리스게임에서 한번 다 죽어보면 1억점을 넘기라고 한다. 개발자도구를 열어서 보면Network 카테고리에 흐름이 보인다. 딱 봐도 check.php?score=177부분에서 177점이라는 스코어가 보내지는걸 알 수 있다.score을 변조해서 보내면 클리어. web3 링크를 타고 넘어가면 윗동네에서 미제 어른 패드로 접속하라는 글과 함께 현재 국가와 유저 에이전트 정보가 나온다. 윗동네의 구분은 http://121.180.175.72/3pig/pass.php?country=KO 에서의 끝에 get방식으로 넘어가..

webhacking/etc 2015.01.07

WeChall Training: WWW-Robots, Training: WWW-Basics, Limited Access

WWW-Robots http://www.wechall.net/robots.txt Training: WWW-Basics 본인 웹서버에 웹페이지를 직접 만들거나 그냥 코딩해도 된다. # -*- encoding: cp949 -*- import socket s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('192.168.219.143',60)) s.listen(1) conn,addr = s.accept() if conn.recv(10000).find('GET /qkqhxla1/qkqhxla1.html HTTP/1.1') != -1: conn.sendall('My name is qkqhxla1 and iChall.') Limited Access 웹해킹...

webhacking/etc 2015.01.05

Security Override Decryption 1~7

level 1. rot13으로 암호화되있다고 한다. http://ko.wikipedia.org/wiki/ROT13첫번째 문자열은 본인 아이디 같다. # -*- coding: euc-kr -*- enc = 'dxdukyn, jung vf Frgrp Nfgebabzl' dic = {} small = [chr(x) for x in range(97,123)] big = [chr(x) for x in range(65,91)] for i in range(26): if ord(big[i])+13=65: dic[big[i]]=chr(ord(big[i])-13) if ord(small[i])+13=97: dic[small[i]]=chr(ord(small[i])-13) answer = [] for i in range(le..

webhacking/etc 2014.12.21

Security Override Advanced 2

이전에 풀었던 xcz.kr 21번처럼 php가 엄청나게 난독화되어있다. xcz.kr 21번을 풀면서 난독화에 대해서 조금 익숙해져서 이번에는 일일히 복호화하는데 시간이 좀 덜 걸렸다. 요령을 적자면 1. 주석처리된 부분을 지운다. 2. 함수 하나에 한줄이 차지하게 정렬한다. 3. 최대한 많은 범위를 한번에 치환한다. 자잘한것은 놔두고, 한번 치환 후 눈치를 봐서 치환하던지, 그냥 놔두던지 한다. 3번같은경우 주석을 지우면 $_717=base64_decode(base64_decode(base64_decode(base64_decode(base64_encode('V1cxR2VscFVXVEJZTWxKc1dUSTVhMXBSUFQwPQ==')))));;;;;;;;;;;;;;;;; 같은 $717변수는 딱 보면 bas..

webhacking/etc 2014.12.21

Security Override Advanced 1

라는 코드가 있고 필터링들을 통과해서 complete_advanced_1로 가게되면 성공이다. ==과 ===과 strcmp과의 차이점을 잘 이해해야 한다. ==은 그냥 형을 따지지 않고 같으면 같다고 나오고, ===은 엄격한 비교로 데이터형까지 같아야 같다고 나온다. strcmp는 문자열이 같으면 0, 사전 순서에 따라 1또는 -1이 리턴된다. 즉 위의 필터링을 보면... $input===0을 피해가기 위해서는 대충 0으로 변환되는... "00"같은걸로 형이 다르면 될것이고, strcmp($input,"0000")에서 0이 안나오려면 0의 갯수를 다르게 써주면 된다. 처음엔 "00000"이런거나 NULL, false등등의 왠지 0과 비슷하게 행동할것같지만 다른 형들을 생각해봤는데 자꾸 필터링에서 걸렸다...

webhacking/etc 2014.12.19

Security Override Basic

basic level 1: 주석에 써있다. basic level 2: 입력하는 폼 부분을 찾아보면... AdminPassword: 이라고 히든 속성으로 하나가 있다.pass.html로 가보면된다. basic level 3: user-agent값이 다르다고 안된다고 나온다. User agent Switcher로 하나하나 바꾸다 보니googlebot일때 됬다고 나온다. basic level 4: 자동으로 비밀번호가 입력되 있으니, 어드민으로 들어가라고 한다. 처음엔 그냥 크롬 개발자도구로 보내지는 값만 admin으로 바꿨는데....You have the right idea, although this challenge's focus is to make sure you know how to edit and ex..

webhacking/etc 2014.12.17

Security Override Recon

Recon level 1: securityoverride.org의 아이피 주소를 찾으시오. ping으로 보내보면 된다. ping securityoverride.org 하면 206.214.216.120가 나온다. Recon level 2: 네임서버 두 개를 찾으시오. nslookup툴로 찾으면 된다. 옵션을 -ns로 주면 된다. nslookup -type=ns www.securityoverride.orgns1.423network.com internet address = 206.214.216.118ns2.423network.com internet address = 206.214.216.119라고 두개가 나온다. Recon level 3: 이 서버의 php버전은 몇인가? PHP/*.*.*와 같은 형식으로 작성..

webhacking/etc 2014.12.17

xcz.kr 21번.

난독화가 되어있다....... 이건 코드 난독화라기보다는 변수명? 난독화라 복호화할 수 있는 툴이 없다.(적어도 내가 알기로는... ) 파이썬과 hwp를 이용해서 복호화를 했다. 파이썬에서는 \x71같은거는 알아서 아스키로 변환해 준다. 그리고 대부분 코드 특성상 세미콜론(;)으로 한줄이 끝나는걸 생각해 ;를 ;\n으로 바꾸어 출력했다. (for문의 ;도 한줄 내려가지만 어쩔수없었음.) 바꾸어 출력한뒤 줄을 맞추고, 각각의 변수명이 엄청나게 더럽게 되있다. 예로 그냥 $a라고 쓰면 될것을.. ${"GLOBALS"}["hpceeyxto"]="a"; ${${"GLOBALS"}["hpceeyxto"]}로 선언해놓았다. 이것은 단순히 $a이다.. 그리고 아랫줄에 $raraw="a"; 요런식으로 써서 같은 변수인..

webhacking/etc 2014.12.07

xcz.kr 32번.

라고 있는데... a를 받아서 이걸 urlencode한다. 그 후에 12735366333132132465461????????????????????????????? 와 비교해서 같으면 통과이다. php의 트릭을 이용하여 키 값을 구하라고 하는데 여기서 이용해야 하는 php트릭은 php가 매우 작은 숫자 비교는 같다고 처리한다는 것이다. rubiya님 블로그에 잘 정리가 되있다. http://blog.naver.com/withrubiya/70175920455 를 출력해보면 다름에도 불구하고 작은 차이는 무시하여 1을 출력하는걸 알 수 있다. 1273536633313213246546100000000000000000000000000000 그냥 요런식으로 보내면 매우 작은 차이라 통과된다. 0이 아닌 다른 아무 ..

webhacking/etc 2014.12.07

xcz.kr 18번.

18. 라고 소스가 있다. 가벼운 난독화가 적용되었는데 아래의 echo $key부분을 출력하면 된다. 키를 출력하기 위해서는 1. 여기서 거짓이 되게 하여 exit로 가지 않게 한다. if(empty($liillillilliliili) || empty($liillillliiiliili) || empty($lilllillliiiliili)){exit ('wrong T.T');} 2. 아래 조건문을 참을 만들어줘야 된다. if(test($lililillliiiliili)==" - 103 - 105 - 118 - 101 - 109 - 101 - 112 - 97 - 115 - 115 - 119 - 111 - 114 - 100" || test($lilililliiiiliill) == " - 107 - 101 - ..

webhacking/etc 2014.12.07

GoogleBig - HackGame

1. 소스보기 2. 시스코 라우터를 찾아서 인증을 하라는데; http://blog.naver.com/jjp4rk/80019659546 요기 들어가보니 목록 중에서 찾아서 인증을 하면 된다; 3. /p4s5.js 를 불러오는데 들어가보면 이진수. 8자리씩 있는거보니 각각 십진수로 변화시킨후 아스키값으로 변화시켜보면 될듯싶다. str = '01010000 01100001 01110011 01110011 00100000 01101001 01110011 00100000 01000111 01101111 01101111 01100111 01101100 00110011 01100010 00110001 01100111' an = [] for s in str.split(): an.append(chr(int(s,2))) ..

webhacking/etc 2014.12.01

Enigmagroup basic/Prerequisites, Spoofing, URL Manipulation

Prerequisites level 1 : 소스 보기 하면 답이 있다. Prerequisites level 2 : fopen: could not open file '/www/htdocs/missions/basics/pre/2/dontlookinhere/password.txt'; 이런게 나오는데 저 경로의 파일을 열수 없다는 뜻이다. 현재 url의 경로가 /missions/basics/pre/2/ 이므로 뒤에 /dontlookinhere/ 를 더 쳐보면 디렉터리 리스팅. password.inc가 있다. Prerequisites level 3 : 소스를 보면.. 구글 구글 구글... /robots.txt를 들어가보면 /f0rk가 있고 거기에 config.inc가 있다. Spoofing One : 프록시를 사..

webhacking/etc 2014.11.30

overthewire natas 11

급 난이도 상승; xor_encrypt함수 내부의 $key값은 내가 알아내야된다. 처음엔 ''라고 있어서 이거 자체가 키값인줄 알았는데 똑같은 소스코드로 돌려봤는데 같은 결과가 안나오고, censored라는 단어를 찾아보니 검열되어 삭제된 그런 뜻이 있어서 key값을 구해야된다는걸 알았다. 쿠키는 아래 함수로 만들어진다. function saveData($d) { setcookie("data", base64_encode(xor_encrypt(json_encode($d))));} 이게 맨 마지막에 실행된다. 실행되는 부분은 $data = loadData($defaultdata); if(array_key_exists("bgcolor",$_REQUEST)) { if (preg_match('/^#(?:[a-f\..

webhacking/etc 2014.11.24

overthewire natas 1~10

http://natas0.natas.labs.overthewire.org/ id : natas0, pw: natas0 0,1 : 소스보기. 2 : http://natas2.natas.labs.overthewire.org/files/pixel.png 라는 경로가 있는데 files/까지 치면 디렉터리 리스팅 3 : 구글은 찾을지도 모른다. /robots.txt 4 : http://natas5.natas.labs.overthewire.org/에서 인증을 받고와야 된다. 저기서 온것처럼 Referer를 저기로 바꿔주면 된다. 5 : 로그인이 안되있다고 한다. 쿠키값에 loggedin이 0으로 되있는데 1로 바꾸면 통과 6 : "includes/secret.inc" 폴더를 인클루드 하므로 거기로 들어가보면 된다...

webhacking/etc 2014.11.24

wargame.kr type_confusion

$json = json_decode($_POST['json']); $key = gen_key(); if ($json->key == $key) { $ret = ["code" => true, "flag" => auth_code("type confusion")]; } else { $ret = ["code" => false]; } function gen_key(){ $key = uniqid("welcome to wargame.kr!_", true); $key = sha1($key); return $key; } 중요부분. POST방식으로 json값을 받아서 $json->key와 $key와 같으면 통과. $key는 gen_key()함수로 값을 얻음. gen_key()의 리턴값은 랜덤한 문자열이 sha1로 인코딩된값..

webhacking/etc 2014.10.30

wargame.kr php? c?

c의 오버플로우 관련 문제. d1과 d2를 post로 받은 후 p7.c파일을 컴파일해서 /tmp/p7로 만든 후 d1을 인자로 줘서 프로그래밍 실행 후 결과가 1이 아니면서 d2와 나온 결과가 같으면 키값 출력. 우선 뭔지 알려면 컴파일하게 되는 p7.c소스코드를 봐야된다. p7.c를 주소창에 입력해보면 소스코드가 나온다. #include #include void nono(); int main(int argc,char **argv){ int i; if(argc!=2){nono();} i=atoi(argv[1]); if(i4){nono();} if(i

webhacking/etc 2014.10.04

wargame.kr strcmp

코드게이트 2013에서 나왔던 php strcmp취약점. 찾아보니 루비야님이 잘 정리 해놓으셨음... http://blog.naver.com/withrubiya/70173344266 데이터 전송시 배열형태로 전송하면 된다. password[]=a 배열 형태이면 무조건 0이 반환.... 근데 루비야님의 실험을 보면 php 5.2부터는 제대로 1로 나온다고함.. $password는 sha1로 변환한 엄청나게 복잡한 값이고 내가 입력해서 POST방식으로 받은 password변수와 비교해서 0이 리턴되면 통과. php 4버전 이하로 strcmp함수에 배열값이 들어왔을때 NULL값이 반환되어 무조건 0이 반환된다. PHP5부터는 패치되서 안된다고 한다.

webhacking/etc 2014.10.02

wargame.kr wtf_code

이거밖에 없다. 꾸쌤이 이거에 대해 언급하지 않았으면 계속 몰랐을듯 싶다. 스페이스바, 탭 줄내림만으로 이루어진 white space라는 이상한 언어이다. http://en.wikipedia.org/wiki/Whitespace_(programming_language) white space라는것만 알면 인터프리터 찾아서 돌리면 되므로 쉽다. http://ws2js.luilak.net/interpreter.html 근데 언제봐도 신기하다... 이거말고도 brainfuck라는 이상한 언어도 있다 ㅋㅋ http://cafe.naver.com/sourcemulti/42579 http://en.wikipedia.org/wiki/Brainfuck

webhacking/etc 2014.09.28