SlideShare a Scribd company logo
1 of 43
Download to read offline
Race Condition 101
ชองโหวที่แขงกับเวลาและเงื่อนไข
Copyright © 2015 by Pichaya Morimoto.
แจกจายหรือนําไปใชไดเต็มที่ไมตองขอแคลงเครดิตไวก็พอ
Mr. Pichaya Morimoto
June 5, 2015
ที่มา: https://cwe.mitre.org/data/definitions/362.html
Race Condition คือ?
การทํางานตามลําดับของโคดสวน A ที่(อาจ)
ทํางานรวมกับโคดสวนอื่น ซึ่ง อาจใช
ทรัพยากร (ไฟล, ขอมูล, อุปกรณ ฯลฯ)
รวมกัน แตในระหวาง "เวลา" ที่โคด A
กําลังทํางานตามลําดับอยูนั้น ถา ทรัพยากร
ถูกแกไขจากโคดหรือโปรแกรม อื่นที่ทํางาน
ในขณะเดียวกันจะอาจทําใหทํางานผิดพลา
ดได ถาโคดสวน A ไมไดคํานึงถึงปญหานี้ไว
Race Condition คือ?
งงแพบ
Race Condition คือ?
ตัวอยาง: ถอนเงินในบัญชี
สมศรี สมชาย
เงินเดือน เดือนนี้ออกแลวว
เอามาฝากที่เคากอน เดี๋ยว
โอนใหใชวันละ 50 บาทนะ #หะ
ถาใชแลวเหลือกลับ
บานมาหยอดกระปุก
ดวยนะ
ตัวอยาง: ถอนเงินในบัญชี
สมศรี
โอนเงินแพบ
เงินคงเหลือ
ในบัญชีสมศรี
15,000 บาท
14,950 บาท
เงินคงเหลือ
ในบัญชีสมชาย
0 บาท
50 บาท
ตัวอยาง: ถอนเงินในบัญชี
สมศรี
โอนเงินแพบ
เงินคงเหลือ
ในบัญชีสมศรี
15,000 บาท
14,950 บาท
เงินคงเหลือ
ในบัญชีสมชาย
0 บาท
50 บาท
Timing
Window
Code Sequence == การโอนเงิน
1. ตองถอนจากบัญชีสมศรี
2. แลวโอนเขาบัญชีสมชาย
Shared Resource == เงินในระบบ
ตัวอยาง: ถอนเงินในบัญชี
เงินคงเหลือ
ในบัญชีสมชาย
Total: 50 บาท
สมชาย
50 บาท...ใชไงใหพอเนี่ย
เรียนสอนแฮกเว็บแบบแมว ๆ
มาแลว ลองหนอยดีกวา..
สิ่งที่เกิดขึ้นตอนถอนเงิน?
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่คนกดเงินคิด
ฉันมีเงินในบัญชี 50 บาท
ฉันนําออกมาใช 50 บาท
ฉันเหลือเงิน 0 บาทในบัญชี
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่โปรแกรมเมอรคิด
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
} Thread 1, 2 ทําพรอมกัน
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
ใชเวลา 3 วินาที
วิ 1
วิ 2
วิ 3
Thread 1, 2 ทําพรอมกัน
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
วิ 1
วิ 2
วิ 3
จะเกิดอะไรขึ้น
ถาวินาทีที่ 2
ถอนเงินอีกตู
จากบัญชีเดียว
กันพรอม ๆ
กัน?
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
var เงินที่จะถอน = 50;
var เงินในบัญชี = 50;
if (เงินในบัญชี >= เงินที่จะถอน)
f_ถอนเงิน(50){
t_ลบเงินในบัญชี(50);
t_เงินออกจากตู(50);
}
}
วินาทีที่ 1
ถอนเงินตู 1
วินาทีที่ 2
ถอนเงินตู 2
วินาทีที่ 2
ถอนเงินตู 3
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
วินาทีที่ 1
ถอนเงินตู 1
โจร 1 ไดเงิน
50 บาท
วินาทีที่ 2
ถอนเงินตู 2
โจร 2 ไดเงิน
50 บาท
วินาทีที่ 2
ถอนเงินตู 3
โจร 3 ไดเงิน
50 บาท
ตัวอยาง: ถอนเงินในบัญชี
สิ่งที่แฮกเกอรคิด
มีเงินในบัญชี
50 บาท
ถอน 3
ครั้งพรอม ๆ
กันไดเงิน 150
บาท!!!
ตัวอยาง: ถอนเงินในบัญชี
ที่มา: http://thehackernews.
com/2012/10/1-million-dollar-hacked-
in-60-seconds.html, http://www.fbi.
gov/sandiego/press-
releases/2012/fourteen-charged-in-
million-dollar-gone-in-60-seconds-
bank-fraud
ตัวอยาง: ถอนเงินในบัญชี
ที่มา: http://thehackernews.com/2012/10/1-million-dollar-hacked-in-60-seconds.html, http://www.fbi.
gov/sandiego/press-releases/2012/fourteen-charged-in-million-dollar-gone-in-60-seconds-bank-
fraud
ใชเวลา 60 วินาที กวาระบบธนาคาร
จะอัพเดทวาเงินถูกถอนเงินไปแลว
Race Condition กรณีอื่น ๆ ?
C, C++Privilege Escalation
VMware Local Privilege Escalation
using Race Condition (CVE-2010-4295)
VMware Local Privilege Escalation
using Race Condition (CVE-2010-4295)
User Root User LongCat
ใช vmware-mount
ทํางาน !@#$%^&(
บายโมง 10 นาที 20 วินาที
=> สราง /tmp/vmxxx.sh
=> ใสโคด
=> รันดวยสิทธิ์ root
=> ลบไฟลออก
=> จบการทํางาน
Server:
Company A
VMware Local Privilege Escalation
using Race Condition (CVE-2010-4295)
User Root User LongCat
ใช vmware-mount
ทํางาน !@#$%^&(
บายโมง 10 นาที 20 วินาที
=> สราง /tmp/vmxxx.sh
=> ใสโคด
=> รันดวยสิทธิ์ root
=> ลบไฟลออก
=> จบการทํางาน
Server:
Company A
บายโมง 10 นาที 19 วินาที
เขียนสคริปทวนลูป ใสโคด
“sudo usermod -aG
sudo longcat”
เขาไปในไฟล /tmp/vmxxx.
sh รัว ๆ!! อิอิกํา
กลับมาดูที่ฝงเว็บ!
โฆษณาคั่น: https://www.facebook.com/longhackz
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ชองโหว Race Condition ใน Facebook
ระบบรีวิวของ
แฟนเพจ
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ชองโหว Race Condition ใน Facebook
เฟซบุกจายคาหาชองโหวเจอให
3000 USD (1 แสนกวาบาท)
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ชองโหว Race Condition ใน Facebook
เปลี่ยนชื่อ
ชองโหว Race Condition
ในเว็บ Digital Ocean
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ชองโหว Race Condition
ในเว็บ Digital Ocean
ที่มา: Josip Franjković
http://josipfranjkovic.blogspot.com/2015/04/race-conditions-on-facebook.html
ใช Promo Code 1 อัน แลวยิงเขาไปพรอมกันในเสี้ยววินาทีเดียวเปนสิบ ๆ
thread เพื่อเติม Promo Code
ในระบบทําใหจากเดิมกดไดครั้งเดียวเปนหลายครั้ง ปมเงิน!
ดรามา Race Condition ในระบบ
StarBucks Gift Card
ที่มา: Egor Homakov
http://sakurity.com/blog/2015/05/21/starbucks.html, http://arstechnica.
com/security/2015/05/researcher-who-exploits-bug-in-starbucks-gift-
cards-gets-rebuke-not-love/
ดรามา Race Condition ในระบบ
StarBucks Gift Card
ที่มา: Egor Homakov
http://sakurity.com/blog/2015/05/21/starbucks.html, http://arstechnica.com/security/2015/05/researcher-
who-exploits-bug-in-starbucks-gift-cards-gets-rebuke-not-love/
★ Ghost in the ShellCode 2015
★ Name: aart
★ Category: Web
★ Points: 200
LongCat Voting System
ที่มา: http://ghostintheshellcode.com/
LongCat Voting System
★ สมัคร User Account ได
★ ล็อคอินได
(แตบอกไมใชแอดมิน)
★ สงลิ้งรูปกับชื่อรูปมาที่หนาแ
รกได
★ หนาแรกไมจํากัดรูปที่ถูกสง
มา (ตอนหลังจํากัดเปน
1000 แลวก็ 100
รูปลาสุดแทนเพราะคนเลนเ
ยอะ)
★ แตละรูปสามารถโหวตคะแน
นขึ้นหรือลงได
LongCat Voting System
LongCat Voting System
LongCat Voting System
LongCat Voting System
Recap: VMware Race Condition
User Root User LongCat
ใช vmware-mount
ทํางาน !@#$%^&(
บายโมง 10 นาที 20 วินาที
=> สราง /tmp/vmxxx.sh
=> ใสโคด
=> รันดวยสิทธิ์ root
=> ลบไฟลออก
=> จบการทํางาน
Server:
Company A
บายโมง 10 นาที 19 วินาที
เขียนสคริปทวนลูป ใสโคด
“sudo usermod -aG
sudo longcat”
เขาไปในไฟล /tmp/vmxxx.
sh รัว ๆ!! อิอิกํา
LongCat Voting System
LongCat Voting System
[1.01]
สมัคร!
[1.011]
ล็อคอิน!
[1.03]
ใสสิทธิ์
user
ธรรมดา
ล็อคอินตอนที่
ขั้นตอนสมัครแคใส
user/pass
เขาไปในฐานขอมูล
user
แตยังไมไดใสสิทธิ์เ
ปน user ธรรมดา!
[1.02]
LongCat Voting System
flag{rac4c0nd1t1on}
Write-up จาก
https://kitctf.de/writeups/gits2015/aart/
Pwner !!
Pwner !!
LongCat Voting System
Down !!
ปองกัน Race Condition?
★ Atomicity
○ Transaction
○ Locks
○ Roll-back
○ Double-Check

