반응형

1. 소프트웨어적인 방법 = 폴링(Polling)


  • 인터럽트 발생 시 높은 우선순위의 인터럽트 자원부터 인터럽트 요청 플래그를 검사하여, 우선순위가 가장 높은 인터럽트 자원을 찾아내 루틴을 수행하는 방식
  • 많은 인터럽트가 있을 경우, 모두 조사하는 데에 시간이 걸려 처리 속도가 느림
  • 회로가 간단함
  • 융통성이 있음
  • 별도의 하드웨어가 필요없어 경제적


2. 하드웨어적인 방법 = Vectored Interrupt


  • CPU와 인터럽트를 요청할 수 있는 장치 사이에 장치번호에 해당하는 버스를 직렬이나 병력로 연결하여 요청 장치의 번호를 CPU에게 알리는 방식
  • 인터럽트 벡터란, 인터럽트를 발생한 장치가 프로세서에게 분기할 곳에 대한 정보를 제공하는 것
  • 장치 판별을 위한 별도의 프로그램 루틴이 없어 응답 속도가 빠름
  • 회로가 복잡함
  • 융통성이 없음
  • 추가적인 하드웨어가 필요하므로 비경제적
1) 직렬(Serial) 우선순위 부여 방식 = 데이지체인(Daisy-chain)
- 인터럽트가 발행하는 모든 장치를 한 개의 회선에 직렬로 연결
- 우선순위가 높은 장치를 선두에 위치시키고 나머지를 우선순위에 따라 차례로 연결
- 호스트에 가까운 쪽에 높은 우선권을 두는 경우가 많음 

2) 병렬(Parallel) 우선순위 부여 방식
- 인터럽트가 발생하는 각 장치를 개별적인 회선으로 연결
- Mask Register의 비트 위치에 따라 우선순위 결정
- Mask Register는 우선순위가 높은 것이 서비스를 받고 있을 때, 우선순위 낮은 것을 비활성화 할 수 있음
- 우선순위가 높은 인터럽트는 낮은 인터럽트가 처리되는 중에도 우선적으로 처리됨

3. 요약정리

 

H/W

S/W

속도

빠름

느림

회로

복잡

간단

융통성

없음

있음

경제적

비경제적

경제적





반응형
반응형


일주일 휴가를 받아 이전부터 가고 싶었던 태국 방콕을 다녀왔습니다.


역시 불교의 나라, 세계 여행지 순위 1위인 이유, 음식이 가장 맛있는 곳 1위인 이유를 흠뻑 느끼고 왔던 여행이었습니다.


여행 준비부터 일정, 경비까지 정리해보도록 하겠습니다!!


#1. 비행기표

직업 특성상 미리 표를 구할 수 없는 구조라 매번 날짜가 닥쳐서 비행기표를 예약하게 되네요ㅠ


저는 딱 한달전에 방콕행 비행기표를 예약했는데요, 날짜+연휴전주 라는 핸디캡 때문에 가격이 좀 비쌌던것 같습니다.




스카이스캐너로 최저가를 검색한 후 인터파크 투어에서 결제를 했습니다.


정확한 금액은 기억이 안나지만, 수수료까지 다 합쳐서 42만원~43만원 정도였습니다.


저보다 일주일 늦게 결제한 친구는 이 때보다 10만원이 더 오른 가격에 결제를 했는데, 역시 비행기표는 최대한 빨리 사는게 이득이군여ㅜㅜ


#2. 1일차 일정


사실 이번 여행은 빽빽한 일정을 짜고 간것은 아니였죠. 7박 8일이라는 긴 시간동안 여유롭게 둘러보고 싶었거든요.


그래서, 1일차 일정 전혀 생각 안하고 갔답니다ㅠ 


방콕 공항에는 11시 정도에 도착했는데요, 한시간이나 빨리 도착했을 뿐더러 이렇게 빨리 도착할거라는 생각도 못하고 그냥 도착하는 날이니까


뭘 하겠어~ 라는 생각을 했던거 같아요.


그래서!! 즉흥 여행을 했죠.


일단, 택시를 타고 람부뜨리 로드로 향했습니다. 저희 숙소가 람부뜨리 로드에 있는 Rambuttri Village 였거든요.


>> https://www.booking.com/hotel/th/rambuttri-village-plaza.ko.html (예약은 Booking.com, 자세한 숙소 정보는 링크를 이용하세요)


 


람부뜨리 로드 모습입니다. 아직 밤이 안되서 그런지 한산한 느낌이었습니다.


길 가다보면 4번째 사진같이 길거리에서 마사지 받는 모습을 많이 볼 수 있었는데요, 수줍음 많는 저는 시도를 못해본..


