전공쪽/Lord of Sql injection

if가 막혔다. select union으로 이를 우회하겠다 . 이제 에러메세지가 뜨질 않기 때문에 이를 생각하고 자동화를 해야한다. union select를 통해 이전 쿼리의 결과와 값을 합쳐서 나타낼 수 있다. 다만 컬럼의 수가 동일해야한다! 먼저 비밀번호의 길이를 구하였다. 이 원리는 서브쿼리는 레코드가 무조건 한개여야한다는 원리로, length(pw)=8일시에는 1이 반환되고 아닐 시에는 0,1 이 반환되어 에러가 뜨는 것이다. 일단 비밀번호의 길이는 8자라는 것을 알았다! 또한 비밀번호가 ascii로 인코딩 되있다는 것도 알아냈다. 이제 자동화를 돌려줄 수 있을 것 같다. (select 1 union select substr(pw,1,1)=?) 으로 구해줄 수 있을 것이다. 만약 참이라면 결과값에..
이제부터 푸는 방법이 바뀌었다. 오류기반 sql injection 기법들을 적극 활용하겠다. 가장 중요하게 쓴 것은 if(조건, ture, false) 였다. 먼저 if(length(pw)=32, pow(2,9999),1) 을 통해 pw의 길이가 32바이트라는 것을 알았다. 그리고 ascii 인코딩임을 확인하였다. 이제 substr로 단순한 brute forcing을 진행하였다. 코드는 다음과 같다 #!/usr/bin/python #-*-coding:utf-8 -*- import urllib,urllib2,requests header={"Cookie":"PHPSESSID=****"} password='' a='' for i in range(1,33) : admin=0 guest=0 b=[0,0,0,0] ..
%0a(개행)을 통한 우회를 하였다.
상당히 어려웠던 문제이다... 솔직하게 인터넷 찾아보고 싶었다. 그런데 쉬운문제들은 봐도 상관없는데 어려운 문제는 안보고 푸는 재미가 있기때문에 좀 삽질을 많이 해보았고 혼자 풀어서 뿌듯했다 일단 bruteforce관련 문제이다. 그리고 regex와 like가 안되는데, regex는 정규표현식. 일단 pw 길이는 8일것이다. 귀신같이 아니였다 ㅋㅋㅋㅋ 물론 password 길이를 자동화 돌려도 되지만, 약간의 주의가 필요할 듯 보여서 (그리고 사실 부등호를 이용하면 이진탐색이 가능하고 이건 손으로 하는게 더 빠를 것 같아서. ) order by로 admin이 최상단에 위치하게 해주겠다. 비번은 12바이트이다. 사실 order by 쓸 필요가 없었던듯.. 이제 자동화를 돌려주면 된다. addslashes우..
갑자기 괄호가 들어간 것과 filter식에서 괄호가 없는 것을 봐서는 괄호를 쓰라는 것 같다. 근데 #도 필터링이라서 우회코드인 %00을 써주도록 하겠다. 그리고 페이로드가 6글자까지로 제한되서 sql cheat sheet를 참고해 or 1=1 대신 =0#을 사용해주었다. 이 원리는 ''이 빈공간이라 0으로 인식이 되서 그렇다고 한다. 부등호도 된다.
strrev 는문자열을 뒤집는 함수이다. 좀 삽질을 많이 해봤고, 이스케이프 문자가 추가되면서 뒤집히면 뒤에 pw 의 싱글쿼터까지 id가 먹어버리기때문에 이를 이용해 풀었다.
\(이스케이프)를 넣어주면 싱글쿼터가 문자로 인식되기 때문에 id=' \' and pw=' 까지가 id로 인식 되버린다. 이를 이용하여 뒤에는 그냥 참을 넣어주었다.
자이언트는 그냥 공백문제 우회하는 것이라서 %0b 넣어줬다. assasin의 경우 admin pw 길이가 8이라는 가정하에 브루트포싱을 했다. guest와 겹치는 문자가 있는 것을 가정해 코드를 짰다.
OSOR2
'전공쪽/Lord of Sql injection' 카테고리의 글 목록 (2 Page)