8주차 세션

CS pro·2023년 6월 21일
0

드림핵

목록 보기
6/6

Q1_CarveParty

이 문제는 호박을 10000번을 클릭하여 플래그를 얻는 문제이다.
하지만 나는 10번 클릭하는 것도 힘들었다 그래서 수고를 덜하기 위해서 코드를 수정하였다.

▲원래 코드
!
▲ 바뀐 코드(1씩 증감하는 것을 100으로 바꿔주었다)
100씩 줄어드는 것을 알 수 있다!
따라서 10000번을 클릭해야되는 것을 100번 클릭하게끔 만들어주었다
(이것도 힘들긴하다 ㅎㅎ)

그랬더니 플래그값이 나왔다..!

Q2_sql-injection bypass WAF

Web ApplicationFirewall(WAF)는 웹 애플리케이션에 특화된 방화벽이다. 웹 방화벽은 공격에 사용되었던 코드 즉, 주요 키워드를 기반으로 탐지한다. 따라서 방화벽이 적용된 웹 서비스에서 SQL injection 취약점이 발생하더라도 공격을 최소화할 수 있다. 하지만, 키워드를 이용해 탐지하는 방식을 사용하기 때문에 근본적인 취약점을 해결할 수 없다.

▲데이터베이스는 메모장으로 되어있다. idx, uid,upw 칼럼 존재하고, guest,admin,test,abcde,dream 등등 계정 존재한다는 것을 알 수 있다.

sql 인젝션이 발생하면 코드에서 입력가능한 키워드를 알아야한다.
코드에서는 check_WAF함수 에서 keywords에서 볼 수 있다.▼

이것을 사용하지 않고 공격할 수 있는지 생각해봐야한다.
그 다음 admin 비밀번호를 획득하는 것이다.
▲ 사이트에서 이중 인코딩이 되어서 리눅스 환경에서 curl을 통해 플래그를 얻어냈다.(참고:https://learn.dreamhack.io/311#8)

리눅스 curl 명령어는 Client Url의 줄임말이므로 클라이언트에서 url을 사용해서 서버와 데이터를 송수신하는 명령어 툴이라고 한다.(글 출처:https://sasca37.tistory.com/279)

Q3_command-injection chatGPT

나는 chatGPT한테 별 도움을 못 받았다ㅜㅜ

command-injection 관련 강의를 찾아보았다.
injection이라는 것은 악의적인 데이터를 프로그램에 입력하여 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법을 말한다.
sql 인젝션과 command 인젝션이 있다. 우리는 command 인젝션을 다룰 것이다.
command-injection은 이용자의 입력을 시스템 명령어로 실행하게 하는 취약점이다. 주로 명령어를 실행하는 함수에 이용자가 임의의 인자를 전달달 수 있을 때 발생한다.
임의의 ip에 ping을 전송하고 싶으면 os.system("ping [user-iput]"),
임의의 파일을 읽고 싶다면 os.system("cat [user-input]")등의 형태로
시스템 함수를 사용할 수 있다고 한다. 그러나 셸에서 지원하는 메타문자때문에 문제가 발생할 수도 있다. 예를 들면 &&,||,;,|가 있다. 따라서 이 메타문자로 통해 임의 명령어를 실행하여 셸을 획득할 수 있다.(메타문자를 통해 문제를 풀 것이다)


강의에 나와져 있는 공격 예이다.
위 명령어는 "ping" 명령어를 사용하여 "8.8.8.8"에 3회의 ICMP 패킷을 보내고, 그 후에 "id" 명령어를 실행하는 것을 의미한다. 이를 통해 공격자는 웹 애플리케이션 서버에서 "ping" 명령을 실행하고, 그 결과로 "id" 명령어를 실행하여 서버에서 현재 사용자의 식별자와 권한을 확인할 수 있다.(출처: chatgpt)

따라서 강의를 적용해보자
문제에 플래그는 flag.py에 있다고 하니까 리눅스 화면 출력 명령어인 cat을 사용하겠다.
따라서 메타문자를 이용하면 -c 3 8.8.8.8; cat flag.py를 ping으로 전송하면 다음과 같이 플래그가 나오게 된다.

profile
보안전문가 되기 위한 과정기록

0개의 댓글