websec.fr babysteps level04

소스를 먼저 살펴봐야 할 것 같다.

첫번째 파일 부터 살펴보겠다.

serialize() : php변수들을 배열로 만들어 주는 함수, get, post방식으로 넘어온 배열값을 직렬화 시키는데 사용된다.

unserialize() : 직렬화된 배열을 다시 php변수로 바꾼다.

 

sql에서 serialize를 사용하는 방법에 대한 링크를 봐서 보고 공부했다...

https://blog.sonarsource.com/php-object-injection?redirect=rips 

 

PHP Object Injection

A very common and critical vulnerability in PHP applications is PHP Object Injection. This blog post explains how they work and how they can lead to a full site takeover by remote attackers.

blog.sonarsource.com

 

leet_hax0r라는 쿠키값을 이용하고 있다. base64_decode가 쓰인걸로 봐서 이 쿠키값은 아스키코드로 이루어졌나보다.

바로 밑 else부분을 살펴보면

cookie라는 변수에 REMOTE_ADDR을 array()->serialize()->base64 encode하고 있는걸 확인 할 수 있다.

그리고 leet_hax0r을 정해주고 있다. 

 

is_numeric은 숫자인지 확인해주는 함수이므로 id가 숫자여야 하나보다.

쿠키값이 나온다는건 내가 조작해야할 곳이 쿠키임을 알려주는것 같다.

.=연산자는 접합한 값을 왼쪽 변수에 할당한다고 한다.

 

다음 소스파일도 살펴보겠다.

 

 

다시 문제화면으로 돌아가서 id는 숫자라는 힌트를 얻었으니 1을 시험삼아 입력해봤다.

1의 username이 flag?

USER ID칸에 이것저것 쿼리문을 주입해봤지만

이외에는 가능한게 없어서 쿠키값 조작을 해야할 것 같다.

 

쿠키값에 우리는 base64로 encode되고 serialize된 상태의 값을 넣어야한다.

주입하고 싶은 쿼리문을 base64로 인코딩 해야할거 같다.

 

파이썬으로 했는데 쿠키값 적용까지 파이썬으로 하면 완벽한 자동화겠지만 아직 어려워서 그냥 크롬을 이용했다.

import base64
import requests

query = "select sql as username from sqlite_master where name ='users'"
payload = 'O:3:"SQL":1:{s:5:"query";s:'+str(len(query))+':"'+query+'";}'
print(payload)
encode = base64.b64encode(payload.encode('utf-8'))
print(encode)

 

 

여기서 as의 역할을 사실 잘 이해를 못했다.

payload부분을 쓸때 참고한 링크

https://blog.sonarsource.com/php-object-injection?redirect=rips 

 

PHP Object Injection

A very common and critical vulnerability in PHP applications is PHP Object Injection. This blog post explains how they work and how they can lead to a full site takeover by remote attackers.

blog.sonarsource.com

sqlite관련 참고한 링크

https://mdkstudy.tistory.com/m/74

 

SQLite 테이블, 컬럼 정보 가져오기

sqlite_master Table mysql 에서 테이블 정보나 컬럼 정보를 가져올때 information_schema 테이블을 많이 이용하는데 sqlite 에는 sqlite_master 테이블을 이용해서 테이블, 컬럼 정보를 가져온다. CREATE TABLE s..

blog.int80.kr

쨌든 결과는

password를 알아내면 될듯하다.

select password as username from users

 

'문제풀이 > 보안 writeup' 카테고리의 다른 글

hackerschool ftz : trainer 1  (0) 2021.07.30
Dreamhack [csrf-1]  (0) 2021.07.23
wargame.kr [SimpleBoard]  (0) 2021.07.03
[root-me] NoSQL Injection - Authentication  (0) 2021.07.02
SuNiNaTaS(써니나타스) 22번  (0) 2021.07.02
myoskin