하드웨어 해킹에 유용한 자료들을 소개하도록 하겠다.
-해커스쿨
Index of /HardwareHacking (hackerschool.org)
해커스쿨 강좌실 - 전광판 해킹 (hackerschool.org)
하드웨어 해킹에 유용한 자료들을 소개하도록 하겠다.
-해커스쿨
Index of /HardwareHacking (hackerschool.org)
해커스쿨 강좌실 - 전광판 해킹 (hackerschool.org)
공군 정보보호병 가산점을 위해 네트워크 관리사 2급을 취득하였다.
자격응시료가 필기(43,000)+실기(78,000)=총(121,000)으로 상당히 비쌌다.
그래서 모두 한 번에 합격하였다.
[문제경로]
https://dreamhack.io/wargame/challenges/960
Type c-j
Description php로 작성된 페이지입니다. 알맞은 Id과 Password를 입력하여 플래그를 획득하세요. 플래그의 형식은 DH{...} 입니다.
dreamhack.io
[문제정보]
[문제풀이]
1. 우선 웹서버에 접속했다. ID와 Password를 입력받을 수 있는 페이지가 있다.
2. 얻을 수 있는 특별한 정보가 없어 소스코드를 다운로드하였다. 3개의 php 파일이 있는데 코드를 확인해 보니 check.php 파일을 통해서 ID와 Password를 얻을 수 있었다.
check.php 파일의 소스코드에서 ID와 Password를 얻을 수 있는 코드를 확인해 봤다. getRandStr() 함수를 호출하여 나온 값이 id에 저장되고 sha1("1") 함수를 호출해서 나온 값은 pw에 저장되는 것을 알 수 있다.
3. id 값을 먼저 구하기 위해서 getRandStr() 함수가 있는 코드로 가봤다. 어떠한 연산을 수행해서 결과적으로 randomString을 리턴하는 것을 알 수 있다.
randomString 값을 구하기 위해서 getRandStr() 함수를 호출하고 반환되는 값을 ID 변수에 저장한 후 해당 변수의 값을 출력하는 코드를 구성했다.
그리고 이 코드를 온라인 컴파일러에 돌렸더니 다음과 같은 ID 값이 출력되었다.
ID 값이 맞는지 확인하기 위해서 다음 코드를 보면 알 수 있다. 입력한 id가 주어진 id와 같고, id의 길이가 10자리라면 ID pass를 출력한다는 것이다.
그래서 ID 값에 구한 값을 넣고 Password에 아무 값이나 집어넣어 제출했다.
ID가 맞다는 것을 알 수 있다.
4. 이제 Password 값을 구해야 한다. pw 변수에는 sha1("1") 함수의 결과 값이 저장된다. (sha1 함수는 "Secure Hash Algorithm 1"의 약자로, 입력 데이터를 메시지 다이제스트라는 해시 값으로 만드는 암호화 해시 함수이며 보통 16진수 40자리로 랜더링 된다.) 온라인으로 SHA1 해시를 생성해 주는 사이트에서 1을 입력하고 생성한 결과는 다음과 같다.
나온 해시 값은 총 40자리이다. 그런데 소스코드에서 pw는 8자리 이어야 flag 출력이 가능하다.
그냥 해시 값 앞 8자리를 pw에 넣어보기로 했다.
바로 FLAG가 도출된 것을 확인할 수 있다.
Reference: https://www.mycompiler.io/ko/new/php
[Webhacking] what-is-my-ip (0) | 2024.03.30 |
---|---|
[Webhacking] php7cmp4re (0) | 2024.01.30 |
[Webhacking] Flying Chars (0) | 2023.08.22 |
[Webhacking] devtools-sources (0) | 2023.08.21 |
[Webhacking] session-basic (0) | 2023.08.13 |
[문제경로]
https://webhacking.kr/challenge/js-3/
Challenge 16
webhacking.kr
[문제풀이]
1. 문제에 접속하면 다음과 같은 이미지가 들어있다.
2. Ctrl+U를 통해 소스 코드를 확인해 봤다.
<html>
<head>
<title>Challenge 16</title>
# 배경색을 검정으로 하고, 이벤트 핸들러 onload가 실행될때 kk함수를 호출하고, 이벤트 핸들러 onkeypress가 실행될때 mv함수를 호출한다.
<body bgcolor=black onload=kk(1,1) onkeypress=mv(event.keyCode)>
<font color=silver id=c></font>
<font color=yellow size=100 style=position:relative id=star>*</font>
<script>
document.body.innerHTML+="<font color=yellow id=aa style=position:relative;left:0;top:0>*</font>";
function mv(cd){
kk(star.style.left-50,star.style.top-50);
# 100에 해당하는 키를 입력했을시 "*"이 오른쪽으로 50px 이동한다.
if(cd==100) star.style.left=parseInt(star.style.left+0,10)+50+"px";
# 97에 해당하는 키를 입력했을시 "*"이 왼쪽으로 50px 이동한다.
if(cd==97) star.style.left=parseInt(star.style.left+0,10)-50+"px";
# 119에 해당하는 키를 입력했을시 "*"이 위쪽으로 50px 이동한다.
if(cd==119) star.style.top=parseInt(star.style.top+0,10)-50+"px";
# 115에 해당하는 키를 입력했을시 아래로 "*"이 50px 이동한다.
if(cd==115) star.style.top=parseInt(star.style.top+0,10)+50+"px";
# 124에 해당하는 키를 입력했을시 .php 경로로 이동한다.
if(cd==124) location.href=String.fromCharCode(cd)+".php"; // do it!
}
# "*" 모양의 특성을 정의하는 것이다. 색상이 무작위로 설정, 생성되는 위치 설정, 이벤트 핸들러 onmouseover이 실행되면서 생성된 "*"의 내용을 비운다.
function kk(x,y){
rndc=Math.floor(Math.random()*9000000);
document.body.innerHTML+="<font color=#"+rndc+" id=aa style=position:relative;left:"+x+";top:"+y+" onmouseover=this.innerHTML=''>*</font>";
}
</script>
</body>
</html>
124에 해당하는 키를 입력하면 .php 경로로 이동하면서 문제가 풀릴 것으로 예측된다.
3. 먼저 숫자에 해당하는 키가 있어야 하니 아스키 코드를 생각해 봤다.
100 | d |
97 | a |
119 | w |
115 | s |
124 | | |
즉 124에 해당하는 "|" 키를 입력하면 문제가 풀릴 것이다.
입력하니 .php 경로로 이동하면서 문제가 해결되었다.
[Webhacking.kr] old-26 (0) | 2024.04.13 |
---|---|
[Webhacking.kr] old-06 (0) | 2024.04.10 |
[Webhacking.kr] old-15 (0) | 2023.09.17 |
[Webhacking.kr] old-17 (0) | 2023.09.17 |
[Webhacking.kr] old-03 (0) | 2023.09.15 |
하기의 공격기법과 비슷한 유형(초당 수많은 양의 데이터를 보내 네트워크 용량을 초과시키는 것)은 인터넷이 존재하는 한 사라지지 않는다. 다음에 나오는 3개의 공격기법은 지금은 잘 안 먹히지만 지금도 여전히 이로 인한 사건, 사고가 발생하고 있다.
[DoS]
DoS(Denial of Service): 서비스 거부 공격으로 한대의 PC를 이용해 개인적인 차원에서 대량의 데이터를 한 곳에 집중적으로 전송하는 공격이다. 이를 통해 표적이 되는 서버의 자원을 고갈시켜 시스템, 서비스를 사용하지 못하게 하는데 목적이 있다. 서버 제작 후 hping3을 이용한 실습을 해볼 수 있다.
[DDoS]
DDoS(Distributed Denial of Service): 분산 서비스 거부 공격으로 악성코드에 감염된 여러대의 PC들이 한 곳의 서버에 대해 시행하는 DOS 공격이다. 빈번하게 발생하고 있으며 사례로는 LoL 디도스 공격이 있다.
https://m.ddaily.co.kr/page/view/2024030822054193804
[DRDoS]
DRDoS(Distributed Reflection Denial of Service): 분산 반사 서비스 거부 공격으로 IP Spoofing을 사용하여 공격자의 IP주소를 공격 대상의 IP로 위조하고 이를 다수의 반사체(Reflector)에게 요청을 하며, 반사체(Reflector)는 요청된 곳의 IP 주소를 확인한 후 위조된 IP로 응답패킷을 보내어 수행하는 DDoS 공격이다. 패킷의 크기를 증폭시키는 요청, 패킷의 양, 전송속도 등을 높여 대규모의 공격 트래픽을 발생시킬 수 있다.
IDS/IPS를 통해 이러한 공격들에 대하여 탐지 및 방지 조치를 취할 수 있다. 그러나 현실적으로 IDS(Detection)/IPS(Protection)로는 못 막는다. 왜냐하면 IDS/IPS 자체에 공격을 실행할 수 있기 때문이다. 따라서 WAF(Wdb Application Firewall)을 사용한다.
Reference: [DRDos 증폭 공격 기법과 방어 기술 연구], 최현상, 박현도, 이희조
[Network Hacking] BFA & RBFA & 사전공격 & 크리덴셜 스터핑 (0) | 2024.04.21 |
---|---|
[Network Hacking] Phishing & Smishing & Pharming & Scam (0) | 2024.03.06 |
[문제경로]
https://webhacking.kr/challenge/js-2/
Challenge 15
webhacking.kr
[문제풀이]
1. 문제에 접속하면 다음과 같은 페이지가 나온다.
OK를 클릭하면 웹사이트의 홈으로 돌아간다.
2. Ctrl+U를 통해 소스 코드를 확인해 봤다.
<html>
<head>
<title>Challenge 15</title>
</head>
<body>
<script>
alert("Access_Denied");
# "Access_Denied"라는 경고창을 띄움
location.href='/';
# 웹사이트의 루트 경로로 이동한다. 즉 현재 페이지를 닫지 않는한 해당 페이지는 루트 경로로 이동
document.write("<a href=?getFlag>[Get Flag]</a>");
# 현재 페이지의 URL 뒤에 '?getFlag' 파라미터를 추가
</script>
</body>
현재 페이지의 URL 뒤에 "?getFlag"를 넣으면 Flag를 얻으면서 문제가 해결될 것이다.
3. 현재 페이지의 링크 뒤에 "?getFlag"를 넣었다.
엔터를 쳤더니 문제가 풀렸다.
[Webhacking.kr] old-06 (0) | 2024.04.10 |
---|---|
[Webhacking.kr] old-16 (0) | 2023.09.22 |
[Webhacking.kr] old-17 (0) | 2023.09.17 |
[Webhacking.kr] old-03 (0) | 2023.09.15 |
[Webhacking.kr] old-01 (0) | 2023.09.15 |
[문제경로]
https://webhacking.kr/challenge/js-4/
Challenge 17
webhacking.kr
[문제풀이]
1. 문제에 접속하면 입력하여 제출가능한 form이 하나 존재한다.
2. Ctrl+U를 통해 소스 코드를 확인해 봤다.
<html>
<head>
<title>Challenge 17</title>
</head>
<body bgcolor=black>
<font color=red size=10></font>
<p>
<form name=login>
# 입력 가능한 form 생성
<input type=passwd name=pw><input type=button onclick=sub() value="check">
# form 안에 비밀번호를 입력받는 "pw" 입력 필드와 클릭 가능한 check 버튼 생성
</form>
<script>
unlock=100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+1/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10-100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+9999999;
# 수식의 결과가 "unlock"에 저장
function sub(){ if(login.pw.value==unlock){ location.href="?"+unlock/10; } else{ alert("Wrong"); } }
# check 버튼 클릭 시에 실행되는 함수로 입력한 "pw"값이 "unlock"값과 일치하면 다른 URL로 이동하고 그렇지 않을 경우 Wrong이라는 경고창을 띄운다.
</script>
"unlock" 값이 "pw"값과 일치해야 문제가 풀릴 것이다. 따라서 "unlock"값을 구해볼 것이다.
3. 계산식을 복사해서 개발자 도구의 콘솔창에서 실행시켜 결과 값을 출력해 봤다.
출력된 결과인 "7809297.1"을 "pw" 입력창에 넣고 check 버튼을 클릭했더니 문제가 풀렸다.
[Webhacking.kr] old-06 (0) | 2024.04.10 |
---|---|
[Webhacking.kr] old-16 (0) | 2023.09.22 |
[Webhacking.kr] old-15 (0) | 2023.09.17 |
[Webhacking.kr] old-03 (0) | 2023.09.15 |
[Webhacking.kr] old-01 (0) | 2023.09.15 |
[문제경로]
https://webhacking.kr/challenge/web-03/
Challenge 3
webhacking.kr
[문제풀이]
1. 첫 페이지에 Nonogram 이 있어서 간단하게 해결했다.
2. 두 번째 페이지는 다음과 같이 입력하고 제출할 수 있는 환경으로 구성되어 있다.
이것만으로는 정보가 부족하여 Ctrl+U를 통해 소스 코드를 확인해 봤다.
<html>
<head>
<title>Challenge 3</title>
</head>
<body>
<center>Nonogram</center>
<p>
<hr>
<form name=kk method=get action=index.php>
</form>
<form method=post action=index.php>
<input type=hidden name=answer value=1010100000011100101011111>
# 사용자에게 표시되지 않는 숨겨진 입력 필드를 생성, 입력 필드의 이름을 answer로 설정, answer의 기본값을 "1010100000011100101011111"로 설정
Clear!<br>enter your name for log :
# 텍스트 표시
<input type=text name=id maxlength=10 size=10>
# 텍스트 입력 필드 생성, 입력 필드의 이름을 "id"로 설정, 입력 가능한 최대 문자 수를 10으로 제한, 입력 필드의 사이즈를 10으로 설정
<input type=submit value='submit'>
# 제출 버튼 생성, 버튼의 텍스트를 "submit"으로 설정
입력 필드가 가시적인 필드와 비가시적인 필드로 구분된 것을 알 수 있다.
3. 사용자에게 보이는 입력 필드 "id"에 SQL Injection을 시도해 봤다.
시도한 결과는 다음과 같다.
가시적인 입력 필드 "id"에 집어넣은 값이 그대로 출력되고, 비가시적인 입력 필드 "answer"의 기본 값도 그대로 넘어간 것을 확인할 수 있다.
4. 그러면 Burp Suite로 비가시적인 입력 필드 "answer"의 값에다 SQL Injection을 시도해 보겠다.
Forward 하자마자 문제가 해결되었다.
[Webhacking.kr] old-06 (0) | 2024.04.10 |
---|---|
[Webhacking.kr] old-16 (0) | 2023.09.22 |
[Webhacking.kr] old-15 (0) | 2023.09.17 |
[Webhacking.kr] old-17 (0) | 2023.09.17 |
[Webhacking.kr] old-01 (0) | 2023.09.15 |