webhacking/sql, sql injection 98

효율적인 블라인드 인젝션

일반적으로 블라인드 sql인젝션시 ascii(substr('문자열',1,1)) 이런식으로 값을 뽑아냅니다.뽑아낼 문자열을 예를들어서 'zabcde'라고 하면 대부분 포문을 돌릴때 아스키코드값의 범위인32~127이나 48~127사이로 포문을 돌리는데.. ascii(substr('zabcde',1,1))=32~127이라고 포문을 돌린다고 가정하면 첫번째 문자 z를 뽑아내려면z의 아스키코드값인 122가 나올때까지 32~122까지 91번을 돌려야 값을 뽑아낼수 있습니다.비밀번호에 영문자만 있는걸 알면 97~122사이로 돌릴텐데 그걸 모른다는게 문제이죠.더군다나 다른 문자도 껴있다면 굳이 효율을 위해 97~122보다 시간이 조금 오래 걸리겠지만32~127범위로 포문을 돌릴겁니다. 평균적으로 한 문자 돌리는데 최소..

숫자 뽑아오기.

sql 인젝션시 숫자가 어떻게든 필요한데 숫자가 다 막혀있을경우...더군다나 수학 함수도 다 필터링되어있을 경우 환경변수에서 뽑아서 만들면 됩니다.mysql같은경우 show variables;명령어로 환경변수 확인 가능. tmp_table_size 같은 경우 뭔가 숫자가 많아서 하나씩 뽑아내거나 하기 편하겠네요.환경변수는 @@로 호출. 환경변수에서 필요한 수 뽑아내는 예제. 조금 공부해보신분들은 아시겠지만 substr이 막혀있으면 left,right나 mid같은걸로도 됩니다.위에 적은 예제처럼 수학 함수로 변형해서 뽑아오거나 또는....1^1 == 0, 같은문자^같은문자 == 0 숫자는 막혀있다고 가정했으니 문자로 해도 됩니다. 1 like 1 ==1, 같은문자 like 같은문자 == 1 마찬가지입니다...

webhacking.kr 7번 소스코드

import urllib,urllib2 # -*- coding: euc-kr -*- form = urllib.urlencode({'id':'?????','pw':'?????'}) req = urllib2.Request('http://webhacking.kr',form) res = urllib2.urlopen(req) session = res.headers.get('set-cookie') #여기까지는 항상 똑같은 세션얻어오는 코드. while 1: req = urllib2.Request('http://webhacking.kr/challenge/web/web-07/index.php?val=0)%0aunion%0aselect%0a(3-1') #계속 요청을 보내면서 req.add_header('cookie',s..

rubiya님의 문서

http://hackerschool.org/Sub_Html/HS_Posting/index.html?uid=43루비야님이 적은 sql 인젝션 문서. 엄청나게 좋은 꿀팁이기에 주소 남깁니다.웹해킹 하시는 분이면 반드시 끝까지 다 익힙시다. 이렇게 잘 정리된 한글 문서도드물다고 볼 수 있습니다.이 문서 올린 팀에 가서 주섬주섬 돌아다니다 보면 진짜 감탄사 나올 문서나 꿀팁이 많아요... 여기저기 찾아서 돌아다녀보시기 바랍니다. SQL Injection for Expert 목차* 이 문서는 어떻게 작성되었는가? * SQL Injection Filter Bypass * , Array 변수를 사용한 SQL Injection * Error Based SQL Injection * Error Based Blind SQL..

webhacking.kr 2번

2번은 추측과 서브쿼리에 관한 지식이 필요합니다.1. 소스를 보면 /admin이라는 관리자 페이지 발견./admin페이지에 들어가서 소스를 보면 폼 이름이 admin과 텍스트상자 이름이 password라는걸로테이블명은 admin, 컬럼은 password라는걸로 추측..2. /bbs/index.php 라는 곳에서 비밀글 발견. FreeB0aRd 라는 대문에 있는 문자열과폼 텍스트박스 이름이 마찬가지로 password라는걸로 테이블명 FreeB0aRd, 컬럼명password추측. (솔직히 조금 오바같아요.)3. 쿠키에 time이라는 이름의 쿠키와 1407736636라는 이상한 값 발견.값 뒤에 and 1=1같이 아무 값이나 인젝션했을때 메인 페이지 소스에서 시간 값 변경 발견.. 기술보다는 엄청나게 추측이 ..

webhacking.kr 8번

중요 부분. $pat="/\/|\*|union|char|ascii|select|out|infor|schema|columns|sub|-|\+|\||!|update|del|drop|from|where|order|by|asc|desc|lv|board|\([0-9]|sys|pass|\.|like|and|\'\'|sub/"; if(preg_match($pat,$agent)) exit("Access Denied!"); //agent값에서 $pat으로 필터리을 함. $q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'"); //쿼리 돌려서 $ck=@mysql_fetch_array($q); if($ck) //결과가 admin이면 통과 {..

webhacking.kr 2번 소스코드

여기에 쓰인 로그인 방법론이나 sql인젝션 관련 지식은 해당 카테고리에 다 포스팅해놨어요. 파이썬 로그인 방법론은 웹,소켓 프로그래밍 카테고리에 있습니다. import urllib,urllib2 form = urllib.urlencode({'id':'??????','pw':'??????'}) req = urllib2.Request('http://webhacking.kr',form) res = urllib2.urlopen(req) session = res.headers.get('set-cookie') for i in range(0,30): #password길이를 구하기 위한 반복문. < print i req = urllib2.Request('http://webhacking.kr/challenge/web/w..