목록WarGame (84)
DoR@Hee의 끄적끄적
select union or 등 등.. 여러가지를 막고 있다 or 구문은 막고있지만 and구문은 안막고 있으며 길이를 알 수 있는 length 문자열을 추출 할 수 있는 substr등은 필터링 하고 있지 않다. 일단 admin으로 인증해보기 위해서 admin' and 1=1 -- 입력 했으며 admin 로그인이 가능했다 문제는 여기서 부터였는데 mysql 에서는 length로 길이를 알 수 있지만 백날 length로 했을 때 길이를 알 수 없었다 그러던중 mysql 이 아닐 수 있다고 생각해서 ms sql 에 길이를 알 수 있는 함수인 len을 이용 길이를 알 수 있었다 그에 따라서 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26..
로그인 창 같은게 보인다 Password Incorrent! 문자열이 보인다. 소스보기를 본 결과 post 방식이며 아이디는 admin이고 Password 는 0~9999라는걸 알 수 있다. URL 정보를 제대로 볼 수 없기 때문에 edit cookie를 이용해 정확한 정보를 알 수 있고 위 3가지 정보를 이용 1 2 3 4 5 6 7 8 9 import requests cookies = {'ASPSESSIONIDASRDRRRB': 'GKODFJNBBAEMKCBNFCEHFOAJ'} for i in range(1, 10000): url = "http://suninatas.com/Part_one/web08/web08.asp" res = requests.get(url, data={'id': 'admin', '..
이 문제는 iron_golem과 비슷한 문제이지만 col | if | case-when 등 조건에 따른 구문을 막고 있다. 하지만 iron_golem에서 이용했던 select 1 union select 2를 이용해서 풀 수 있다. ' (싱글 쿼터)를 입력했을 때 에러 메시지가 나오겠지 하고 생각했으나 아무런 에러메시지가 안 나온다. 혹시 머라도 있을까 했지만 아무것도 없다 즉 쿼리가 참일 경우 아무것도 안 보이게 하고 쿼리가 거짓을 경우 원래 창이 보이도록 해야 한다. 쿼리를 일단 작성해 보았다 위와 같이 쿼리를 작성할 경우 서브 쿼리에 따른 반환 값이 1개 이기 때문에 원래 페이지를 유지하는 것을 확인할 수 있었다. 그것을 mysql에서 확인해보면 쿼리가 값이 한 개만 나오는 것을 확인할 수 있고 서브..
문제 지금까지 와 문제는 다른 문제이다 Hello guest, Hello admin 등 결괏값에 따른 문자열을 찾아볼 수 없고 sleep, benchmark 등 time based sql injection 구문을 막고 있다. 문제를 확인 하기 위해서 '(싱글 쿼터)를 입력하니 Error 가 나왔다 즉 Error를 기반으로 문제를 풀어야 한다는 것을 알았다. 문제를 풀기 위해 일단 SELECT 1 UNION ALL SELECT 1 || SELECT 1 UNION SELECT 2를 이용하기로 했다 select 1 union all select1를 이용할 경우는 위 그림과 같은 레코드 값을 반환한다 이유는 UNION ALL 같은 경우는 중복 값을 포함하기 때문이고 위와 같이 구문을 select 2 union ..
"select id from prob_dragon where id ='guest'# and pw ='' " 이렇게 쿼리문이 넣어져 있다 항상 참값을 만드는 쿼리로 "Hello guest" 문자열을 확인할 수 있다. 위 쿼리에 결과값이 admin 이어야 풀리는 문제 인대 #(주석)을 무시해야 한다 #은 한 줄 주석으로 라인을 이동시켜서 쿼리를 작성하면 되는데 %0a(Line feed) \n을 이용해서 풀이하면 된다. 성공 추가적으로 저렇게 개행을 해도 쿼리가 들어가는 이유를 보자면 mysql에서 작성했을 때 위 쿼리와 같다 "select id from prob_xavis where id ='gues'# and pw=' '" 빨간색 부분이 주석이 되는 부분이고 저기서 라인을 이동시켜 "select id fr..
문제 소스코드 이때까지 풀었던 los 문제 중 가장 까다롭고 짜증 나는 문제이다. 1. 별다른 필터링은 존재 하지 않다. regex, like를 필터링하고 있는대 일단 저 2개는 안 쓸 거니까 무시 일단 admin pw의 길이를 알아내기 위해서 length(pw) 를 이용 12자리 인 것을 알았다. 그 후 맨날 쓰는 뻔한 쿼리를 작성해서 admin pw를 알아내려고 시도할려고 파이썬 코드를 작성 후 계속해서 돌려보는데 "값이 안 나온다." 아스키코드 1~255를 다 돌려봤는대도 안나온다 Hex도 물론 안나온다 일단 다른 방식으로 접근해보기 위해서 pw의 한자리 길이를 알아보려고 했는데 길이가 4랜다 일반적으로 mysql에서 길이를 비교해보면 문자, 숫자는 다 1 인대 한글만 3이다 3이 나온 이유는 db..
1. preg_match를 이용해 /prob, _, \(문자)., 문자(), #, -, 등을 필터링 하고 있다. 2. 6자리 이상이면 exit(No Hack)를 출력하고있다. 일단 이 문제를 해결하려면 ('')와 and id!= 'admin'을 해결해야하는대 and id!='admin'은 주석 ;%00으로 해결 할 수 있을거 같다. 일단 pw파라미터에 ;%00이 들어갔을 경우 쿼리는 "select id from prob_nightmare where pw =('');%00 and id!='admin'"으로 인식된다 빨간색 부분은 주석부분 이렇게 쿼리를 작성했을 경우 ('')를 완성해야 하는대 아마 ('')는 문자열로 인식하고 있는 쿼리인거같다. 확인 해보기 위해서 mysql에서 pw=('')=0을 넣어봤더..
if(preg_match('/\'/i', $_GET[id$_GET [id])) exit("HeHe"); if(preg_match('/\'/i', $_GET[pw])) exit("HeHe"); preg_match를 이용해서 '(싱글 쿼터)를 필터링하고 있다. 여기서 중요한 점은 preg_match는 특수문자 앞에 \ 가 존재하면 특수문자의 기능을 무시하고 일반적인 문자로 바꿔버리는 특징이 있다. 그걸 이용해서 쿼리를 작성해 보면은 "select id from prob_succbus where id =''or 1--'"이런 식으로 쿼리가 들어갈 경우 solve 될 것 인대 여기서 \를 이용해서 쿼리를 작성해보면 "select id from prob_succbus where id ='\'and pw=''or ..