sql injection 3

[Dreamhack] simple_sqli_chatgpt

GPT 사용 X 코드에서 userlevel 0은 guest임을 확인할 수 있다. SQL Injection은 쿼리문을 알면 쉽게 풀린다. select * from users where userlevel='{userlevel}'; 에서 {userlevel}을 페이지에서 사용자에게 입력받고 있다. FLAG는 userid가 admin이고, userlevel이 0일 때 얻을 수 있다. userlevel에 0, userid에 admin을 넣어 쿼리를 완성할 수도 있고, 항상 참이 되는 쿼리를 이용할 수도 있다. (단 admin과 guest userlevel이 0으로 동일하기 때문에 참이 되는 쿼리는 userlevel에만 사용해야 한다.) 0' and userid='admin ' or 1=1 and userid='a..

Security/Write Up 2023.08.21

[Dreamhack] error based sql injection

error based sql 인젝션에서는 EXTRACTVALUE 함수를 써야한다고 한다. EXTRACTVALUE 함수는 XPath식을 지정하여 XML 문자열에서 추출한 값을 반환한다. 사용법은 EXTRACTVALUE(xml_frag, xpath_expr) 이다. 두 번째 인수 xpath_expr에 맞지 않는 xml_frag 값이 들어온다면 오류가 발생하는데, xpath_expr에 SQL 쿼리를 넣으면 오류 발생 시 오류에 쿼리 결과가 포함된다고 한다. 예를 들어 데이터베이스명을 추출하는 쿼리는 아래와 같다. AND extractvalue(1,concat(0x3a,database()));-- 페이지에는 쿼리문에 맞게 맨 앞에 '를 붙여주었다. => SELECT * FROM user WHERE uid='' ..

Security/Write Up 2023.06.11

[Dreamhack] simple_sqli

SQL Injection 로드맵을 공부했으면 5초면 풀 수 있는 문제이다. login() 함수를 보면 userid가 admin일 때 로그인을 하면 FLAG가 나온다. 그리고 쿼리는 select * from users where userid="{userid}" and userpassword="{userpassword}" 라고 한다. 나는 주석을 이용한 공격 쿼리를 아이디에 넣고, 비밀번호는 아무거나 입력해줬다. admin"-- 위 쿼리를 넣으면 select * from users where userid="admin"-- " and userpassword="1234" 가 된다. -- 는 주석을 의미하므로 잘못된 비밀번호를 입력해도 -- 뒤는 모두 주석 처리가 되기 때문에 알맞은 쿼리문으로 인식하게 된다.

Security/Write Up 2023.06.04
728x90