study 973

Enigmagroup missions/programming 4

대충 흑백이 이진수같다는건 알았지만 어떻게할줄 몰라서 여기저기 물어봤었는데.... 사진에서 1픽셀씩 얻어와서 8자리씩 끊은 후 그걸 십진수로 만들고 아스키코드로 만들면 글자가 된다고 한다. 근데 키값은 얻었는데 문제에 image.php로 전송하라고만 있을뿐 GET인지 POST인지 변수는 뭐로줘야하는지 안알려줘서 이것저것 다해봤는데도 답이 안나온다. 그래서 그냥 답만 내고 포기.... import os,sys,urllib2,Image def download_photo(img_url, filename): file_path = "%s%s" % ("C:\\Users\\Ko\\Documents\\Visual Studio 2012\\Projects\\PythonApplication27\\", filename) do..

Enigmagroup missions/programming 5

4번은 지식이 부족해서인지 잘 모르겠다. 나중에 다시 풀어봐야겠다. 5번은 이상한 언어가 중간에 있고 실행시마다 바뀐다. 미션은 이 코드를 분석해서 그 분석한 결과값을 ?ans=의 GET방식으로 보내는게 목표이다. 이건 brainfuck이라는 언어이다. 이 부분을 읽어와서 해석하면 된다. 근데 구글에 brainfuck interpreter라고 쳐봐도 자바스크립트만 나와서 파이썬용으로 찾았다. https://github.com/DoctorLai/PyUtils/blob/master/bf.py 여기에 어떤분이 친절하게 올려주셔서 가져다가 조금 수정해서 썼다. import urllib2 def bf(src, left, right, data, idx): """ brainfuck interpreter src: so..

Enigmagroup missions/programming 3

image.php에 랜덤으로 이미지가 생기는데 그 이미지를 받아서 rgb값을 분석한 뒤에 1초안에 rgb값을 post형식으로 보내라. 형식은 color=255;255;255&submit=1처럼 한다. 이미지 분석 모듈.(pil) http://kylog.tistory.com/17 http://effbot.org/downloads 여기서 참고받아서 pil모듈로 이미지를 분석하였고, url에서 이미지를 다운받는 부분이 잠시 헷갈렸는데,(이전까지는 그냥 cmd에서 wget으로 받았는데, 이 문제를 풀기 위해서는 wget으로 되지 않았다. wget으로는 세션값을 추가할수 없기 때문. wget으로 받았을시 그냥 검은색 이미지만 다운받아졌다.) 여기서 또 찾았다.http://marobiana.tistory.com/1..

Enigmagroup missions/programming 2

Objective: You have 1 second to multiply this random number 30882470 by 4 and submit it 랜덤으로 나타나는 숫자에 대해 4를 곱한 값을 적어서 1초안에 요청을 보내라. 근데 단순히 계산한값만 보내면 안된다. 보낼때 몸체부분을 보면 내가적은 답 뿐만아니라 시간, 어떤 해쉬값도 같이 가기 때문이다.(이게 하나라도 틀리면 인정 안됨.) 정규식에 익숙하지 않아서 더럽게 구분해서 짰다.. import urllib2 req = urllib2.Request('http://www.enigmagroup.org/missions/programming/2/index.php') req.add_header('cookie','enigmafiedV4=내 쿠키') r..

Enigmagroup missions/programming 1

Your objective is to send a POST header to this script. The POST content must contain your IP Address and your USERNAME. The variable names are ip & username! ONE MORE THING... MAKE SURE you send a cookie with the value mission=yes What? You haven't posted it yet??? Get Coding!!! POST메소드로 내 아이피주소와 USERNAME을 보내라. 변수 이름은 ip와 username으로 해라. 하나더.. 쿠키에 mission=yes를 추가해라. 코딩해라. 코딩시 세션을 유지하기위해 쿠키중에 eni..

Enigma Group basic/javascript 9