람부뜨리 로드를 거닐면서 느낀 점은 확실이 동양인보다 서양인이 많다는 점!! 


카오산 로드랑 람부뜨리 로드가 왜 여행객의 성지라 불리는지 확실히 느낄 수 있겠더라고요!



친구랑 저는 람부뜨리 로드 초입에 있는 로컬 가게에 들어가 점심을 먹었습니다.


배틀트립(쭈아투어)를 보고 간터라 찾아가긴 했는데 정확하게 그 곳인지는 잘 모르겠어요ㅜ


방송에서 추천해준 랏나?를 시켰구요, 방송에서는 전 같은게 들어가있는 스프를 시켰는데 저희 스타일이 아닐거같아 시키진 않았습니다.


중국풍 면요리였는데 역시 맛있구요! 동남아 망고는 실망시키지 않아요ㅋㅋㅋㅋ 진짜 JMTGR♡♥



점심을 먹고 어디를 갈까 고민하다가 역시 배틀트립(쭈아투어)에 나왔던 딸랏롯파이2 야시장에 가보기로 했습니다.


람부뜨리 로드에서 가기는 조금 먼 감이 있었는데, 그래도 태국은 택시비가 싸니까요ㅠ 질러버렸습니다ㅋㅋㅋㅋ


태국와서 처음 느껴보는 야시장 스웩!! 넘 좋았고, 내일 입을 코끼리 치마도 겟했어요!!ㅋㅋㅋㅋ



이 야시장에서 저녁까지 해결했는데요, 이번에도 역시 방송에 나왔던 가게와 메뉴를 택했습니다.


첫날은 아무 계획없이 오다보니 아무래도 방송을 따라하게 되었네요!


고기가 진짜 야들야들하고 부드러워요ㅠㅠ 근데 태국 고추가 들어가서 조금 많이 맵구요,, 태국음식 특유의 새콤한 맛?이 나요.


그리고 드뎌!! 태국 3대 맥주 중에 2개를 먹어봤는데요, 탄산이 적어서 목넘김이 좋더라고요. 그래도 저는 LEO 한표!(좀 더 진함)



저녁 맛있게 먹고 야시장 구경 했어요!


역시나 야시장은 길거리 음식 아닌가요? 그렇게 먹고도 또 들어가는...


딸랏롯파이2 야시장에서 해산물이 유명하다는데 배가 너무너무 불러서 포기하고.. 그냥 해산물 꼬치로 대신했습니다ㅠㅠ 아쉽


다시 방콕을 간다면, 2층 바에 올라가서 야경과 그 해산물 음식은 꼭 먹어볼거에요!



마지막으로 방콕 시내 야경 투척하면서 첫날 마무으리☆


반응형
반응형

Server-side Template Injection 문제입니다. 처음에 접했을 때는 생소한 공격방법이라 당황했었는데요,

구글 검색 시 많은 정보가 나오더라고요.. (공부 안한거 들통ㅠ)


이 문제를 풀 때 개념을 https://www.netsparker.com/blog/web-security/server-side-template-injection/ 이 곳에서 파악했구요,

상세 공격 방법들은 https://portswigger.net/blog/server-side-template-injection 이 곳을 참고했습니다.

요약하면, Server Side Template는 동적 HTML을 생성할 수 있다는 큰 장점때문에 사용되고 있는데, 템플릿 문자열 내에 사용자가 입력을 제어하는 부분을 이용하여 사용자가 템플릿 표현식을 실행할 수 있을 경우 원격 코드 실행까지 이어질 수 있다는 것입니다.

 

문제를 풀어보도록 하겠습니다.


문제에 들어가보면, 닉네임을 입력하라는 입력창과 check 버튼이 있습니다.

임의의 문자열을 삽입한 후 버튼을 클릭하면 아랫 줄에 echo 명령어처럼 사용자가 입력한 값을 그대로 뿌려줍니다.


이번에는 공격 가능성이 존재하는지 알아보도록 하겠습니다.


${7*7} 을 입력할 경우, 공격이 불가능한 경우라면 "${7*7}" 전문이 나오는 것이 정상이지만, 문제에서는 계산이 되어 나옵니다.

때문에, 원하는 명령어를 실행할 경우 서버에서 실행되어 결과 값을 얻을 수 있을 것 같습니다..


우선, 간단한 명령어부터 실행해보도록 하겠습니다.


<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("실행할 명령어") } << 명령 코드를 입력하면 위와 같이 명령어 결과 값을 확인할 수 있습니다. (공격코드는 상위 링크에서 확인하였습니다.)


