Site(96)
-
level20[old]
이번시간에는 level20을 풀어보겠습니다 공부하는 입장이라 틀린 것이 있더라도 양해부탁드리겠습니다 level20번에 들어가보니 nickname, comment, captcha를 입력하는 text가 있고 submit, reset 버튼이 보입니다 time limit : 2 second 문구도 보이는데 무언가를 2초로 제한되게 한거 같은데 아직은 저게 정확히 뭔지 모르겠습니다 한번 아무값이나 입력을 하고 submit버튼을 눌렀더니 아무것도 실행되지 않아서 소스코드를 보았습니다 ck라는 함수에서 lv5frm.id.value, lv5frm.cmt.value, lv5frm.captcha.value의 값이 빈칸이면 id form, comment form, captcha form으로 커서가 이동합니다. cf) foc..
2022.04.10 -
nightmare
이번시간에는 nightmare을 풀어보겠습니다 공부하는 입장이니 틀린 것이 있더라도 양해부탁드립니다 소스코드를 보니 prob _ . ( ) # - 들이 필터링 되어있어서 사용이 불가능하고 pw값의 길이가 6보다 크면 안됩니다 pw값을 참으로 만들어줘서 그냥 id값만 나오면 해결이 될 것 같은데 문제는 pw('')부분하고 id!='admin'을 주석처리하고 싶은데 # --가 필터링 되어있어서 할 수가 없다는 점입니다 이 문제를 풀기위해서는 sql 자동형변환을 이용해야되는데 pw('')을 취해주면 sql에서 문자열 char보다 int형이 우선함으로 char형인 pw('')문자열 -> int형으로 변환 -> 0을 리턴 -> 0=0을 해주면 일치되어 모든컬럼을 출력할 것 같습니다 * SQL에서는 자동형변환에 의..
2022.04.06 -
zombie assassin
소스코드를 보니 먼저 strrev 함수가 나와있습니다. strrev함수는 문자열을 뒤바꿔줍니다 ex) strrev(nimda) -> admin addslashes함수로 싱글쿼터, 더블쿼터, 백슬레쉬, NULL(%00)의 앞에 \를 넣어서 문자열로 만들어줍니다 따라서 ' " \ %00 -> \' \" \\ %0\ 로 변경을 해줍니다 그리고 id에 값이 있다면 클리어입니다 ' 를 문자열로 바꾸기 위해 단순 \를 써주면 id='\\' and pw='' [\가 2개가됨] 처럼 되어 '를 문자열로바꾸는 기능이 상실해 버립니다. ' 를 넣어주면 id=''\' and pw='' 형태가 되어 싱글쿼터가 열린상태가 되기때문에 id에 문자열을 넣을 수가 없습니다 접근방법 " 를 사용하면 \"로 변경되고 또 strrev함수..
2022.04.06 -
succubus
소스코드를 확인해보니 preg_match함수에서 get방식으로 받은 id, pw에 prob _ . ( ) , 가 있으면 필터링을 해주고 result변수에 id값이 있기만 하면 클리어됩니다 즉 '를 필터링 해주기 때문에 ' 를 우회하는 다른 방법으로 sql injection 공격을 해야 될 것 같습니다 * 싱글쿼터 우회방법 1. 더블쿼터["] 2. 백슬래시[\] : '앞에 \을 붙이면 '를 문자열로 인식함 * id='\' and pw=' or 1=1#' -> id='\' and pw=' or 1=1#' \'을 해주어 '를 문자열로 인식해 버리기 때문에 id에 \' and pw= 라는 값이 한 문자열로 인식되어 들어갑니다 id값은 당연히 false 이므로 의미없는 값이 될 것이고 or 을 통해 항상 참인 1..
2022.04.05 -
assassin
이번시간에는assassin을 풀어보겠습니다 공부하는 입장이니 틀린 것이 있더라도 양해부탁드립니다 소스코드를 보니 preg_match함수에서 '만 필터링해주고 = 대신 like를 사용했습니다 변수 result에 id값이 있다면은 해당 id값을 출력할 것이고 변수 result에 id값이 admin과 동일하다면 클리어입니다 따라서 admin의 id값을 알아내면 되겠네요 쿼리문에 like를 사용하면 일부만 값이 같아고 참이 되기 때문에 와일드 카드를 이용해 보려고 합니다 * 와일드카드 % -> 모든 문자열 %a -> a로 끝나는 모든 문자열 a% -> a로 시작하는 모든 문자열 _a -> a로 끝나는 2글자의 문자열 a_ -> a로 시작하는 2글자의 문자열 * 접근방법 pw like '0-9%'를 넣어주어 0-..
2022.04.05 -
giant
이번시간에는 giant을 풀어보겠습니다 공부하는 입장이니 틀린 것이 있더라도 양해부탁드립니다 소스코드를 확인해보니 strlen함수를 이용해서 get방식으로 받은 shit값의 길이가 1보다 길면 아웃 preg_match함수를 통해 공백과 공백문자우회를 할 수 있는 \n, \r, \t 필터링 됩니다 query부분을 확인해 보면 from 과 get방식으로 받아온 shit값 사이에 공백이 없어서 쿼리문법의 오류가 있을거라고 생각이듭니다. 따라서 pw값에 1을 넣어주니 쿼리문에서 from과 1사이에 공백이 없는 문법적 오류라서 출력이 안되네요 해결방법은 간단하게 from과 shit사이에 공백을 넣어주면 해결이 될 것 같습니다 공백문자우회 1. \n : 줄바꿈[URL Encoding: %0a] 2. \t : 커서를..
2022.04.05