난이도가 조금 올라감. 폼에 입력한 비밀번호가 함수 내에서 쓰이기 때문에 단순히 끝에 alert같은걸로 pass를 출력하는게 되지 않는다; 예를 들어보면 var a="abcde";var b="abedf";var c="abefd";라 하면 첫번째 인덱스에서 셋다 a이므로 이자리는 그냥 넘어간다. 그렇지만 var a="abcde";var b="abedf";var c="gbefd"; 이렇게 첫번째 인덱스의 두개가 a이면(var a,b가 'a'인데 다른변수 두개가 'a'여도 된다.) 그걸 비밀번호의 인덱스와 비교한다. 예로 비밀번호가 "abcd"라고 하면 첫번째 자리는 a가 맞는거. 비밀번호의 인덱스는 변수의 인덱스와 따로 증가한다.(비밀번호는 변수 길이보다 짧음.) 이런식으로 비교해보면 된다. 파이썬. imp..

webhacking/client 2014.11.01

Enigma Group basic/javascript 1~8

외국사이트 http://www.enigmagroup.org/ 의 문제. basic카테고리에 들어가면 여러가지가 있는데 그중 자바스크립트 부분. 1. Jane으로 로그인하라고 한다. 근데 Jane가 목록 상자에 없다. 목록 상자중 아무거나 하나를 크롬 개발자도구로 Jane로 바꿔서 보내면 된다. 2. 뭔가 비밀번호 치는 창이 나오는데 취소 누른다음에 소스를 보면 이리 나오는데 skriptkid가 맞으면 skriptkid.php로 이동하게 된다므로 skriptkid.php로 가면 된다. 3, 2번하고 똑같은데 소스가 아래에 있다. 아래로 주욱 내리다보면 똑같이 있다. 4. 뭔가 똑같은거 같은데 없다. 자세히 살펴보면 비밀번호 입력창을 취소를 눌렀을때 주소가 Index.php로 이동하는걸 알 수 있다. (원래..

webhacking/client 2014.11.01

suninatas level 23

level 22는 23이랑 똑같은데 더 쉬우므로 그냥 안씀... 22와 달리 admin이 필터링되있고, 거기다가 길이제한도 있는데, mysql이 아니라 mssql이라 꽤 오래 걸림.... 공백 필터링, 그리고 아래 필터링된다고 써져있는것들 필터링, 길이제한까지 되있다. 최대한 길이를 줄여가며 인젝션. admin이 필터링되어있길래 mysql에서는 'a' 'dmin'같이 하면 되서 해봤는데 안된다. 귀찮아서 안찾다가 찾아보니 'a'+'dmin'처럼 +로 붙여줄수 있어서 이렇게 해봤는데 이번엔 길이제한에 걸린다. 이리저리 해보다가 다 안되서 그냥 admin을 포기하고 해보기로 했는데 된다. id=' or len(pw)>10-- &pw=guest 처럼 해봤는데 OK admin이 나온다.... len(pw)6 이..

suninatas level 7

http://suninatas.com/Part_one/web07/web07.asp 많이 본 버튼 빨리 누르기........ 코드를 짜면 된다. 주의사항은 패킷 몸체에 어떤 가는 값이 있는지 프록시같은걸로 확인해보고 코드를 짜야된다는거.. import urllib2 req = urllib2.Request('http://suninatas.com/Part_one/web07/web07.asp') req.add_header('cookie','ASPSESSIONIDQSTDACTR=쿠키') urllib2.urlopen(req).read() req = urllib2.Request('http://suninatas.com/Part_one/web07/web07_1.asp','web07=Do+U+Like+girls%3F') ..

webhacking/client 2014.10.30

suninatas level 6

글을 읽어보면 suninatas의 글을 읽으라는게 힌트. 또 참조하라고 http://tools.web-max.ca/encode_decode.php 라는 사이트 링크가 있다. 나머지는 다 쓸모없는 말. readme 들어가보면 sql문이 보이는데 sqli를 성공해야한다. "select szPwd from T_Web13 where nIdx = '3' and szPwd = '"&pwd&"'" asp라 알아보기 좀 불편할수도 있음.... qkqhxla1을 넣으면 이런식으로 변형 select szPwd from T_Web13 where nldx = '3' and szPwd = 'qkqhxla1' 필터링이 거의 없으니 그냥 true로 만들어주면 된다. select szPwd from T_Web13 where nldx..

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

소켓 파일 업로드 (webhacking.kr 37)

