Lord of SQL Injection - chupacabra
MySQL 환경이 아닌 SQLite 환경인 것 같다. SQLite에서는 한 줄 주석으로 '#'을 사용하지 않고 '--' 만을 사용한다.
MySQL 환경이 아닌 SQLite 환경인 것 같다. SQLite에서는 한 줄 주석으로 '#'을 사용하지 않고 '--' 만을 사용한다.
역시 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)--
이 친구도 그다지 복잡하지 않은 친구이다. 역슬래시로 id 영역의 싱글쿼터를 벗어나는 방법은 WAF(Web Application Firewall)에 걸리지 않는 것 같다. Blind SQL Injection 형식의 문제이니 pw를 모두 구해야 한다. 우선 길이부터 구하자. id=\&pw= or id="admin" and length(pw)>'0 아주 예쁘게 나온다. 이후에는 pw를 구하는 코드를 짜면 될 것 같다. pw를 구하는 payload 구성 방식에는 다음과 같은 방식들이 있을 것이다. substr 함수를 사용 pw like "X%" - like문과 와일드카드 이용 pw rlike "^X" - 정규표현식과 rlike 이용 bin(ord(substr())) 함수를 이용 - 2진수로 검색 이번에는 그냥..