whoami 명령어 역시 정상 동작하여 결과를 확인 할 수 있었습니다.


이번에는 문제에서 요구한 파일을 읽어보겠습니다. 간단한 cat 명령어로 flag를 획득할 수 있습니다.

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Path Truncation  (0) 2019.02.26
[root-me] SQL Injection - GBK  (0) 2019.02.21
[root-me] SQL injection - string  (0) 2019.02.07
[root-me] LFI - Double Encoding  (1) 2019.01.17
[root-me] PHP filters  (0) 2019.01.16
반응형

SQL injection string형 문제를 풀어보았습니다. 역시 관리자의 패스워드를 알아내야 합니다.


문제에 들어가시면 홈/검색/로그인 탭이 있습니다.

이 메뉴들 중에서 SQL Injection이 가능한 포인트를 찾는 것이 관건이었습니다.

news_id 파라미터, 로그인 메뉴의 login, password 파라미터 등 여러 곳에서 SQL Injection을 시도해보았으나,

유일하게 SQL Injection이 가능한 포인트는 검색 메뉴의 recherche 파라미터 였습니다.


검색어에 a를 삽입하면 정상 값으로 5개의 결과 값을 출력하였고요,

a'를 삽입하니 syntax Error가 출력되어서 a%'를 삽입 해보았습니다.


no such column 이라는 에러가 떠서 저는 이곳이 SQL Injection에 취약한 포인트라 판단하였습니다.


이번에는 필드 갯수를 구하기 위해 order by 구문을 삽입했는데요, 아래 구문을 순차적으로 삽입하여 필드 갯수 가 2개인 것을 파악하였습니다.

a%' order by 1--

a%' order by 2--

a%' order by 3-- << 에러 출력 


sql 쿼리문을 삽입하여 스키마 정보를 파악해보았습니다.

a%' union select 1, sql from sqlite_master-- 구문을 삽입하여 news 테이블과, users 테이블이 존재하고 있음을 알 수 있습니다.


마지막으로, 관리자 패스워드가 존재할 것 같은 users 테이블에서 username과 password 값을 출력하면 됩니다.

a%' union select username, password from users-- 해당 구문을 삽입하면, 관리자의 패스워드를 획득할 수 있습니다.

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] SQL Injection - GBK  (0) 2019.02.21
[root-me] Server-side Template Injection  (0) 2019.02.08
[root-me] LFI - Double Encoding  (1) 2019.01.17
[root-me] PHP filters  (0) 2019.01.16
root-me >> SQL injection - blind  (0) 2018.06.08
반응형

1. 인터럽트(Interrupt) 란?


CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외 상황이 발생하여 처리가 필요한 경우 CPU에게 알려 처리할 수 있도록 하는 것.


CPU의 모든 상태는 PSW에서 유지되는데 인터럽트를 알리는 5bit가 있고, 5가지 인터럽트 서비스 루틴(ISP)가 운영체제 일부에 존재한다. 인터럽트 처리 중 다른 인터럽트 발생 시, 우선순위에 의해 인터럽트 처리한다.


2. 인터럽트(Interrupt) 처리 순서


  1. 현재 진행 중인 기계어 코드를 완료한다.
  2. CPU의 특수 레지스터 중 하이로 인터럽트 마스크 비트를 보고 마스크되면 인터럽트를 무시한다.
  3. 인터럽트 벡터를 읽는다.
  4. ISR 주소 값을 얻는다.
  5. ISR로 점프한다. 이 때, PC(Program Counter)값을 자동 저장된다.
  6. 현재 진행중인 프로그램의 레지스터를 저장한다.
  7. 해당 코드를 실행한다.
  8. 해당 코드를 다 처리하면, 저장한 레지스터를 복원한다.
  9. ISR 끝에 IRET 명령어에 의해 인터럽트가 해제된다.
  10. IRET 명령어가 실행되면, 저장한 PC 값을 복원하여 이전 실행 위치로 이동한다


3. 인터럽트(Interrupt) 종류


1. 하드웨어 인터럽트(Hardware Interrupt)

  • 기계검사 인터럽트 : 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서 기계적 문제가 발생한 경우
  • 외부 인터럽트 : 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
  • 입출력 인터럽트 : 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청되는 경우
  • 프로그램 검사 인터럽트 : 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램 문제가 발생한 경우

2. 소프트웨어 인터럽트(Software Interrupt)
  • 존재하지 않는 메모리 주소에 접근하는 경우
  • 나눗셈 연산의 경우 0으로 나누는 등의 논리적 오류가 발생하는 경우

4. 인터럽트(Interrupt) 우선 순위

