(Lord of SQLInjection) orag문제입니다.
먼저 코드를 봤을때 눈에 확들어오는게
코드가 두개라는 것입니다.
중간에 빈칸을 기준으로 위 코드 아래코드라 부르겠습니다.
먼저 위 코드는 필터링으로 or and 를 막고 있으며 id값이 guest로 고정되어 있습니다.
위 코드는 이전 문제 울프맨과 다크엘프와 같은 결의 코드이니
비슷한 방식으로 해결이 가능 할 것입니다.
다음으로 아래코드를 살펴보면
add슬래시라는 함수로 pw값을 감싸고 있습니다.
add슬래시라는 함수가 무엇인지는 검색을 통해 알아보니
https://blog.naver.com/crehacktive3/221104369034
PHP 환경에서 addslashes() 함수, mysql_real_escape_string() 함수, magic_quotes_gpc 우회, 그리고 대응 방안
이스케이프 처리 함수, 그리고 개념 PHP 환경에서 이스케이프 처리 시 사용되는 addslashes() 함수 혹은...
blog.naver.com
위 사이트에서 일부를 가져왔습니다.
add슬래시라는 함수가 SQL인젝션을 막기위해 사용하며
싱글쿼터, 더블쿼터, 역슬래시등을 이스케이프 처리하여 기능하지 못하게 한다고 합니다.
즉 우리는 pw값에는 위와 같은 것들의 사용이 불가하다는 점입니다.
그럼 위의 내용에 유의하며 코드를 작성해보겠습니다.
먼저 위코드를 풀어서 admin으로 로그인을 해야하니
울프맨과 다크엘프에서 사용했던 식을 그대로 가져와보겠습니다.
일단 Hello admin이 출력되는 것으로
위 코드를 통과했다고 볼 수 있습니다.
다음으로 아래코드 같은경우 끝부분의 코드를 살펴보면
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge");
우리가 입력한 pw의 값과 설정되어있는 pw의 값이 일치해야 한다고 합니다.
즉 이전처럼 id=admin으로 해결하는 것이 아닌 정확한 패스워드 값을 찾아야 한다는 것입니다.
이 내용은 이전 orc문제에서 사용했던 방식을 가져와 사용하면 될것입니다.
일단 pw의 길이를 알아야 하니 길이를 찾을 수 있는 코드를 작성해보겠습니다.
일단 이전의 admin을 출력 코드에 싱글쿼터를 추가해 닫아주고
and에 대해 필터링이 걸려있으므로 %26%26을 사용해
URL인코딩으로 우회를 해주었습니다.
마지막으로 pw의 길이를 판별하기 위한 식으로 length(pw)>0# 으로
식이 무조건 True값을 출력하게 부등호 >0 을 사용하고
마지막으로 뒤에 있는 싱글쿼터를 무력화하려고 #을 사용했습니다.
부등호부분은 코드를 짜서 작성시에 =1 같은 형태로 정확한 길이를
찾는 것으로 바꿀예정입니다.
이렇게 하면 길이의 값이 정확할 때에만 Hello admin이 출력되기 때문입니다.
해서 파이썬으로 코드를 작성해보면
패스워드의 길이를 찾았을때 Hello admin이 출력될 것이고
출력되면 그 값을 pass_leng에 저장하며
패스워드의 길이만큼 반복, 현재 싱글쿼터를 add슬래시로 사용하지 못하니 ascii코드값으로 뽑으면
숫자로 받아지니 그값을 비교하여 일치하는지 판단하고
맞다면 다시 Hello admin이 출력될테니
이를 passwd에 저장하는 코드입니다.
코드를 실행시켜보면
패스워드의 길이는 8이며
패스워드의 정확한 값또한 도출되었습니다.
이제 이값을 문제사이트에 전달해주면
문제가 해결되었습니다!
'Wargame(Web) > Lord of SQLInjection' 카테고리의 다른 글
(Lord of SQLInjection) vampire 문제 (0) | 2022.08.17 |
---|---|
(Lord of SQLInjection) troll문제 (0) | 2022.08.17 |
(Lord of SQLInjection) darkelf문제 (0) | 2022.08.16 |
(Lord of SQLInjection) wolfman문제 (0) | 2022.08.16 |
(Lord of SQLInjection) orc 문제 (0) | 2022.08.12 |