처음에 37번을 풀때는 netcat으로 7777번 열어놓고 현재 시간보다 한 30초 뒤?의 파일을 올린후 f5폭풍클릭으로 타이밍을 맞춰서 풀었었는데 이제 조금 프로그래밍 할줄 알게 되서 프로그램으로 짜봤습니다... 소켓으로 파일 업로드 구현시 주의점은 content length.. POST방식으로 보내기 때문에 body부분에 파일이 올라가서 보내집니다. ------WebKitFormBoundaryBARaBgUn7pXm0LIxContent-Disposition: form-data; name="upfile"; filename="tmp-1414222870"Content-Type: application/octet-stream ------WebKitFormBoundaryBARaBgUn7pXm0LIx-- 대충 이런..

webhacking.kr 22

guest, guest로 로그인하면 이상한 해쉬값 발견, 길이가 32라 md5같은데 salt를 뭘 붙이는거같음. 조인으로 새로운 아이디 만들어보니 또다른 해쉬값 생성. salt+아이디 등으로 해쉬가 만들어지는듯. 별짓 다해봐도 안되다가 id를 admin' or 1%23 등으로 보냈더니 Wrong가 아닌 Wrong password라는 에러메시지 확인. Wrong password는 아이디는 맞았는데 password가 틀렸다는 소리같음. 그럼 admin' or 1%23은 true라는 소리이므로. 이걸로 pw길이 확인. id=admin\' and length(pw)

webhacking.kr 21

1 입력시 true. 2입력시 true http://webhacking.kr/challenge/bonus/bonus-1/index.php?no=1&id=&pw= 라는 인자로 보아 no,id,pw컬럼 확인. no=이 입력부분이고, 대부분 숫자로 가정하여 홑따옴표'를 안씌운다는 가정하게 인젝션. ?no=2 and ascii(substr(id,1,1))=97%23&id=&pw= 이런식으로 true, false판별해본결과 no=1 의 id='guest', no=2의 id='admin' 확인. no=2의 pw를 뽑으면 될거같으므로 ?no=2 and length(pw)

무선 랜카드는 하나만.

노트북에 기본 랜카드가 있는데 기본적으로 붙어있는 거라 그런지 와이파이를 잘 못잡음. 마음먹고 모아두었던 포인트로 iptime A2000UA를 구입. 기본 무선랜카드와 구입한 무선랜카드 두개를 동시에 켜놓고 인터넷을 사용하는데, 와이파이가 종종 끊기거나 처음처럼 느려지는걸 발견. 좀 사용하면서 실험해본 결과 노트북 무선랜카드를 켜놓고, A2000UA까지 동시에 키면 무선랜카드 두개로 와이파이를 잡는 효과를 내서 더 잘 잡히리라는 내 생각과 달리 두개의 랜카드로 인터넷을 잡다가 별로 성능이 좋지 않은 기본 무선 랜카드로 인터넷이 연결됬을시에 또다른 빠른 랜카드가 노트북에 연결 되어있더라도 기본 랜카드로 와이파이를 잡느라 인터넷이 더 느려지는 듯한 효과가 생김.. 무선랜카드 두개를 켜놓으므로 배터리도 더 빨..

private/memo 2014.10.21

유효한 웹페이지 찾기?

http://www.neroa.com/q/?id=q1 의 2번 문제를 대상으로... 코딩 연습용으로 다시 짜봤습니다. 2번 풀려면 디렉터리를 무작위로 대입해서 풀어야되는데 아무것도 모를때는 dirbuster라는 툴..... 을 이용해서 했었는데 툴은 안쓰려는 지금의 마음가짐으로 다시 ㄱㄱ 에서 한 단어씩 가져와서 대입. 리눅스 환경의 vi에서 쓰여진 것 같습니다. txt로 열면 구분자가 좀 이상하게 보입니다. import urllib2 file = open("directory-list-lowercase-2.3-small.txt","r") for line in file: #파일에서 한줄씩 가져옴. req = urllib2.Request('http://neroa.com/level/2/'+line.split(..

할게 많음.

다음주부터 3주간 나눠서 시험이라서 시험공부하고 있는데 시험공부로 들어오기 전에 풀던 wargame.kr 의 counting query가 풀릴듯 말듯 밀당해서 시험공부를 못하겠음. 그냥 오라클 패딩 문제부터 풀어야되나 으아 시바 이문제 못풀면 시험공부 못할거같다 거기다 이제 졸업작품 준비하는데 우리팀은 게임을 만들기로 했는데... 유니티로 하는데 c#하고 자바스크립트 등이 쓰인다 해서 다시 c#을 깊게 공부해야될듯.... 졸작준비에 시험공부에 문제풀이에 할게 너무 많네 내년에 1년 외국나갔다 오려고하는데 외국에서 영어배우면서 공부도 병행해야될듯............ 시험공부하기 싫다

