jSQL 주입다목적 침투 테스트 도구입니다. 주요 기능은 SQL 주입 취약점을 찾아 악용하는 것입니다. 또한 다음을 수행할 수 있습니다.

  • 원격 호스트에서 데이터베이스 탐색
  • 관리자 페이지 검색,
  • 주입을 사용하여 원격 호스트에서 파일 읽기,
  • 원격 호스트에 대한 웹 셸 생성 및 터미널 열기
  • 원격 호스트에 대한 SQL 셸 생성 및 터미널 열기
  • 호스트에 파일 업로드
  • 무차별 대입 해시
  • 문자열 인코딩 또는 디코딩
  • SQL 주입을 위해 여러 URL 테스트

SQL 인젝션을 탐지하고 악용하기 위해 일반적으로 sqlmap 을 선호합니다. 명령줄 유틸리티이며 많은 작업을 수행할 수 있으며 가능한 모든 SQL 주입 방법을 사용하고 서버 보호를 우회하려고 하며 셸 등을 만들 수 있습니다. 또한 크로스 플랫폼이며 안정적이며 매우 효과적입니다. sqlmap은 매우 강력하고 유연하기 때문에 명령줄 프로그램의 경우 다양한 옵션을 의미합니다. 초보자에게는 이것이 너무 복잡해 보일 수 있습니다.

JSQL Injection은 뛰어난 그래픽 인터페이스를 가지고 있습니다. 이 프로그램은 Java로 작성되었으며 크로스 플랫폼이며 리소스가 많이 필요하지 않습니다. 그런데 실행 파일은 2.14MB에 불과합니다.

그러나 해킹 후보를 찾는 순서대로 시작하십시오. 해킹이 범죄라는 사실을 기억하는 것은 불필요한 일이 아닙니다. 따라서 법을 위반하는 행위를 하지 마십시오. (합법성의 관점에서) 이상적인 것은 특수한 환경에서 취약한 스크립트를 훈련하는 데 사용하는 것입니다. 다음 기사를 고려하십시오.

1. SQL 인젝션에 취약한 사이트 검색

취약한 웹 사이트를 찾는 방법 중 하나는 Google dorks를 사용하는 것입니다. 이 표는 blackmoreops.com 사이트에서 차용했습니다.

구글 독스 구글 독스 구글 독스
inurl:item_id= inurl:review.php?id= inurl:hosting_info.php?id=
inurl:newsid= inurl:iniziativa.php?in= inurl:gallery.php?id=
inurl:trainers.php?id= inurl:curriculum.php?id= inurl:rub.php?idr=
inurl:news-full.php?id= inurl:labels.php?id= inurl:view_faq.php?id=
inurl:news_display.php?getid= inurl:story.php?id= inurl:artikelinfo.php?id=
inurl:index2.php?옵션= inurl:look.php?ID= inurl:detail.php?ID=
inurl:readnews.php?id= inurl:newsone.php?id= inurl:index.php?=
inurl:top10.php?cat= inurl:aboutbook.php?id= inurl:profile_view.php?id=
inurl:newsone.php?id= inurl:material.php?id= inurl:category.php?id=
inurl:event.php?id= inurl:opinions.php?id= inurl:publications.php?id=
inurl:product-item.php?id= inurl:announce.php?id= inurl:fellows.php?id=
inurl:sql.php?id= inurl:rub.php?idr= inurl:downloads_info.php?id=
inurl:index.php?catid= inurl:galeri_info.php?l= inurl:prod_info.php?id=
inurl:news.php?catid= inurl:text.php?idt= inurl:shop.php?do=part&id=
inurl:index.php?id= inurl:newscat.php?id= inurl:productinfo.php?id=
inurl:news.php?id= inurl:newsticker_info.php?idn= inurl:collectionitem.php?id=
inurl:index.php?id= inurl:rubrika.php?idr= inurl:band_info.php?id=
inurl:trainers.php?id= inurl:rubp.php?idr= inurl:product.php?id=
inurl:buy.php?카테고리= inurl:offer.php?idf= inurl:releases.php?id=
inurl:article.php?ID= inurl:art.php?idm= inurl:ray.php?id=
inurl:play_old.php?id= inurl:title.php?id= inurl:product.php?id=
inurl:declaration_more.php?decl_id= inurl:news_view.php?id= inurl:pop.php?id=
inurl:pageid= inurl:select_biblio.php?id= inurl:shopping.php?id=
inurl:games.php?id= inurl:humor.php?id= inurl:productdetail.php?id=
inurl:page.php?파일= inurl:aboutbook.php?id= inurl:post.php?id=
inurl:newsDetail.php?id= inurl:ogl_inet.php?ogl_id= inurl:viewshowdetail.php?id=
inurl:gallery.php?id= inurl:fiche_spectacle.php?id= inurl:clubpage.php?id=
inurl:article.php?id= inurl:communique_detail.php?id= inurl:memberInfo.php?id=
inurl:show.php?id= inurl:sem.php3?id= inurl:section.php?id=
inurl:staff_id= inurl:category.php4?id= inurl:theme.php?id=
inurl:newsitem.php?num= inurl:news.php?id= inurl:page.php?id=
inurl:readnews.php?id= inurl:index.php?id= inurl:shredder-categories.php?id=
inurl:top10.php?cat= inurl:faq2.php?id= inurl:tradeCategory.php?id=
inurl:historialeer.php?num= inurl:show_an.php?id= inurl:product_ranges_view.php?ID=
inurl:reagir.php?num= inurl:preview.php?id= inurl:shop_category.php?id=
inurl:Stray-Questions-View.php?num= inurl:loadpsb.php?id= inurl:transcript.php?id=
inurl:forum_bds.php?num= inurl:opinions.php?id= inurl:channel_id=
inurl:game.php?id= inurl:spr.php?id= inurl:aboutbook.php?id=
inurl:view_product.php?id= inurl:pages.php?id= inurl:preview.php?id=
inurl:newsone.php?id= inurl:announce.php?id= inurl:loadpsb.php?id=
inurl:sw_comment.php?id= inurl:clanek.php4?id= inurl:pages.php?id=
inurl:news.php?id= inurl:participant.php?id=
inurl:avd_start.php?avd= inurl:download.php?id=
inurl:event.php?id= inurl:main.php?id=
inurl:product-item.php?id= inurl:review.php?id=
inurl:sql.php?id= inurl:chappies.php?id=
inurl:material.php?id= inurl:read.php?id=
inurl:clanek.php4?id= inurl:prod_detail.php?id=
inurl:announce.php?id= inurl:viewphoto.php?id=
inurl:chappies.php?id= inurl:article.php?id=
inurl:read.php?id= inurl:person.php?id=
inurl:viewapp.php?id= inurl:productinfo.php?id=
inurl:viewphoto.php?id= inurl:showimg.php?id=
inurl:rub.php?idr= inurl:view.php?id=
inurl:galeri_info.php?l= inurl:website.php?id=

