SQL 인젝션(17)
-
[LOS] 18번 nightmare 풀이
6) exit("No Hack ~_~"); $query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'"; echo "query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) solve("nightmare"); highlight_file(__FILE__); ?>이번 금지 문자열은 prob _ . () # -이며, pw의 글자수가 6자를 넘어가면 안된다는 조건이 적혀있다. #을 쓰면 안되니까 쓸 수 있는 주석은 --+과 ;%00가 있는데, --+는 3글자, ;%00는 2글자니까 ;%00를 사용한다..
2019.08.08 -
[LOS] 17번 zombie_assassin 풀이
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) solve("zombie_assassin"); highlight_file(__FILE__); ?>금지단어는 prob _ . ()이고, 언뜻보면 전 문제인 succubus와 비슷해보이지만 이 부분이 다르다.$_GET['id'] = strrev(addslashes($_GET['id']));$_GET['pw'] = strrev(addslashes($_GET['pw']));strrev는 문자열을 거꾸로 반환하는 함수이며,addslashes는 ' 나 " , \, NULL(%00)의 앞에 \를 넣어 문자열로 인식하게 해주는 함수다. 만약 ..
2019.08.08 -
[LOS] 16번 succubus 풀이
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) solve("succubus"); highlight_file(__FILE__); 간만에 코딩 필요없는(할수도 없는)문제다! 금지문자열은 prob _ . () ' 이고, id와 pw 둘 다에 적용된다. 이 문제는 한번에 딱 보이는 사람은 바로 풀고, 아니면 엄청 고민해야하는 문제다.아마 모르는 사람들은 ' 우회라고 검색할테니까 그걸로 태그 달아야지 ㅎㅎㅎㅎ 이 문제의 풀이는 정말 간단하다.그냥 id = '[문자열]' 에 있는 뒤의 '를 %27가 아닌 문자 ' (%25%27)취급하면 된다.즉, id에 \를 넣자. 그럼 다음과 같은 ..
2019.08.07 -
[LOS] 15번 assassin 풀이
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("assassin"); highlight_file(__FILE__); ?>이번 문제의 금지문자열은 ' 하나다.'를 쓰지 못하게 하고, where 문에 like가 있는걸 보아 mysql에서 사용하는 like의 사용법에 대해 묻고있는것 같다. 앞서 brute-force attack 시에 id like 'admin'과 같은 문장을 사용했다.이와 같이 id like '[문자열]' 의 의미는 id = [문자열] 과 같다. ..
2019.08.07 -
[LOS] 14번 giant 풀이
갑자기 소스코드가 엄청 짧다. 이번 금지 문자열은 공백(띄어쓰기), \n(줄바꿈), \r(Carriage Return), \t(Tab)이고, shit은 1글자여야 한다. sql query를 보면 shift를 이용하여 from과 그 뒤 문자열을 구분해주어야 한다. 단, 위에 적힌 금지 문자열을 쓰지않고! 해당 내용은 5번 wolfman 풀이 때 설명했었다. 이 중 띄어쓰기를 우회하는데 사용되는 문자는 %09 :Horizontal Tab %0a :Line Feed %0b :Vertical Tab %0c :Form Feed %0d :Carriage Return 이 있는데, 본문에서는 \t(%09), \r(%0a, %0d)를 금지했으니까 남은건 %0b와 %w0c이다. ...더보기 무작정 대입해서 통과하는 문자 ..
2019.08.07