private/memo 2014.10.12

wargame.kr pw_crack

codeshell의 admin_pass 보다 어려운 버전이다. 아마 codeshell이 이 문제를 보고 조금 쉽게 만든 버전인 듯... 소스를 보면......... $password=auth_code("pw crack"); $dest = $_SERVER['REMOTE_ADDR']; $port = 31337; $data=""; $sock = @fsockopen($dest,$port,$errno,$errstr,10); if(!$sock){die("IP : $dest port : $port Connection Error Please, open your port!");} fwrite($sock,"password : "); for($i=0;$i 4 + len(answer)*2: #걸린 시간이... 4초 + 답의길..

wargame.kr q&a

뭔가 되게 페이지는 열심히 만드신거같은데 취약점 찾기가 쉬웠다는 ㅠㅠㅠ.. 들어가기전 시간 기반 인젝션이라는 힌트가 있고, 들어가서 탭 하나하나 눌러보면 주석에 힌트로 xss문제가 아니라 sqli문제라고도 써있음. 다들 일반적인 자바스크립트 동작들... jsmaster에게 메일을 보내는게 있는데 당연히 여기가 취약... 메일을 보내게되면 패킷을 잡아보면 post방식으로 이런 데이터가 가는데... cont=sdfsfsfsdfsdf&mail=sdfsdfsdfsdf&type=1 type에 따라 q&a인지 free인지 구별을 하게해놓았지만 여기 뒤에 인젝션이 가능.... &type=1 and if(1=1,sleep(3),1) 이런식으로 여러번 해보면 3초 멈추는걸 확인 가능.. cont=sdfsfsfsdfsdf..

wargame.kr ip_log_table

들어가면 admin으로 로그인하는 창과 ip log를 보여주는 기능을 하는 창 두개가 있다. admin으로 로그인하는 창으로 들어가서 admin-- , admin#,등으로 삽질을 해봤는데 반응이 없다. ip 로그 테이블목록을 보여주는곳에서 소스를 보면 숨겨진 폼이 있다. 이거에 뭔가 있을듯. ip 로그 목록을 클릭해보면 진짜로 아이피주소만 나오고 다른건 안나온다. 프록시로 데이터를 잡다보니 idx라는 값을 보낸다. 위의 숨겨진 폼에서 어떻게 연산을 해서 보내는것 같다. 숫자면 당연히 인젝션이 될거같으므로 바꿔서 보내봤다. idx=0이나 idx=1255 or 1=0나 idx=1244 and 0 등으로 거짓이 되게 보내면 이런 문자열이 나온다. 1970-01-01 09:00:00 webhacking.kr 2..

wargame.kr web_chatting

풀고 싶었는데 서버가 너무 자주 죽어서 관리자님께 하소연했더니 호흡기 붙여주심.(관리자님 감사해요) 이전에도 말했듯이 기술을 중요시하는 webhacking.kr보다는 조금 더 현실적인(?) 워게임이라 취약점 찾는데 몇일 걸렸습니다. 그런데 찾고보니 일반적인거네요... 소스 사이에 잘 숨겨두심. var xmlhttp,ni,iq=0,brtype=1; function getchatlog(type){ xmlhttp = new XMLHttpRequest(); if(type==1){xmlhttp.onreadystatechange=getni;xmlhttp.open("GET","chatlog.php?t=1"); }else if(type==2){xmlhttp.onreadystatechange=chatprint;xmlht..

wargame.kr tmitter

들어가기전에 테이블 구조가 있다. you need login with "admin"s id! =========================== create table tmitter_user( idx int auto_increment primary key, id char(32), ps char(32) );그리고 들어가보면 조인(회원가입)과 로그인 두개밖에 없다. 조인에서 아무거나 만들고 로그인으로 들어가보면 글 쓰는 페이지가 있다. 글에는 필터링이 되어있는지 아무거나 입력해봐도 다 나온다. 테이블 구조가 문제 들어오기 전에 보이고, 페이지가 조인, 로그인 두개밖에 없으면 당연히 sql문에서 insert문을 공략하는 문제이다. 그리고 insert문을 공략하는 방법이면 가장 흔한 insert into 테이블 ..