Lord of SQLInjection(17)
-
[WriteUp]/[Lord Of SQLInjection] blue_dragon
문제 접근- preg_match가 두 파트에 나눠서 위치함- 싱글쿼터는 입력에는 필터링이 적용 안 되지만, 결과를 출력할 때에 싱글쿼터에 필터링함- admin의 password를 알아야하는데, 싱글쿼터없이 admin의 pw를 확인할 수 있는 쿼리를 만들어보려다가 실패해서 그냥 time based sql injection를 이용하기로 했다.- No Hack이라는 결과가 나오더라도 조건이 참일때 지연시간이 남음[도메인 값]?pw=' or if(id='admin' and length(pw)=any number, sleep(3), 1)%23→ 비밀번호의 길이는 8import requestsimport timeurl="https://los.rubiya.kr/chall/blue_dragon_23f2e3c81dca6..
2025.04.28 -
[WriteUp]/[Lord Of SQLInjection] red_dragon
- 문제 접근-> id 파라미터에는 prob._.까지이고, 싱글쿼터는 필터링 되지 않았다.-> 길이 제한, 긴 payload는 쓰기 어려울 것 같다.-> admin에 해당하는 no 값을 찾는 것에서 출발→ admin 계정을 확인한다.$query = 'select no from prob_red_dragon where id='admin'";→ 쿼리에 id=admin이라는 조건이 있고 no만 찾으면 된다.[도메인 값]?id=%27||no>10→ payload : id = ‘ ‘ || no > 10’특징- id 파라미터에 admin을 제거하고 no를 찾기 위한 조건을 or과 연결해서 전달하니 길이 제한 발생- no가 어떤 수가 올지 모르니 계속 같은 결과 발생- no 파라미터에 길이제한이 없으므로 no 파라미터..
2025.04.28 -
[WriteUp]/[Lord Of SQLInjection] evil_wizard
특징-> hell_fire문제와 유사-> 필터링은 union과 time based sql injection에 대한 제한을 둠[도메인 값]?order=1- 위 도메인 값을 설정한 후 화면에서 볼 수 있는 정보들- id column 기준으로 출력 시도 → id=admin, score=50인 계정의 email을 파악하는 문제- time based sql injection이 막혀있고, 에러를 출력하는 문구도 없다.⇒ if문을 활용해서 참, 거짓을 구분하는 방법을 활용할 수 있다.email의 길이가 1보다 큰 경우의 쿼리를 넣어본다.->조건이 참이기에 첫번째 칼럼인 id를 기준으로 정렬이 되는 모습이 나온다.-> email의 길이를 100보다 크다를 조건으로 넣어본다.-> rubiya 아이디가 우선 나온다.-> ..
2025.04.28 -
[WriteUp] / [Lord Of SQLInjection] hell_fire
- 문제 특징-> order by 절에 sql injection이 들어가고. 입력 쿼리로 order를 넣어주어야 한다.-> select한 칼럼이 id, email, score 세 개임을 확인 가능-> order by 절 뒤에 숫자를 사용하면, 해당 순서의 컬럼으로 정렬한다는 의미만약 그 숫자가 select 문의 컬럼 개수보다 더 크다면 오류가 반환됨⇒ 컬럼 수를 파악할 수 있다.⇒ hell_fire 문제에서는 3개의 컬럼이 이미 쿼리문에 속해있어서 필요하지 않음-> email의 길이값을 파악한다.[도메인 주소]?order=length(email)=25, id='rubiya'특징-> order by 뒤에 조건이 2개 붙어있는 것을 확인 가능-> length(email)은 email의 길이값을 반환하는 함수..
2025.04.28 -
[WriteUp]/[Lord Of Sqlinjection] dark_eyes
- iron_golem 문제의 해결방법 차용-> select 1 union select 2 이용해서 풀면 됨-> 이 구문으로 if 문을 막아놓았던 부분을 쿼리가 실행될 때 에러가 생기거나, 제대로 실행되는 것을 통해 파악 가능-> 쿼리 정상 작동 → 원래 페이지 뜸-> 쿼리 이상 작동 → 빈 페이지 뜸-> 우선, length 함수를 이용해 패스워드의 길이를 알아본다.[도메인 주소]?pw=' or id ='admin' and (select 1 union select 2 where !(length(pw)-> pw의 길이는 10보다 짧음을 파악 가능(pw의 길이가 10보다 크다면 에러가 발생해서 exit()가 실행되어야 한다) Password 구하기import requestsfrom requests.packa..
2025.04.28 -
[WriteUp]/[Lord Of SQLInjection] dragon
$query = "select id from prob_dragon where id='guest' # and pw='{$_GET[pw]}'";→ 여기서 #은 한 줄만 주석으로 친다.⇒ 줄을 바꿔주고 query를 작성하면 주석처리가 적용되지 않는다.[도메인 값]?pw=%0a and pw='' or id='admin→ %0a로 줄바꿈 처리→ pw를 =’’로 재정의→ 그 후 or을 이용해 id=’admin으로 지정해준다.
2025.03.07