union select 를 반드시 이용하라고 한다. 그러나 union select 를 곧이 곧대로 이용하니 아래와 같은 WAF 친구가 나를 반겨주었다. 'union select' 라는 문자열을 필터링하는 것 같다. 'union/**/select'로 우회하면 될 것 같다. 이후에는 union select 뒤에 나올 문자열 형식에 대한 문제다. 별것들이 다 막힌다. 제일 유력한 후보는 다음과 같다. id='\' and pw=' union/**/select 'first','second'# 이것도 WAF에 막혀버린다. 16진수로 바꾸어보자. id='\' and pw=' union/**/select 0x6669727374,0x7365636f6e64# 이것도 막힌다. pw 영역에서 'first' 혹은 'second..
역시 SQLite 환경이다. 일반적인 Blind SQL Injection 인 것 같다. 예전에는 로그인에 성공하면 "Hello admin" 이라는 문자열을 출력했는데 이번에는 "login success!" 라는 문자열을 출력한다. 바로 exploit 코드를 짜도 좋을 것 같다. import requests requests.packages.urllib3.disable_warnings() org_url = "https://los.rubiya.kr/chall/banshee_ece938c70ea2419a093bb0be9f01a7b1.php" header = {'Cookie': 'PHPSESSID='} session = requests.session() # Check Length of PW for i in ran..
addslashes 함수가 포함되었다. SQLite 에서는 MySQL 과는 다르게 '\'가 이스케이프 문자로 활용되지 않는다고 한다. 그냥 싱글쿼터를 이용하여 id를 탈출하면 되겠다. id='&pw= union select 0x61646d696e--' and pw='' 위와 같이 query 를 전달했더니 문제가 풀리지 않는다. MySQL 에서는 문자열을 전달할 때 16진수로 전달할 수 있었다. 그러나 SQLite 환경에서는 이것이 통용되지 않는 것 같다. char 함수를 사용하여 addslashes에 걸리지 않게 하는 방법을 사용해야 할 것이다. id='&pw= union select char(0x61,0x64,0x6d,0x69,0x6e)--