Site/LOS(20)
-
dragon
이번시간에는 dragon을 풀어보겠습니다 공부하는 입장이니 틀린것이 있더라도 양해부탁드리겠습니다 소스코드를 확인해 보겠습니다 preg_match 함수로 prob _ . ( ) 를 필터링 $query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'" $result['id'] 가 있다면 Hello $result['id'] 값을 출력 $result['id'] 가 admin과 일치한다면 클리어 그런데 쿼리부분을 보니깐 id='guest'# 에 주석처리가 되어있어서 and pw='{$_GET[pw]}'" 를 다 무시해버리기 때문에 pw에 어떠한 값을 넣어주어도 Hello guest 밖에 안나올 것 같습니다. 접근방법 pw에 값을 인식하게 ..
2022.04.13 -
xavis
이번에는 xavis를 풀어보겠습니다 이번 xavis문제는 힌트를 참고했습니다[역대급으로 까다로운 문제여서 힌트없이는 힘들었습니다ㅠ] 소스코드를 보겠습니다. prob _ . ( ) regex like 을 필터링 해줍니다 cf) regex = 특정한 규칙으로 문자열을 찾아내줌 addslashes함수로 $_GET['pw'] 필터링 $result['pw']와 $_GET['pw']가 정확히 일치해야 클리어되는 blind sql injection 문제인 것 같습니다 기존의 blind sql injection 문제풀이럼 접근하면 되는 줄 알았습니다 당연히 pw의 길이를 구하고 길이가 8이라 예측했지만 아니었습니다... 힌트를 찾아보니 UNION 을 활용해서 푸는 방법이 있었습니다. SQL에서 UNION은 두 개 이상..
2022.04.13 -
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