전원 공급 이상 → CPU의 기계적 오류 → 외부 신호에 의한 인터럽트 → 입출력 전송 요청 및 전송 완료/전송 오류 → 프로그램 검사 인터럽트 → 슈퍼바이저 호출(SVC 인터럽트)

5. 참조 문서



반응형
반응형

#1. 폰노이만 아키텍처(Von Neumann)

  • 메모리에 명령어와 데이터를 함께 저장하며, 데이터는 메모리에서 읽기/쓰기가 가능하나, 명령어는 메모리에서 읽기만 가능
  • 명령어와 데이터 모두 동일한 메모리 버스를 통해 명령 수행(=메모리 공유)
  • 프로그램 내장방식
  • CPU는 한번에 하나의 명령어만 수행 가능(비효율적)
  • 명령어와 데이터 모두 주기억장치에 저장하기 때문에 병목현상 발생


#2. 하버드 아키텍처(Harvard)
  • 명령어 메모리에서 명령어를 가져와 분석/실행하고 참조/결과에 대한 저장은 데이터 메모리에 별도로 하는 구조 
  • CPU는 명령어와 데이터를 동시에 사용할 수 있음
  • 명령어 영역마다 주소버스, 데이터 버스, 제어 버스가 따로 존재
  • 현재 명령 실행 후 바로 다음 명령을 가져올 수 있어 속도 우수
  • 버스 시스템이 복잡해 설계가 복잡
  • 상대적으로 적은 명령어 수와 주소모드
  • 메모리 참조는 LOAD와 STORE로 제한
  • 고정된 명령어 길이 → 디코딩이 간단
  • 단일 사이클의 명령어 실행
  • 명령어 구조 상 RISC 구조
  • 메모리를 분리하여 파이프라인 사용 시 최적


반응형
반응형

LFI Double encoding 문제를 풀어보도록 하겠습니다.


문제를 들어가보니 Home 탭 옆에 CV 탭과 Contact 탭이 존재합니다. 우선 CV 탭을 클릭해보겠습니다. 


CV 탭을 클릭하니 URL 상 page 파라미터가 나오네요. 여기에 LFI 취약점 테스트를 해보도록 하겠습니다.


상위 폴더로 이동 가능한 특수문자 "../"을 삽입하니 공격 구문이 탐지되었습니다ㅜ


이번에는 "../"을 URL 인코딩하여 삽입해 보았으나 역시 공격이 탐지되었습니다.


URL Double Encoding을 해보았습니다. "../"을 두번의 URL 인코딩 후 삽입하였더니! 필터링 없이 LFI 취약점이 발견되었습니다.


php 코드는 실행이 되어버리기 때문에 php wrapper를 사용합니다. 

