15번째로 푼 문제이다.

SQL Injection 문제인데... 내가 가장 자신있기도하지만
풀기는 귀찮아서 풀기 시작하기가 조금 꺼려지는 문제이기도 하다..!

문제이름은 외로운 사나이
lonely guys이다.



(lonely guys)



아래는 문제 페이지다.
문제 이름과 어울리게 외로운 남자들의 이름이 적혀있다.



(문제 페이지)



당연히 소스코드가 주어졌으니 소스코드를 보고 우리가 공략할 수 있는 부분을 확인해보자.



(소스 코드)



소스코드를 보니 select 문을 이용할 수 있는데
ordey by 뒤에 붙일 수 있다.. (몰랐지만 이게 조금 검색을 하게 만들었던 부분이다.)

order by reg_date 뒤에는 일반적으로 asc desc 가 오거나 혹은
order by reg_date, [컬럼명], 컬럼명 ... 등등 이렇게 올수 있다.

나는 콤마로 붙여 여러게를 있는 방법을 사용했다.
if 분기문을 사용해 Blind injection을 할 것이다.

우리가 공략해야할 테이블 이름은 authkey이며 컬럼이름은 authkey이다. (코드에 나와있다.)

먼저 POST방식으로 sort를 전달해야하므로 post form 문을 만들어주자.



(form 문 제작)



기본적으로 내가 사용하려는 if 문으로 blind injection의 공격 가능성을 체크해본다.

if(1=1, sleep(2),2)
만약 공격이 된다면 슬립이 걸려 2초가 멈췄다 동작할 것이다.




(인젝션)





(실행결과)



실행결과 2초가 멈추는 것을 알 수 있었다.

즉 if문을 사용해 공격할 여지를 확인했다.

if(조건,참,거짓) -> 조건문에 내가 확인하고 싶은 쿼리를 사용할 것이고 참에는 sleep을 걸어줄 것이다.
헌데.! sleep은 시간이 좀 걸리니까 에러기반으로 전향했다.
참 부분에 에러를 유발 시킬 수 있는 문구를 넣는것이다. 
내가 자주 사용하는 에러 유발 문구 cot(0)을 사용할 것이다.
cot(0)은 무한대이므로 에러가 난다.

먼저 길이를 알아보자.!
길이를 알기위한 조건문
length((select authkey from authkey limit 0,1))=길이
사용한 쿼리문
,if(length((select authkey from authkey limit 0,1))=i,cot(0),0)
i를 30부터 45까지 돌려주었다. (30이상으로 참이 나왔고 45 이상으로 거짓이 나왔기 때문)



(길이 확인)




(실행결과)



실행 결과 flag길이는 40글자라는 것을 확인 할 수 있었다.

이제 본격적으로 blind injection에 들어간다. 40글자를 찾을 것이다.
사용한 쿼리
,if(ord(substr((select authkey from authkey limit i,1),1,1))=j,cot(0),0)



(authkey 찾기)



(실행결과)



실행결과 authkey를 찾았고 문제를 해결할 수 있었다.


'WarGame > 500 Project' 카테고리의 다른 글

(17/500) Lord of the BOF - gremlin  (0) 2017.05.05
(16/500) Wargame.kr - ip log table  (0) 2017.04.20
(14/500) Wargame.kr - strcmp  (0) 2017.04.16
(13/500) Wargame.kr - SimpleBoard  (0) 2017.04.16
(12/500) Wargame.kr - tmitter  (0) 2017.04.15

+ Recent posts