이번 문제는 id를 입력받는것을 확인 할 수 있다.

이 문제 역시 id가 admin이면 troll을 출력하며 해결할 수 있다.

 

여기서는 preg match함수가 admin을 받으면 HeHe하며 해결할 수 없도록 만들었다.

admin을 필터링 해야된다.

문제를 만들게 되면 이런식으로 문제를 만드는 것도 좋을것 같다. 정답과 유사한걸 입력하면 hehe~

 

+ 찾아보니 /admin/i 처럼 뒤에 i가 붙으면 대소문자를 구분하지 않고 i 가 붙지 않으면 대소문자를 구분한다고 한다.

+ 대소문자를 구분하지 않는 점을 활용하는게 포인트라고 합니다.

https://tech-dailylife.tistory.com/entry/Lord-of-SQL-Injection-troll-8%EB%B2%88-%ED%92%80%EC%9D%B4

이번 문제도 id는 guest고 pw을 입력받는것을 볼 수 있다.

pw를 맞추는 문제인것 같다.. 이런문제가 어려운거 같다...

+쿼리의 결과에 따라 서버에서 서로 다른 반응을 보이는 Blind SQL Injection문제다.

https://croas.tistory.com/46

 

[Lord of SQL Injection] Orge

#About [그림 1] - 문제 화면 #Solution 위 문제는 이전 Darkelf(http://croas.tistory.com/45)문제와 동일하게 연산자 or 과 and 를 필터링 하고 있다 이전 문제와 다른 점이라면 DB에 저장되어있는 admin에 해..

croas.tistory.com

 

우선 코드를 보면 or와 and가 필터링 되어 대신 || 와 &을 써야 한다는 것을 알수 있다.

 

1. 비밀번호 길이를 알아내야 한다. mysql함수 length함수를 이용해서 알아보았다.

?pw=%27||id=%27admin%27%26length(pw)=8%23 8이 적힌 부분을 1부터 넣으줬는데 8을 넣었을때 길이를 맞았다는 Hello admin이 출력되었다.

 

8자리 숫자가 각각 무엇인지 대입해서 맞추는 방법이 있고 프로그램을 짜서 알아내는 방법이 있다.

 

한글자씩 알아내기에는 어려울꺼 같아 파이썬 코드를 참고하여 짜서 해결해 보았다.

파이썬 코드 참고 https://d1n0.tistory.com/8

 

 

4번의 org문제와 동일한 형식으로 blind sql문제이다. 두문제 모두 비밀번호의 길이를 알아내고 비밀번호를 찾는 문제이다.

비밀번호의 길이까지는 큰 어려움 없이 알아낼수 있었으나 비밀번호를 알아내는데는 어려움이 있었다.

한글자씩 찾는 받법이 있고 파이썬으로 코드를 짜서 해결하는 방법이 있다.

두 방법 모두 다시 해보고 파이썬 코드를 직접 짜보는 공부가 더 필요하다.

preg_match함수에서 and나 or을 쓰는것을 막고 있다.

쿼리를 보면 id랑 패스워드에 해당하는 것을 가져온다.

이문제를 해결하려면 데이터베이스에 admin이라는 아이디를 가져와야지 풀리는 문제임을 알 수 있다.

 

일단 or랑 and가 필터링 되어 있으니까 or 대신 ||을 쓰고 and 대신 &&모양을 사용하면 된다.

여기서 and문자는 url에서 처리되기 때문에 url인코딩을 해서 %식으로 입력을 해줘야 된다.

 

where문을 거짓 처리하고 admin을 새로 적어주려고 pw에 0이나 빈칸 등의 값을 넣어주면 where문이 거짓 처리가 된다.

그리고 admin이 나오도록 쿼리를 바꿔주는데

select id from prob darkelf where id='guest' and pw='0' or id ='admin'하면 해결할 수 있다.

이때 or와 and는 우회해서 적어주면 해결할 수 있다.

 

마지막에 #을 붙이는데 #도 url인코딩해서 사용한다. 이유는 pw검증을 무시하는 공격 방법으로 pw검증부분을 주석처리 해서 보내는 방법으로 문제를 해결할 수 있다.

 

?pw=0'||id='admin'%23

preg_match함수에서 공백이 있으면 No Hack 을 출력하게 되어있다.

이문제 역시 id 가 admin이면 wolfman을 출력하며 성공메세지를 얻을 수 있다.

 

공백을 사용할 수 없으니 공백을 대체해서 문제를 해결할 수 있다.

id가 guest로 이부분을 거짓처리하고 id에 새로 admin을 삽입하면 될것 같다.

 

공백 필터링을 우회할 수 있는 것들을 찾아보니 여러가지가 있었다.

https://wave1994.tistory.com/8

pw='or%09id='admin'%23

해결

일단 공백을 입력하면 정답이 나오지 않는 다는것 공백을 우회하는 방법은 익혔으나 ?뒤에 어떤식으로 써야되는지는 더 공부해봐야 될듯 싶다..!

 

SQL injection공백 우회방법이 적힌 것들이다

https://binaryu.tistory.com/31

+ Recent posts