More Related Content

More from Pichaya Morimoto

ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...
ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...
ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...Pichaya Morimoto
 
Securing and Hacking LINE OA Integration
Securing and Hacking LINE OA IntegrationSecuring and Hacking LINE OA Integration
Securing and Hacking LINE OA IntegrationPichaya Morimoto
 
Docker Plugin For DevSecOps
Docker Plugin For DevSecOpsDocker Plugin For DevSecOps
Docker Plugin For DevSecOpsPichaya Morimoto
 
Mysterious Crypto in Android Biometrics
Mysterious Crypto in Android BiometricsMysterious Crypto in Android Biometrics
Mysterious Crypto in Android BiometricsPichaya Morimoto
 
Web Hacking with Object Deserialization
Web Hacking with Object DeserializationWeb Hacking with Object Deserialization
Web Hacking with Object DeserializationPichaya Morimoto
 
Burp Extender API for Penetration Testing
Burp Extender API for Penetration TestingBurp Extender API for Penetration Testing
Burp Extender API for Penetration TestingPichaya Morimoto
 
Bug Bounty แบบแมว ๆ
Bug Bounty แบบแมว ๆ Bug Bounty แบบแมว ๆ
Bug Bounty แบบแมว ๆ Pichaya Morimoto
 
Pentest 101 @ Mahanakorn Network Research Laboratory
Pentest 101 @ Mahanakorn Network Research LaboratoryPentest 101 @ Mahanakorn Network Research Laboratory
Pentest 101 @ Mahanakorn Network Research LaboratoryPichaya Morimoto
 