검색 결과에서 사이트를 하나씩 열고 쿼리 문자열의 변수에 따옴표를 추가하십시오. 예를 들어 사이트 주소는 다음과 같습니다.

http://maral-mt.ru/maintextile.php?cat=1

http://maral-mt.ru/maintextile.php?cat=1"

SQL 오류 메시지가 표시되면 사이트가 SQL 주입에 취약할 수 있습니다.

SQL 구문에 오류가 있습니다. 1행의 """ 근처에서 사용할 올바른 구문에 대해서는 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.

또한 따옴표 문자에 대한 응답으로 취약한 사이트는 종종 아무 것도 표시하지 않거나 사이트의 동작으로 인해 데이터 필터링이 충분하지 않다고 가정할 수 있습니다.

인기 있는 CMS에서 SQL 주입을 찾는 것은 확실히 가치가 없습니다. 그곳에서 발견되더라도 거의 항상 악용하기가 어렵습니다. 이 가이드를 읽으면 (아직) 당신의 수준이 아닙니다. 인기 있는 CMS는 취약한 플러그인(특히 자체 작성된 플러그인)으로 인해 취약해질 수 있습니다. 그러나 이것은 아직 우리의 수준이 아닙니다.

2. jSQL 인젝션 설치

jSQL Injection은 이미 Kali Linux에 사전 설치되어 있습니다. 그러나 게시될 수 있는 버전은 이미 사용 가능합니다.

최신 릴리스 번호를 확인하려면 릴리스 페이지를 방문하십시오. https://github.com/ron190/jsql-injection/releases

콘솔에서 사전 설치된 jSQL 주입 유형을 시작하려면:

필요한 경우 최신 릴리스를 다운로드할 수 있습니다.

Wget https://github.com/`curl -s https://github.com/ron190/jsql-injection/releases | grep -E -o "/ron190/jsql-injection/releases/download/v(1,2).(1,2)/jsql-injection-v(1,2).(1,2).jar" | 머리 -n 1`

파일이 다운로드되면 다음과 같이 도구를 시작합니다.

자바 -jar ./jsql-injection-v*.jar

프로그램의 기본 창은 다음과 같습니다.

그건 그렇고, 이것은 Windows에서 잘 작동하는 침투 테스트 프로그램 중 하나입니다.

Windows에서 실행하려면 공식 웹 사이트에서 최신 버전을 다운로드하십시오. https://github.com/ron190/jsql-injection/releases

다운로드한 파일을 더블 클릭하여 실행합니다(Java 가상 머신이 있어야 함).

3. jSQL로 SQL 인젝션을 위한 웹사이트 스캔

프로그램 작업은 매우 간단합니다. 사이트 주소만 입력하면 그리고 누르다입력하다.

다음 스크린샷은 사이트가 한 번에 세 가지 유형의 SQL 주입에 취약함을 보여줍니다.

사용 가능한 데이터베이스의 이름이 이미 있습니다.

데이터베이스를 클릭하여 해당 테이블을 탐색합니다. 각 테이블의 내용을 볼 수 있습니다. 테이블을 클릭하십시오. 열 목록이 나타날 때까지 기다립니다.

관심 열 선택:

마우스 오른쪽 버튼으로 테이블 이름을 클릭하고 ' ’:

표의 내용이 나타납니다.

일반적으로 이름이 지정된 테이블 관리자, 사용자자격 증명을 포함할 수 있기 때문에 가장 흥미롭습니다.

운이 좋아서 관리자 자격 증명을 찾았지만 여전히 충분하지 않습니다.이 자격 증명을 입력할 관리자 페이지를 찾아야 합니다.

4. jSQL Injection으로 관리자 페이지 검색하기

이렇게하려면 다음 탭으로 이동하십시오. 여기서 우리는 가능한 주소 목록을 만난다. 확인할 페이지를 하나 이상 선택할 수 있습니다.

다른 프로그램을 사용할 필요가 없어 편리합니다.

불행히도, 명확한 테스트에서 암호를 저장하는 태만한 프로그래머는 그리 많지 않습니다. 꽤 자주 비밀번호 라인에서 우리는 다음과 같은 것을 봅니다.

이것은 해시입니다. 무차별 대입으로 해독할 수 있습니다. 그리고 ... jSQL 주입에는 무차별 대입 기능이 내장되어 있습니다.

5. jSQL 주입을 사용한 무차별 대입 해시

의심의 여지가 없는 편리함은 다른 프로그램을 찾을 필요가 없다는 것입니다. 가장 인기 있는 해시가 많이 지원됩니다.

이것은 최선의 해결책이 아닙니다. 최대 속도에서 무차별 대입 공격을 하려면 Hashcat 을 사용하십시오.

하지만 물론 다른 프로그램이 없거나 Hashcat을 배울 시간이 없을 때는 brute force 기능이 내장된 jSQL Injection이 매우 유용할 것입니다.

설정이 있습니다. 암호에 어떤 문자가 있는지, 암호의 길이 범위를 지정할 수 있습니다.

6. SQL 인젝션 감지 후 파일 작업

데이터베이스 작업 - 읽기 및 수정 외에도 SQL 주입을 감지하는 경우 다음 파일 작업이 가능합니다.

  • 서버에서 파일 읽기

그리고 이 모든 것이 jSQL Injection으로 구현됩니다!

제한 사항이 있습니다. SQL 서버에는 충분한 권한이 있어야 합니다. 좋은 시스템 관리자는 이 옵션을 비활성화하고 파일 시스템에 액세스할 수 없습니다.

파일 권한의 존재 여부는 쉽게 확인할 수 있습니다. 탭 중 하나로 이동(파일 읽기, 셸 생성, 새 파일 업로드)하고 지정된 작업 중 하나를 시도합니다.

여전히 매우 중요한 설명입니다. 작업할 파일의 정확한 절대 경로를 알아야 합니다. 그렇지 않으면 작동하지 않습니다.

다음 스크린샷을 보십시오.

파일 작업에 대한 응답은 다음과 같습니다. 파일 권한 없음, 그리고 그것에 대해 아무 것도 할 수 없습니다.

대신 다른 오류가 있는 경우:

에 쓰기 문제

이는 파일을 기록해야 하는 절대 경로를 잘못 지정했음을 의미합니다.

절대 경로를 가정하려면 최소한 서버가 실행되는 운영 체제를 알아야 합니다. 이렇게 하려면 네트워크 탭으로 전환하십시오.

그런 기록 Win64 string)은 우리가 Windows OS를 다루고 있다고 가정할 이유를 제공합니다.

Keep-Alive: timeout=5, max=99 서버: Apache/2.4.17(Win64) PHP/7.0.0RC6 연결: Keep-Alive 방법: HTTP/1.1 200 OK 콘텐츠 길이: 353 날짜: Fri, 11 Dec 2015 11:48:31 GMT X-Powered-By: PHP/7.0.0RC6 콘텐츠 유형: text/html; 문자 집합=UTF-8

다음은 일종의 유닉스(*BSD, Linux)입니다.

Transfer-Encoding: chunked 날짜: Fri, 11 Dec 2015 11:57:02 GMT 방법: HTTP/1.1 200 OK Keep-Alive: timeout=3, max=100 연결: keep-alive Content-Type: text/html X- 제공: PHP/5.3.29 서버: Apache/2.2.31(Unix)

그리고 여기에 CentOS가 있습니다.

방법: HTTP/1.1 200 OK 만료: 1981년 11월 19일 목 08:52:00 GMT 세트 쿠키: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ 연결: 연결 유지 X-Cache-Lookup: MISS from t1.hoster.ru:6666 서버: Apache/2.2.15(CentOS) X-Powered-By: PHP/5.4.37 X-Cache: MISS from t1.hoster.ru 캐시 제어: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache 날짜: Fri, 11 Dec 2015 12:08:54 GMT Transfer-Encoding: 청크 콘텐츠 유형: text/html; 문자 집합=WINDOWS-1251

Windows에서 사이트의 일반적인 폴더는 C:\서버\데이터\htdocs\. 그러나 실제로 누군가가 Windows에서 서버를 만들 생각을 했다면 이 사람은 파일 권한에 대해 들어본 적이 없을 것입니다. 따라서 시도는 다음에서 직접 시작됩니다. C:/윈도우/폴더:

보시다시피 처음부터 모든 것이 잘되었습니다.

그러나 여기서 나 자신은 jSQL 주입 셸 자체에 대해 의구심을 가지고 있습니다. 파일 권한이 있으면 웹 인터페이스를 통해 무엇이든 다운로드할 수 있습니다.

7. SQL 인젝션 시 사이트 일괄 체크

그리고 이 기능도 jSQL Injection에 있습니다. 모든 것이 매우 간단합니다. 사이트 목록을 삽입하고(파일에서 가져올 수 있음) 확인하려는 사이트를 선택한 다음 버튼을 클릭하여 작업을 시작합니다.

jSQL 주입에 대한 결론

jSQL 인젝션은 SQL 인젝션 웹 사이트에 취약한 검색 및 사후 악용을 위한 훌륭하고 강력한 도구입니다. 의심할 여지 없는 장점: 사용 용이성, 내장형 관련 기능. jSQL Injection은 웹사이트를 분석할 때 초보자의 가장 친한 친구가 될 수 있습니다.

그래픽 인터페이스가 있는 모든 도구와 마찬가지로 스크립트에서 자동화할 수 없습니다. 그럼에도 불구하고 대량 웹 사이트 스캔의 내장 기능 덕분에 이 프로그램에서도 일부 자동화가 가능합니다.

jSQL Injection 프로그램은 sqlmap보다 사용하기가 훨씬 쉽습니다. 그러나 sqlmap은 더 많은 유형의 SQL 주입을 지원하고 파일 기반 방화벽 및 기타 기능을 사용할 수 있는 옵션이 있습니다.

결과: jSQL Injection은 초보자 해커의 가장 친한 친구입니다.

SSY의 약자 싯다 사마디 요가(종종 '침묵 요가의 과학'으로 확장됨) 싯다'증명되거나 성취된 어떤 것(즉, 지식)'을 의미하며, 사마디'지성이 평등한 상태'를 의미하며, 요가'자신의 상위 자아와의 결합'을 의미합니다.

SSY는 삶의 기본 지식입니다. 우리의 고대 리쉬들은 브라모파데삼(Brahmopadesam)이라고 하는 독특한 훈련 방식을 공식화했는데, 이는 하지 않고 내부와 외부에서 고요함을 경험하는 과학에 대한 지침입니다. 그것은 삶에 대한 관점에 큰 변화를 가져오고 개인에게 놀라운 성숙을 가져옵니다. SSY는 Brahmopadesam의 고대 과학의 현재 버전에 불과합니다.

SSY는 교육 프로그램으로 제공됩니다.라이프 예센스 아카데미(LiYA), 그리고 기관의 주력 프로그램입니다. 주력 프로그램이기 때문에 조직의 이름과 동의어가 되었습니다. 이 위대한 지식의 훈련은 여러 곳에서 가르칩니다. 세계 LiYA의 선생님들에 의해. LiYA의 인도 챕터는리시 삼스크루티 비디아 켄드라(RSVK)).

"나는 몸이다"는 각성을 죽이는 첫 번째 개념입니다. SSY는 프로세스입니다.
사마디(Samadhi)에 들어가는 것, 완전한 분리의 상태.
"
-구루지

웹 리소스에 대한 모든 취약점 검색은 정찰 및 정보 수집으로 시작됩니다.
인텔리전스는 사이트의 파일 및 디렉토리에 대한 무차별 공격, 취약점 스캐너 실행, 사이트 수동 보기 또는 수동적 - 다른 검색 엔진에서 정보 검색 중 하나일 수 있습니다. 때로는 사이트의 첫 페이지가 열리기 전에도 취약점이 알려지는 경우가 있습니다.

이것이 어떻게 가능한지?
유용한 정보와 더불어 광활한 인터넷을 논스톱으로 로밍하는 검색 로봇 일반 사용자, 종종 웹 리소스를 공격할 때 공격자가 사용할 수 있는 것을 수정합니다. 예를 들어, 스크립트 오류 및 민감한 정보가 포함된 파일(구성 파일 및 로그에서 인증 데이터 및 데이터베이스 백업이 있는 파일에 이르기까지)이 있습니다.
검색 로봇의 관점에서 SQL 쿼리 실행 오류 메시지는 예를 들어 페이지의 상품 설명과 분리할 수 없는 일반 텍스트입니다. 갑자기 검색 로봇이 .sql 확장자를 가진 파일을 우연히 발견하고 어떤 이유로 사이트의 작업 폴더에 있게 되면 해당 파일은 사이트 콘텐츠의 일부로 인식되고 인덱싱됩니다(아마도, 그 안에 지정된 암호).

이러한 정보는 안정적이고 종종 고유하며, 키워드, 취약성을 포함하지 않는 페이지에서 "취약한 페이지"를 분리하는 데 도움이 됩니다.
키워드를 사용하는 특수 쿼리의 거대한 데이터베이스(소위 dorks)는 exploit-db.com에 존재하며 Google Hack Database로 알려져 있습니다.

왜 구글인가?
Dorks는 다음 두 가지 이유로 주로 Google을 대상으로 합니다.
- 키워드(표 1 참조) 및 특수 문자(표 2 참조)에 대한 가장 유연한 구문
- Google 색인은 여전히 ​​다른 검색 엔진보다 완전합니다.

표 1 - 주요 Google 키워드

예어
의미
예시
대지
지정된 사이트에서만 검색합니다. url만 고려
site:somesite.ru - 주어진 도메인 및 하위 도메인의 모든 페이지를 찾습니다.
inurl
uri에 있는 단어로 검색합니다. 클과 달리 "site"라는 단어, 사이트 이름 다음에 일치하는 항목 검색
inurl:news - 주어진 단어가 URI에서 나타나는 모든 페이지를 찾습니다.
텍스트
페이지 본문에서 검색
intext:"traffic" - 일반적인 쿼리 "traffic"과 완전히 유사합니다.
제목
페이지 제목에서 검색합니다. 태그 사이의 텍스트 <br></td> <td width="214">intitle:"index of" - 디렉토리 목록이 있는 모든 페이지를 찾습니다. <br></td> </tr><tr><td width="214">내선 <br></td> <td width="214">지정된 확장자를 가진 페이지 검색 <br></td> <td width="214">ext:pdf - 모든 pdf 파일을 찾습니다. <br></td> </tr><tr><td width="214">파일 형식 <br></td> <td width="214">현재는 클래스와 완전히 유사합니다. "내선"이라는 단어 <br></td> <td width="214">파일 형식:pdf - 유사 <br></td> </tr><tr><td width="214">관련된 <br></td> <td width="214">비슷한 주제의 사이트 검색 <br></td> <td width="214">related:google.ru - 유사품을 표시합니다. <br></td> </tr><tr><td width="214">링크 <br></td> <td width="214">이 링크로 연결되는 사이트 검색 <br></td> <td width="214">link:somesite.ru - 이에 대한 링크가 있는 모든 사이트를 찾습니다. <br></td> </tr><tr><td width="214">정의하다 <br></td> <td width="214">단어 정의 표시 <br></td> <td width="214">define:0day - 용어의 정의 <br></td> </tr><tr><td width="214">은닉처 <br></td> <td width="214">캐시된 페이지 콘텐츠 표시(사용 가능한 경우) <br></td> <td width="214">cache:google.com - 캐시에서 페이지 열기 <br></td> </tr></tbody></table><p>표 2 - <a href="https://bar812.ru/ko/volnistaya-bukva-na-klaviature-kak-vvodit-specialnye-simvoly-otsutstvuyushchie.html">특수 기호</a>구글 쿼리 <br></p><table><tbody><tr><td width="214"><b>상징</b><br></td> <td width="214"><b>의미</b><br></td> <td width="214"><b>예시</b><br></td> </tr><tr><td width="214">“<br></td> <td width="214">정확한 구문 <br></td> <td width="214">intitle:"RouterOS 라우터 구성 페이지" - 라우터 검색 <br></td> </tr><tr><td width="214">*<br></td> <td width="214">모든 텍스트 <br></td> <td width="214">inurl:"bitrix*mcart" - 취약한 mcart 모듈이 있는 bitrix에서 사이트 검색 <br></td> </tr><tr><td width="214">.<br></td> <td width="214">모든 문자 <br></td> <td width="214">Index.of - 쿼리의 인덱스와 유사 <br></td> </tr><tr><td width="214">-<br></td> <td width="214">단어 삭제 <br></td> <td width="214">error -warning - 오류가 있는 모든 페이지를 표시하지만 경고는 표시하지 않습니다. <br></td> </tr><tr><td width="214">..<br></td> <td width="214">범위 <br></td> <td width="214">cve 2006..2016 - 2006년부터 연도별 취약점 표시 <br></td> </tr><tr><td width="214">|<br></td> <td width="214">논리적 "또는" <br></td> <td width="214">리눅스 | windows - 첫 번째 또는 두 번째 단어가 나오는 페이지 표시 <br></td> </tr></tbody></table><br>에 대한 모든 요청이 있음을 이해해야 합니다. <a href="https://bar812.ru/ko/poiskovye-sistemy-rossii-i-lidiruyushchie-poiskoviki-interneta-kakaya.html">검색 엔진</a>이것은 단어로만 검색하는 것입니다. <br>페이지에서 메타 문자(따옴표, 대괄호, 구두점 등)를 찾는 것은 쓸모가 없습니다. 따옴표로 묶인 정확한 구를 검색하는 것조차 단어 검색이며 결과에 이미 정확히 일치하는 항목이 있습니다. <p>모두 <a href="https://bar812.ru/ko/trans-intitle-vse-publikacii-polzovatelya-guglohaking-poisk-kriticheskoi-informacii-s-pomoshchyu-googl.html">구글 독스</a> Hack Database는 논리적으로 14개의 범주로 구분되며 Table 3과 같다. <br>표 3 - Google 해킹 데이터베이스 카테고리 <br></p><table><tbody><tr><td width="168"><b>범주</b><br></td> <td width="190"><b>찾을 수 있게 하는 것</b><br></td> <td width="284"><b>예시</b><br></td> </tr><tr><td width="168">발판 <br></td> <td width="190">웹 셸, 공용 파일 관리자 <br></td> <td width="284">나열된 웹쉘을 포함하는 모든 해킹된 사이트 찾기: <br>(intitle:"phpshell" OR intitle:"c99shell" OR intitle:"r57shell" OR intitle:"PHP Shell" OR intitle:"phpRemoteView") `rwx` "uname" <br></td> </tr><tr><td width="168">사용자 이름이 포함된 파일 <br></td> <td width="190">레지스트리 파일, 구성 파일, 로그, 입력된 명령의 기록이 포함된 파일 <br></td> <td width="284">계정 정보가 포함된 모든 레지스트리 파일 찾기: <br><i>파일 형식:reg reg +intext:"인터넷 계정 관리자"</i><br></td> </tr><tr><td width="168">민감한 디렉토리 <br></td> <td width="190">다양한 정보가 포함된 디렉터리(개인 문서, VPN 구성, 숨겨진 저장소 등) <br></td> <td width="284">VPN과 관련된 파일이 포함된 모든 디렉토리 목록 찾기: <br><i>"구성" 제목:"인덱스" intext:vpn</i><br>git 저장소가 포함된 사이트: <br><i>(intext:"/.git의 인덱스") ("상위 디렉토리")</i><br></td> </tr><tr><td width="168">웹 서버 감지 <br></td> <td width="190">웹 서버에 대한 버전 및 기타 정보 <br></td> <td width="284">JBoss 서버의 관리 콘솔을 찾습니다. <br><i>inurl:"/web-console/" intitle:"관리 콘솔"</i><br></td> </tr><tr><td width="168">취약한 파일 <br></td> <td width="190">알려진 취약점이 포함된 스크립트 <br></td> <td width="284">서버에서 임의의 파일을 업로드할 수 있는 스크립트를 사용하는 사이트 찾기: <br><i>allinurl:forcedownload.php?파일=</i><br></td> </tr><tr><td width="168">취약한 서버 <br></td> <td width="190">설치 스크립트, 웹 셸, 관리 콘솔 열기 등 <br></td> <td width="284">루트로 실행되는 열려 있는 PHPMyAdmin 콘솔을 찾습니다. <br><i>intitle:phpMyAdmin "phpMyAdmin에 오신 것을 환영합니다 ***" "*에서 root@*로 실행 중"</i><br></td> </tr><tr><td width="168">오류 메시지 <br></td> <td width="190">다양한 오류 및 경고가 자주 표시됨 <a href="https://bar812.ru/ko/programma-dlya-vosstanovleniya-formatirovannyh-dannyh-chto-delat-esli.html">중요한 정보</a>- CMS 버전에서 비밀번호로 <br></td> <td width="284">데이터베이스에 대한 sql 쿼리 실행 시 오류가 있는 사이트: <br><i>"경고: mysql_query()" "잘못된 쿼리"</i><br></td> </tr><tr><td width="168">유용한 정보가 포함된 파일 <br></td> <td width="190">인증서, 백업, 이메일, 로그, SQL 스크립트 등 <br></td> <td width="284">초기화 SQL 스크립트 찾기: <br><i>파일 형식:sql 및 " <a href="https://bar812.ru/ko/sql-zaprosy-insert-sql-zapros-insert-into-napolnit-bazu-dannyh-informaciei.html">에 집어 넣다</a>-사이트:github.com</i><br></td> </tr><tr><td width="168">비밀번호가 포함된 파일 <br></td> <td width="190">암호를 포함할 수 있는 모든 것 - 로그, SQL 스크립트 등 <br></td> <td width="284">비밀번호를 언급하는 로그: <br><i>파일 형식:</i><i>통나무</i><i>텍스트:</i><i>비밀번호 |</i><i>패스 |</i><i>pw</i><br>암호가 포함된 sql 스크립트: <br><i>내선:</i><i>SQL</i><i>텍스트:</i><i>사용자 이름</i><i>텍스트:</i><i>비밀번호</i><br></td> </tr><tr><td width="168">민감한 온라인 쇼핑 정보 <br></td> <td width="190">온라인 쇼핑 관련 정보 <br></td> <td width="284">비밀번호 찾기: <br><i>dcid=</i><i>십억=</i><i>핀</i><i>코드=</i><br></td> </tr><tr><td width="168">네트워크 또는 취약점 데이터 <br></td> <td width="190">웹 리소스와 직접적인 관련이 없지만 네트워크 또는 기타 웹이 아닌 서비스에 영향을 미치는 정보 <br></td> <td width="284">스크립트 찾기 <a href="https://bar812.ru/ko/avtomaticheskaya-nastroika-pk-setevye-nastroiki-otklyuchenie-parkovki.html">오토 튜닝</a>내부 네트워크에 대한 정보를 포함하는 프록시: <br><i>inurl:프록시 | inurl:wpad 내선:pac | ext:dat findproxyforurl</i><br></td> </tr><tr><td width="168">포털이 포함된 페이지 <br></td> <td width="190">로그인 양식이 포함된 페이지 <br></td> <td width="284">사플로곤 웹페이지: <br><i>텍스트:"2016 SAP AG. 판권 소유." 제목: "로그인"</i><br></td> </tr><tr><td width="168">다양한 온라인 기기 <br></td> <td width="190">프린터, 라우터, 모니터링 시스템 등 <br></td> <td width="284">프린터 구성 패널 찾기: <br><i>제목:"</i><i>HP</i><i>레이저젯"</i><i>inurl:</i><i>SSI/</i><i>인증/</i><i>세트_</i><i>구성_</i><i>기기 정보.</i><i>htm</i><br></td> </tr><tr><td width="168">권고 및 취약점 <br></td> <td width="190">취약한 버전의 CMS에 있는 사이트 <br></td> <td width="284">서버에 임의의 파일을 업로드할 수 있는 취약한 플러그인 찾기: <br><i>inurl:fckeditor -intext:"ConfigIsEnabled = False" intext:ConfigIsEnabled</i><br></td> </tr></tbody></table><br>Dorks는 더 자주 인터넷의 모든 사이트를 검색하는 데 중점을 둡니다. 그러나 어떤 사이트나 사이트에서 검색 영역을 제한하는 것을 막는 것은 없습니다. <br>Google에 대한 각 요청은 요청에 "site:somesite.com"이라는 키워드를 추가하여 특정 사이트에 집중할 수 있습니다. 이 키워드는 모든 dork에 추가할 수 있습니다. <p><b>취약점 검색 자동화</b><br>따라서 검색 엔진(google)을 사용하고 Google Hack Database를 기반으로 취약점 검색을 자동화하는 간단한 유틸리티를 작성하기 위한 아이디어가 탄생했습니다.</p><p>유틸리티는 phantomjs를 사용하여 nodejs로 작성된 스크립트입니다. 정확히 말하면 스크립트는 phantomjs 자체에 의해 해석됩니다. <br>Phantomjs는 없는 완전한 웹 브라우저입니다. <a href="https://bar812.ru/ko/v-prilozhenii-graficheskii-interfeis-sistemy-proizoshla-oshibka.html">GUI</a>, js 코드를 사용하여 관리하고 편리한 API를 가지고 있습니다. <br>유틸리티는 꽤 이해할 수있는 이름 인 dorks를 받았습니다. 에서 시작 <a href="https://bar812.ru/ko/kak-zapustit-exe-fail-s-parametrami-kak-zapustit-programmu-s.html">명령줄</a>(옵션 없음) 몇 가지 사용 예에 ​​대한 간단한 도움을 받습니다. <br><br><img src='https://i1.wp.com/habrastorage.org/getpro/habr/post_images/edd/6fb/ccc/edd6fbccc5ec340abe750f3073c1b427.jpg' width="100%" loading=lazy loading=lazy><br>그림 1 - 기본 dorks 옵션 목록</p><p>유틸리티의 일반적인 구문은 dork "command" "옵션 목록"입니다. <br>모든 옵션에 대한 자세한 설명은 표 4에 나와 있습니다.</p><p>표 4 - 구문 dorks <br></p><table border="1"><tbody><tr><td width="214"><b>팀</b><br></td> <td width="214"><b>옵션</b><br></td> <td width="214"><b>설명</b><br></td> </tr><tr><td rowspan="4" width="214">ghdb <br></td> <td width="214">-엘 <br></td> <td width="214">dork 카테고리의 번호가 매겨진 목록 표시 Google Hack Database <br></td> </tr><tr><td width="214">-c "카테고리 번호 또는 이름" <br></td> <td width="214">번호 또는 이름으로 지정된 범주의 dorks 다운로드 <br></td> </tr><tr><td width="214">-q "구" <br></td> <td width="214">요청 시 발견된 dorks 다운로드 <br></td> </tr><tr><td width="214">-o "파일" <br></td> <td width="214">파일에 결과 저장(-c|-q 옵션만 사용) <br></td> </tr><tr><td rowspan="8" width="214">Google <br></td> <td width="214">-d "도크" <br></td> <td width="214">임의의 dork 지정(옵션은 여러 번 사용할 수 있으며 -D 옵션과의 조합이 허용됨) <br></td> </tr><tr><td width="214">-D "파일" <br></td> <td width="214">파일에서 dorks 사용 <br></td> </tr><tr><td width="214">-s "사이트" <br></td> <td width="214">사이트 설정(옵션은 여러 번 사용 가능, -S 옵션과의 조합 허용) <br></td> </tr><tr><td width="214">-S "파일" <br></td> <td width="214">파일에서 사이트 사용(dorks는 각 사이트에 대해 독립적으로 검색됩니다) <br></td> </tr><tr><td width="214">-f "필터" <br></td> <td width="214">추가 키워드 설정(각 dork에 추가됨) <br></td> </tr><tr><td width="214">-t "밀리초 수" <br></td> <td width="214">Google에 요청하는 간격 <br></td> </tr><tr><td width="214">-T "밀리초 수" <br></td> <td width="214">보안 문자가 발생한 경우 시간 초과 <br></td> </tr><tr><td width="214">-o "파일" <br></td> <td width="214">결과를 파일에 저장합니다(뭔가가 발견된 dork만 저장됨) <br></td> </tr></tbody></table><br>ghdb 명령을 사용하여 임의의 요청에 대해 exploit-db에서 모든 dork를 가져오거나 전체 범주를 지정할 수 있습니다. 범주 0을 지정하면 전체 데이터베이스가 언로드됩니다(약 4.5천 dorks). <p>사용 가능한 카테고리 목록 <a href="https://bar812.ru/ko/podrobnyi-obzor-i-testirovanie-apple-iphone-se-apple-iphone-se-2017-dizain.html">이 순간</a>그림 2에 나와 있습니다. <br><br><img src='https://i0.wp.com/habrastorage.org/getpro/habr/post_images/b8f/b11/ffe/b8fb11ffeaced5066fd2fd9e43be67fb.jpg' width="100%" loading=lazy loading=lazy></p><p>그림 2 - GHDB dorks의 사용 가능한 범주 목록</p><p>Google 팀은 각 dork를 Google 검색 엔진으로 대체하고 일치하는 결과를 분석합니다. 무언가가 발견된 Dorks는 파일에 저장됩니다. <br>유틸리티 지원 <a href="https://bar812.ru/ko/vhod-v-rekaveri-android-kak-pereiti-v-rezhim-recovery-na-raznyh-android-ustroistvah.html">다른 모드</a>검색: <br>1 dork 및 1 사이트; <br>1 dork 및 많은 사이트; <br>1 사이트 및 많은 dorks; <br>많은 사이트와 많은 dorks; <br>dorks 및 사이트 목록은 인수와 파일을 통해 지정할 수 있습니다.</p><p><b>작업 시연</b><br>오류 메시지 검색의 예를 사용하여 취약점을 찾아 보겠습니다. dorks ghdb –c 7 –o errors.dorks 명령은 그림 3과 같이 "오류 메시지" 범주의 알려진 모든 dorks를 로드합니다. <br><br><img src='https://i0.wp.com/habrastorage.org/getpro/habr/post_images/28c/386/641/28c386641d1528652f7f8e8b8089097a.jpg' width="100%" loading=lazy loading=lazy><br>그림 3 - "오류 메시지" 범주의 알려진 모든 dork 로드</p><p>Dorks가 로드되어 파일에 저장되었습니다. 이제 일부 사이트에 "설정"해야 합니다(그림 4 참조). <br><br><img src='https://i2.wp.com/habrastorage.org/getpro/habr/post_images/8e0/a8a/3af/8e0a8a3af4f26544da1faa584813dbff.jpg' width="100%" loading=lazy loading=lazy><br>그림 4 - Google 캐시에서 관심 사이트의 취약점 검색</p><p>얼마 후, 연구 중인 사이트에서 오류가 포함된 여러 페이지가 발견됩니다(그림 5 참조).</p><p><img src='https://i0.wp.com/habrastorage.org/getpro/habr/post_images/10b/e83/ba3/10be83ba38f172213ba06b3f9ad05a58.jpg' width="100%" loading=lazy loading=lazy><br>그림 5 - 발견된 오류 메시지</p><p>결과는 result.txt 파일에서 얻을 수 있습니다. <a href="https://bar812.ru/ko/polnyi-spisok-ussd-zaprosov-dlya-abonentov-a1-velcom-poryadok-predostavleniya.html">전체 목록</a>오류로 이어지는 dorks. <br>그림 6은 사이트 오류를 ​​검색한 결과를 보여줍니다. <br><br>그림 6 - 오류 검색 결과</p><p>이 dork의 캐시에는 스크립트의 절대 경로, 사이트의 콘텐츠 관리 시스템 및 데이터베이스 유형이 표시되는 전체 역추적이 표시됩니다(그림 7 참조). <br><br><img src='https://i0.wp.com/habrastorage.org/getpro/habr/post_images/0a9/455/588/0a9455588496d6609f5e13d598cb5a48.jpg' width="100%" loading=lazy loading=lazy><br>그림 7 - 사이트 구조에 대한 정보 공개</p><p>그러나 GHDB의 모든 dorks가 진정한 결과를 제공하는 것은 아니라는 점을 염두에 두어야 합니다. 또한 Google은 정확히 일치하는 항목을 찾지 못하고 유사한 결과를 표시할 수 있습니다.</p><p>이 경우 개인의 dorks 목록을 사용하는 것이 더 현명합니다. 예를 들어, "비정상적인" 확장자를 가진 파일을 찾는 것은 항상 가치가 있으며, 그 예는 그림 8에 나와 있습니다. <br><br><img src='https://i1.wp.com/habrastorage.org/getpro/habr/post_images/d7f/865/693/d7f865693f7fcf13137598eeed0ecb58.jpg' width="100%" loading=lazy loading=lazy><br>그림 8 - 일반 웹 리소스에 일반적이지 않은 파일 확장자 목록</p><p>결과적으로 dorks google -D extensions.txt -f bank 명령에서 Google은 첫 번째 요청부터 "비정상적인" 파일 확장자를 가진 사이트를 반환하기 시작합니다(그림 9 참조). <br><br><img src='https://i2.wp.com/habrastorage.org/getpro/habr/post_images/107/e1f/a2f/107e1fa2f41c4169bcc254cba2f2f4b6.jpg' width="100%" loading=lazy loading=lazy><br>그림 9 - 은행 사이트에서 "잘못된" 파일 형식 검색</p><p>Google은 32단어를 초과하는 요청을 수락하지 않습니다.</p><p>dorks 사용 google –d intext:”error|warning|notice|syntax” –f 대학 <br>교육 사이트에서 PHP 인터프리터 오류를 찾을 수 있습니다(그림 10 참조). <br><br><img src='https://i0.wp.com/habrastorage.org/getpro/habr/post_images/717/74f/e36/71774fe3656bfc058c42d43262fdec4a.jpg' width="100%" loading=lazy loading=lazy><br>그림 10 - PHP 런타임 오류 찾기</p><p>때로는 한두 가지 범주의 도크를 사용하는 것이 편리하지 않습니다. <br>예를 들어, 사이트가 wordpress 엔진에서 실행되고 있다는 것을 알고 있다면 wordpress 전용 dorks가 필요합니다. 이 경우 Google Hack Database 검색을 사용하는 것이 편리합니다. dorks ghdb –q wordpress –o wordpress_dorks.txt는 그림 11과 같이 모든 wordpress dorks를 다운로드합니다. <br><br><img src='https://i0.wp.com/habrastorage.org/getpro/habr/post_images/dcb/ac9/a4e/dcbac9a4eb12f6ec775d9cccc2fdee87.jpg' width="100%" loading=lazy loading=lazy><br>그림 11 - Wordpress와 관련된 dorks 검색</p><p>다시 은행으로 돌아가서 dorks google -D wordpress_dords.txt -f bank 명령을 사용하여 wordpress와 관련된 흥미로운 것을 찾으려고 노력하겠습니다(그림 12 참조). <br><br><img src='https://i1.wp.com/habrastorage.org/getpro/habr/post_images/042/0c2/c43/0420c2c435931704288b171f725ccc6a.jpg' width="100%" loading=lazy loading=lazy><br>그림 12 - Wordpress 취약점 검색</p><p>Google Hack Database 검색은 4자 미만의 단어를 허용하지 않습니다. 예를 들어 사이트의 CMS는 알려지지 않았지만 언어는 알려진 경우 - PHP. 이 경우 파이프와 dorks 시스템 검색 유틸리티를 사용하여 수동으로 필요한 것을 필터링할 수 있습니다. -c all | findstr /I php > php_dorks.txt(그림 13 참조): <br><br><img src='https://i1.wp.com/habrastorage.org/getpro/habr/post_images/4c1/2f8/6e1/4c12f86e111074293c14d6a939c6ebab.jpg' width="100%" loading=lazy loading=lazy><br>그림 13 - PHP에 대한 언급이 있는 모든 dork 검색</p><p>검색 엔진에서 취약점이나 일부 민감한 정보를 검색하는 것은 이 사이트에 중요한 색인이 있는 경우에만 검색해야 합니다. 예를 들어 사이트에 10-15페이지의 색인이 생성된 경우 이러한 방식으로 검색하는 것은 어리석은 일입니다. 인덱스 크기를 확인하는 것은 쉽습니다. 문자열에 입력하기만 하면 됩니다. <a href="https://bar812.ru/ko/vse-sekrety-poiska-v-google-naid-tsya-deistvitelno-vs-google-hranit-gigabaity.html">구글 검색</a>사이트:somesite.com. 인덱스가 충분하지 않은 사이트의 예는 그림 14에 나와 있습니다. <br><br><img src='https://i2.wp.com/habrastorage.org/getpro/habr/post_images/78e/1db/b4f/78e1dbb4fc78cd422cec311fc2ca9d33.jpg' width="100%" loading=lazy loading=lazy><br>그림 14 - 사이트 인덱스 크기 확인</p><p>이제 불쾌한 것에 대해 ... 때때로 Google은 보안 문자를 요청할 수 있습니다. 수행 할 작업이 없습니다. 입력해야합니다. 예를 들어 "오류 메시지" 범주(90 dorks)를 통해 정렬할 때 보안 문자는 한 번만 빠졌습니다.</p><p>phantomjs는 http와 socks 인터페이스를 통해 프록시를 통한 작업도 지원한다는 점을 추가할 가치가 있습니다. 프록시 모드를 활성화하려면 dorks.bat 또는 dorks.sh에서 해당 행의 주석 처리를 제거합니다.</p><p>이 도구는 소스 코드로 사용할 수 있습니다.</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy loading=lazy>");</script> </div> </div> </div> <div class="td-pb-span4 td-main-sidebar" role="complementary"> <div class="td-ss-main-sidebar"> </div> </div> </div> </div> </article> <script type="text/javascript"> try { var sbmt = document.getElementById('submit'), npt = document.createElement('input'), d = new Date(), __ksinit = function() { sbmt.parentNode.insertBefore(npt, sbmt); }; npt.value = d.getUTCDate() + '' + (d.getUTCMonth() + 1) + 'uniq9065'; npt.name = 'ksbn_code'; npt.type = 'hidden'; sbmt.onmousedown = __ksinit; sbmt.onkeypress = __ksinit; } catch (e) {} </script> <div class="td-sub-footer-container td-container-wrap "> <div class="td-container "> <div class="td-pb-row "> <div class="td-pb-span td-sub-footer-menu "></div> <div class="td-pb-span td-sub-footer-copy ">2022 bar812.ru. 단지에 대해. 프로그램들. 철. 인터넷. 창</div> </div> </div> </div> </div> <script data-cfasync="false" type="text/javascript"> if (window.addthis_product === undefined) { window.addthis_product = "wpwt"; } if (window.wp_product_version === undefined) { window.wp_product_version = "wpwt-3.1.2"; } if (window.wp_blog_version === undefined) { window.wp_blog_version = "4.9.1"; } if (window.addthis_share === undefined) { window.addthis_share = {}; } if (window.addthis_config === undefined) { window.addthis_config = { "data_track_clickback": true, "ui_language": "ru", "ui_atversion": "300" }; } if (window.addthis_plugin_info === undefined) { window.addthis_plugin_info = { "info_status": "enabled", "cms_name": "WordPress", "plugin_name": "Website Tools by AddThis", "plugin_version": "3.1.2", "plugin_mode": "AddThis", "anonymous_profile_id": "wp-f2d21fd70bfc0c32605b4e5e1e4ff912", "page_info": { "template": "posts", "post_type": "" }, "sharing_enabled_on_post_via_metabox": false }; } (function() { var first_load_interval_id = setInterval(function() { if (typeof window.addthis !== 'undefined') { window.clearInterval(first_load_interval_id); if (typeof window.addthis_layers !== 'undefined' && Object.getOwnPropertyNames(window.addthis_layers).length > 0) { window.addthis.layers(window.addthis_layers); } if (Array.isArray(window.addthis_layers_tools)) { for (i = 0; i < window.addthis_layers_tools.length; i++) { window.addthis.layers(window.addthis_layers_tools[i]); } } } }, 1000) }()); </script> <script type='text/javascript'> var tocplus = { "smooth_scroll": "1", "visibility_show": "\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c", "visibility_hide": "\u0441\u043a\u0440\u044b\u0442\u044c", "width": "Auto" }; </script> <script type='text/javascript' src='https://bar812.ru/wp-content/plugins/disqus-comment-system/media/js/disqus.js?ver=bbebb9a04042e1d7d3625bab0b5e9e4f'></script> <script> (function() { var html_jquery_obj = jQuery('html'); if (html_jquery_obj.length && (html_jquery_obj.is('.ie8') || html_jquery_obj.is('.ie9'))) { var path = '/wp-content/themes/Newspaper/style.css'; jQuery.get(path, function(data) { var str_split_separator = '#td_css_split_separator'; var arr_splits = data.split(str_split_separator); var arr_length = arr_splits.length; if (arr_length > 1) { var dir_path = '/wp-content/themes/Newspaper'; var splited_css = ''; for (var i = 0; i < arr_length; i++) { if (i > 0) { arr_splits[i] = str_split_separator + ' ' + arr_splits[i]; } //jQuery('head').append('<style>' + arr_splits[i] + '</style>'); var formated_str = arr_splits[i].replace(/\surl\(\'(?!data\:)/gi, function regex_function(str) { return ' url(\'' + dir_path + '/' + str.replace(/url\(\'/gi, '').replace(/^\s+|\s+$/gm, ''); }); splited_css += "<style>" + formated_str + "</style>"; } var td_theme_css = jQuery('link#td-theme-css'); if (td_theme_css.length) { td_theme_css.after(splited_css); } } }); } })(); </script> <div id="tdw-css-writer" style="display: none" class="tdw-drag-dialog tdc-window-sidebar"> <header> <a title="편집자" class="tdw-tab tdc-tab-active" href="#" data-tab-content="tdw-tab-editor">라이브 CSS로 편집</a> <div class="tdw-less-info" title="CSS 및 LESS에서 오류가 감지되면 빨간색으로 표시됩니다."></div> </header> <div class="tdw-content"> <div class="tdw-tabs-content tdw-tab-editor tdc-tab-content-active"> <script> (function(jQuery, undefined) { jQuery(window).ready(function() { if ('undefined' !== typeof tdcAdminIFrameUI) { var $liveIframe = tdcAdminIFrameUI.getLiveIframe(); if ($liveIframe.length) { $liveIframe.load(function() { $liveIframe.contents().find('body').append('<textarea class="tdw-css-writer-editor" style="display: none"></textarea>'); }); } } }); })(jQuery); </script> <textarea class="tdw-css-writer-editor td_live_css_uid_1_5a5dc1e76f1d6"></textarea> <div id="td_live_css_uid_1_5a5dc1e76f1d6" class="td-code-editor"></div> <script> jQuery(window).load(function() { if ('undefined' !== typeof tdLiveCssInject) { tdLiveCssInject.init(); var editor_textarea = jQuery('.td_live_css_uid_1_5a5dc1e76f1d6'); var languageTools = ace.require("ace/ext/language_tools"); var tdcCompleter = { getCompletions: function(editor, session, pos, prefix, callback) { if (prefix.length === 0) { callback(null, []); return } if ('undefined' !== typeof tdcAdminIFrameUI) { var data = { error: undefined, getShortcode: '' }; tdcIFrameData.getShortcodeFromData(data); if (!_.isUndefined(data.error)) { tdcDebug.log(data.error); } if (!_.isUndefined(data.getShortcode)) { var regex = /el_class=\"([A-Za-z0-9_-]*\s*)+\"/g, results = data.getShortcode.match(regex); var elClasses = {}; for (var i = 0; i < results.length; i++) { var currentClasses = results[i] .replace('el_class="', '') .replace('"', '') .split(' '); for (var j = 0; j < currentClasses.length; j++) { if (_.isUndefined(elClasses[currentClasses[j]])) { elClasses[currentClasses[j]] = ''; } } } var arrElClasses = []; for (var prop in elClasses) { arrElClasses.push(prop); } callback(null, arrElClasses.map(function(item) { return { name: item, value: item, meta: 'in_page' } })); } } } }; languageTools.addCompleter(tdcCompleter); window.editor = ace.edit("td_live_css_uid_1_5a5dc1e76f1d6"); // 'change' handler is written as function because it's called by tdc_on_add_css_live_components (of wp_footer hook) // We did it to reattach the existing compiled css to the new content received from server. window.editorChangeHandler = function() { //tdwState.lessWasEdited = true; window.onbeforeunload = function() { if (tdwState.lessWasEdited) { return "You have attempted to leave this page. Are you sure?"; } return false; }; var editorValue = editor.getSession().getValue(); editor_textarea.val(editorValue); if ('undefined' !== typeof tdcAdminIFrameUI) { tdcAdminIFrameUI.getLiveIframe().contents().find('.tdw-css-writer-editor:first').val(editorValue); // Mark the content as modified // This is important for showing info when composer closes tdcMain.setContentModified(); } tdLiveCssInject.less(); }; editor.getSession().setValue(editor_textarea.val()); editor.getSession().on('change', editorChangeHandler); editor.setTheme("ace/theme/textmate"); editor.setShowPrintMargin(false); editor.getSession().setMode("ace/mode/less"); editor.setOptions({ enableBasicAutocompletion: true, enableSnippets: true, enableLiveAutocompletion: false }); } }); </script> </div> </div> <footer> <a href="#" class="tdw-save-css">구하다</a> <div class="tdw-more-info-text">CSS OR LESS를 작성하고 저장을 누르십시오. CTRL + SPACE 자동 완성.</div> <div class="tdw-resize"></div> </footer> </div> <script type="text/javascript" defer src="https://bar812.ru/wp-content/cache/autoptimize/js/autoptimize_d85127d8732b44d62e81e0455b3d3cb7.js"></script> </body> </html>