[php://filter/convert.base64-encode/resource=cv] 문자열을 URL encoding으로 두번 인코딩한 후 삽입해보겠습니다.


그랬더니, 정상적으로 공격이 수행되어 cv의 소스코드가 base64로 인코딩된 코드가 노출되었습니다.

base64로 디코딩해보겠습니다.


BASE64로 디코딩 한 소스 내에서 conf.inc.php 파일이 존재하는 것을 파악할 수 있었습니다.

conf.inc.php 코드를 봐야겠군요.


php wrapper를 통해 [php://filter/convert.base64-encode/resource=conf] 문자열을 URL 인코딩으로 두번 한 후 삽입하겠습니다.


정상적으로 공격이 성공하여 BASE64로 인코딩된 소스코드가 노출되었습니다.


BASE64 디코더로 디코딩 해보니 FLAG 값이 나와있습니다.!! 


반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Server-side Template Injection  (0) 2019.02.08
[root-me] SQL injection - string  (0) 2019.02.07
[root-me] PHP filters  (0) 2019.01.16
root-me >> SQL injection - blind  (0) 2018.06.08
root-me>>SQL injection - numeric  (0) 2018.05.01
반응형

#1. CISC(Complex Instruction Set Computer)

  • 복잡한 명령어 집합을 가진 CPU 아키텍쳐
  • 복잡한 하드웨어 회로
  • 많은 수의 명령어와 주소모드가 존재하나 실제로 쓰이는 명령어는 한정
  • 실행 성능 개선(파이프라인 등..) 방법 적용이 어려움
  • 대부분의 명령어는 직접 메모리 접근이 가능
  • 풍부한 어드레싱 기능 → 명령의 직교성이 뛰어남


#2. RISC(Reduced Instruction Set Computer)
  • CPU 명령어 개수를 줄여 간단한 하드웨어 회로
  • SPARC, MIPS 등의 아키텍처에서 사용
  • 복잡한 연산 → 단순한 여러 개의 명령어로 처리 가능
  • 프로세서 레지스터 뱅크 & 캐시 존재 → 시스템 수행속도 향상
  • 메모리와 CPU 사이 데이터 전송 시 LOAD와 STORE 명령만으로 한정
  • 명령어 형식은 모두 같은 길이
  • 어드레싱 모드의 수는 제한

 

 CISC

RISC 

 주요 특징

 복합명령어 / 하드웨어 복잡

 고정 명령어(32bit) / 하드웨어 간단

 CPU 명령

 명령어 갯수 많음 → 실행 사이클(속도) 다양

명령어 길이 고정 → 실행 사이클 동일 

 회로 구성

복잡 

단순 

 메모리 사용

 효율

비효율 

 프로그램 코드사이즈

 small(130~140)

large(160~180) 

 프로그램 측면

명령어 적게 사용 

 상대적 많은 명령어

 컴파일러

 복잡

단순 


※표는 
블로거 bitnang님의 자료를 참고하였습니다. >> https://blog.naver.com/bitnang/220692059829
문제가 된다면 삭제하겠습니다.


반응형
반응형

오랜만에 root-me 문제를 풀어보았습니다.ㅠㅠ

PHP filter 문제이고, 어드민 패스워드를 찾으면 된다고 하네요.


우선, 문제를 들어가보면, home과 login 버튼이 활성화 되어있습니다. 클릭해봅니다..


[home] 버튼을 클릭하면 URL 상에 inc 파라미터로 해당 php파일이 들어가있습니다. 

LFI 문제가 아닌가 의심해봅니다.


상위폴더로 이동하는 특수문자 "../"을 삽입해보았더니 경고 문구가 뜨면서 LFI 가능성을 높여줍니다.


inc 파라미터에 php파일 경로를 쓰면, php 파일 소스를 볼 수 있는게 아니라 실행이 되어버립니다.

저는 방법을 찾다가 LFI-cheat-sheet에서 PHP Wrapper 방법을 찾았습니다. 자세한 정보는 아래의 링크를 참고하세요.


>> https://highon.coffee/blog/lfi-cheat-sheet/


따라서, inc 파라미터에 php wrapper를 이용해 [php://filter/convert.base64-encode/resource=파일경로]를 삽입하면 인코딩된 문자열이 보입니다.

디코딩ㄱㄱ


BASE64 디코더 >> http://www.convertstring.com/ko/EncodeDecode/Base64Decode


해당 문자열을 디코딩 하니까 ch12.php의 소스코드가 보입니다! 해당 소스에서 config.php라는 의심스러운 php 코드를 찾았고,


다시 php wrapper를 이용해 config.php경로를 삽입하니 인코딩된 문자열이 나오구요


디코딩해보니!! 어드민 패스워드를 찾을 수 있었습니다%^^%


반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] SQL injection - string  (0) 2019.02.07
[root-me] LFI - Double Encoding  (1) 2019.01.17
root-me >> SQL injection - blind  (0) 2018.06.08
root-me>>SQL injection - numeric  (0) 2018.05.01
root-me >> Command injection  (0) 2018.04.24
반응형

#1. PATA(Paralled ATA) = IDE = EIDE(Enhanced IDE)

  • 초기에 많이 사용됨. 지금은 거의 볼 수 없음.
  • 데이터 병렬 전송
  • PIO(Programmed Input/Output) 전송방식
  • 3.3MB/s ~ 16.7MB/s 속도 지원(매우 느림)


#2. SATA(Serial ATA)

  • PATA에서 진화된 케이스. 현재 주로 사용됨.
  • SATA1(~150MB/s) / SATA2(~300MB/s) / SATA3(~600MB/s)
  • 데이터 직렬 전송(높은 클록 주파수로 고속 전송을 위함)


#3. SCSI(Small Computer System Interface)

  • PATA의 데이터 안정성과 전송 속도를 향상시키기 위해 개발됨
  • 고성능+안전성
  • 데이터 병렬 전송
  • 고가의 제품 → 서버/워크스테이션 용으로 사용됨


#4. SAS(Serial Attaced SCSI)
  • 데이터 직렬 전송(전송속도와 안정성 대폭 증가)
  • HDD보다 좋은 성능
  • 고가의 제품 서버/워크스테이션 용으로 사용됨(별도의 SAS 컨트롤러 필요)
  • Point to Point
  • SATA와 호환되어 SATA 제품을 SAS컨트롤러에 연결하여 사용할 수 있지만, SAS제품은 SATA 포트에 연결할 수 없음.


반응형

+ Recent posts

반응형
반응형