Security Misconfiguration (OWASP Top 10 - 2013 - A5)
Security Misconfiguration (OWASP Top 10 - 2013 - A5)Security Misconfiguration (OWASP Top 10 - 2013 - A5)
Security Misconfiguration (OWASP Top 10 - 2013 - A5)Pichaya Morimoto
 
Exploiting Blind Vulnerabilities
Exploiting Blind VulnerabilitiesExploiting Blind Vulnerabilities
Exploiting Blind VulnerabilitiesPichaya Morimoto
 
Vulnerable Active Record: A tale of SQL Injection in PHP Framework
Vulnerable Active Record: A tale of SQL Injection in PHP FrameworkVulnerable Active Record: A tale of SQL Injection in PHP Framework
Vulnerable Active Record: A tale of SQL Injection in PHP FrameworkPichaya Morimoto
 
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya MorimotoSQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya MorimotoPichaya Morimoto
 

More from Pichaya Morimoto (12)

ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...
ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...
ยกระดับศักยภาพของทีม IT Security องค์กรด้วย CTF & Cybersecurity Online Platfo...
 
Securing and Hacking LINE OA Integration
Securing and Hacking LINE OA IntegrationSecuring and Hacking LINE OA Integration
Securing and Hacking LINE OA Integration
 
Docker Plugin For DevSecOps
Docker Plugin For DevSecOpsDocker Plugin For DevSecOps
Docker Plugin For DevSecOps
 
Mysterious Crypto in Android Biometrics
Mysterious Crypto in Android BiometricsMysterious Crypto in Android Biometrics
Mysterious Crypto in Android Biometrics
 
Web Hacking with Object Deserialization
Web Hacking with Object DeserializationWeb Hacking with Object Deserialization
Web Hacking with Object Deserialization
 
Burp Extender API for Penetration Testing
Burp Extender API for Penetration TestingBurp Extender API for Penetration Testing
Burp Extender API for Penetration Testing
 
Bug Bounty แบบแมว ๆ
Bug Bounty แบบแมว ๆ Bug Bounty แบบแมว ๆ
Bug Bounty แบบแมว ๆ
 
Pentest 101 @ Mahanakorn Network Research Laboratory
Pentest 101 @ Mahanakorn Network Research LaboratoryPentest 101 @ Mahanakorn Network Research Laboratory
Pentest 101 @ Mahanakorn Network Research Laboratory
 
Security Misconfiguration (OWASP Top 10 - 2013 - A5)
Security Misconfiguration (OWASP Top 10 - 2013 - A5)Security Misconfiguration (OWASP Top 10 - 2013 - A5)
Security Misconfiguration (OWASP Top 10 - 2013 - A5)
 
Exploiting Blind Vulnerabilities
Exploiting Blind VulnerabilitiesExploiting Blind Vulnerabilities
Exploiting Blind Vulnerabilities
 
Vulnerable Active Record: A tale of SQL Injection in PHP Framework
Vulnerable Active Record: A tale of SQL Injection in PHP FrameworkVulnerable Active Record: A tale of SQL Injection in PHP Framework
Vulnerable Active Record: A tale of SQL Injection in PHP Framework
 
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya MorimotoSQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
SQL Injection 101 : It is not just about ' or '1'='1 - Pichaya Morimoto
 

Exploiting WebApp Race Condition Vulnerability 101