Lord of SQL Injection 문제 풀이
문제 1번
이 문제는 php문을 주고 어떠한 식으로 필터링해야하는지 고민하는 문제이다. 입력창이 없는 이유는 get 방식으로 url에 데이터를 포함해서 오기때문에 url get 방식으로 전달할 데이터를 붙여주기만 하면된다.
보게되면 if문의 preg_match는 문자의 일치 여부를 반환시키는 것인데 여기서는 매칭시 exit를 썼다 즉 prob, _ , . ,()를 필터링하는 것이다.
' 와 "를사용할 수 있으니 이를 이용하여 우회를 해보자
id = admin
pw = admin' or '1'='1 를 집어 넣으면 id가 틀리더라도 pw 부분은 무조건 참이기 때문에 db의 첫번째를 가져오는데 이번의 경우 admin이 첫번째였다. 만약 첫번째가 아닐 경우 다른 경로로 우회를 해야한다.
문제 2번
문제 1번과 달라진 점이 있다면 md5를 썼다는 것이다. md5는 암호화를 하는 것으로 복호화와 암호화 둘다 가능한 암호 기법이다. 즉 pw를 a를 입력하여 md5가 암호화하면 1234가 된다고 하자 그 이후에 다시 영어 a를 다시 암호화 해도 1234가 된다. 즉 매칭이 변하지 않는 암호화 기법이다. 다만 여기서는 db의 내용을 파악해야 admin 계정 비밀번호를 알 수 있으니
md5를 무시하여 우회를 해보도록 하겠다.
pw를 무시하기 위해서는 id를 제외한 나머지 부분을 주석처리해야할 필요성이 있다. 주로 많이 쓰이는 주석을 정리하면
1. #
2. --
3 /*~~@#*/
4 ;%00 <-- %00는 Null을 뜻하는데 ;와 같이 쓰이면 뒤에 오는 문자를 주석처리함
해당 문제에서는 1,2 번이 안되서 4번을 이용하여 admin 입력 후 pw 부분을 주석처리하여 우회를 하였다.
문제 3번
preg_match('/\'|\"|\`/i) <- 보게되면 이제는 '와 "로 필터링하는 것을 볼 수 있다. 이제는 다른 방법으로 우회를 해야한다.
또한 한가지 더 고민해야할 점은 id가 guest로 고정이 되어 있다는 것이다. 우리가 알아야할 것은 admin의 계정이기 때문에 admin을 불러오는 방법에 대해 고려해야한다.
id가 guest이면서 no=1이면 아래와 같이 통과하는 것을 볼 수 있다. 이를 우회할려면 id=guest이면서 no=1인 것을 거짓으로 만들고 뒤에 or 을 붙이면 or 뒤에 no = 2 는 대게 존재하기 때문에 no =2 를 기준으로 값을 찾게 된다.
아래는 그를 이용한 것이고 no = 2 와 no like 2는 거의 같은 것이라 보면된다. = 문자가 필터링 됐을 경우 like 를 사용한다.
문제 4번
특이하게 addslashes가 추가된 부분을 볼 수 있다. addslashes는 ' ~"~"~ ' 와 같이 따옴표 안에 따옴표가 있을때 문자로 인식하지 않게 슬래쉬를 붙여주는 역할을 하는 함수이다.
죽어라 풀었는데 안풀렸다. 가만히 생각해보니 pw 부분이 참이기만 하면 hello admin을 출력해 주니 이를 이용하여 length을 우선 알아내고 그 후 자동화 기법을 통해 비밀번호를 추출해 주면 된다. 이를 위해서는 burp suit의 intruder나 파이썬 코드를 이용하여 작성하면된다.
length()를 이용하여 8자리 비빌번호인것을 파악했다. 다음으로 해야할 것은 자동화 공격이다.
문제 4번 코드는 좀 더 알아본 후 추가하도록 하겠다.
'Coding > Wargame' 카테고리의 다른 글
[LOS] SQL Injection 풀이 (wolfman, darkelf) (0) | 2022.06.07 |
---|---|
[LOS] SQL Injection 풀이 (orc) (0) | 2022.06.06 |
[ Burp suit] File upload 문제4 풀이 (0) | 2022.06.01 |
[ Burp suit] File upload 문제3 풀이 (0) | 2022.05.31 |
[ Burp suit] File upload 문제2 풀이 (0) | 2022.05.30 |