본문 바로가기

Hacking/Web

(5)
내가 sql injection 하면서 느끼고 알게 된 거 그냥 los푼지 1달도 안 된 웹알못이 sql injection 할 때 느끼고 알게 된 거에 대해서 적어 보려고 한다. 100% 주관적인 글이다. 1. 주석은 편한대로 - 사람마다 다 다르겠지만 나는 주석을 개인적으로 #은 많이 안 쓰고 대부분 -- -을 쓴다. 하지만 길이 제한이 있으면 #을 쓴다. 2. or, and 보단 ||, && - 솔직히 나는 or, and를 자주 쓰는데 왜 적었냐면 ||, &&을 쓰면 띄어 쓰기를 따로 할 필요가 없어서? &&을 쓸 때는 %26%26 이렇게 써야 된다. 그리고 웹 개잘하는 형이 이렇게 쓴다. 그래서 ||, &&을 많이 쓰려고 노력중이다. 3. # && -> %23 %26%26 - 이거는 왜 적었냐면 내가 #을 처음 써봤을 때 왜 안 되지 했던 경우가 있었는데 ..
[LOS] umaru 마지막 문제라 그런건지 내가 문제 이해를 잘 못했던 건지 엄청 오래 걸린 문제다. 여태까지는 길면 1~2일 정도 걸렸는데 이 문제는 3일 넘게 걸린 거 같다. 솔직히 내가 코드도 제대로 안 읽고 띄엄띄엄 푼 것도 있지만 감이 도저히 안 왔었다.. 이게 문제 코드다. 쉽게 말하자면 플래그를 입력 받는데 만약에 올바른 플래그가 아니면 플래그를 리셋 시켜서 랜덤으로 바꾼다. realflag는 prob_umaru에 있고 우리가 입력한 플래그는 prob_umaru_temp 임시 테이블(?)에 저장한다. 처음에 왜 감이 안 왔냐면 update 구문에서 injection을 해야 되고 테스트를 할 때 마다 플래그가 리셋 되서 어떻게 해야 될지 정말 감이 안 왔었다. 하지만 문제 코드에서 무엇을 알 수 있냐면 첫번째로 ..
[LOS] dark_eyes 그렇게 어려운 문제는 아니지만 풀면서 삽질 많이 해서 올려 본다. 이게 문제 소스인데 preg_match에 col, if, case, when, sleep, benchmark가 필터링 되어 있다. 그리고 전 문제와 달라진건 에러를 보여주지 않는다. 아무것도 안 나옴 = 에러 blind sql injection으로 풀긴 풀어야 되는데 이것도 뭐 error based blind sql injection으로 풀 수 있다. 우선 if문을 대체해줄 함수를 찾고 있었는데 coalesce라는 함수를 찾았다. coalesce((리턴값), 변환값) 이렇게 있다고 할 때 리턴값이 NULL이면 변환값을 반환하고 NULL이 아니면 첫번째 값을 반환한다. 이 함수를 어떻게 쓸 수 있냐면 coalsece((?), (select ..
sql injection 필터링 우회 1. or and 우회 or - || , %7C%7C and - &&, %26%26 주로 ||, &&를 쓰면 편하다. 2. 단순 문자열 ex) admin admin - AdMiN, ADmiN 대소문자 변경해서 할 수 있다. replace로 막을 시에는 adadminmin 이렇게 우회 가능 3. ascii 우회 ord - ord(mid("abcd", 1, 1)) = "97" hex - hex(mid("abcd", 1, 1)) = "61" 4. substr 우회 mid 위에 참고 rigth(left("abcd", 1, 1)) = "a" lpad("abcd", 1, space(1)) = "a" rpad("abcd", 1, space(1)) = "a" 5. = 우회 like - 1 like 1 in - id i..
[LOS] sql injection instr 사용시 주의 LOS bugbear 풀다가 겪은 거 한 번 적어 본다. 문제에서 =, like를 필터링 하는데 그러면 사용할 수 있는게 in이랑 instr이 있다. (+ between?) 나는 멍청해서 처음에 in으로 했는데 id%09in%09("admin") 이렇게 했다. ㅋㅋ 더블 쿼터 처리를 안 했음 그래서 instr로 instr(id,char(97,100,109,105,110)) 이렇게 날려줬는데 패스워드 받아 올 때 ??00???? 이랬었나 아무튼 이렇게 받아 온다. 하지만 저게 인증이 안 된다. 이유는 00이라는 값을 잘못 받아 오는데 00을 받아오는 이유가 admin 계정 하나의 패스워드를 받아 오는 게 아닌 admin1, admin12, admin123 이런 계정이 있다고 할 때 이런 계정들의 패스워드도..