본문 바로가기

angr

codegate 2017 angrybird exploit only

문제는 간단히 string을 21개 입력 받고 if문을 약 400개 정도 통과하면 입력 받은 string이 flag가 되는 형식 이었다.


ida로 피해야 되는 부분을 일일이 다 파싱해서 fails 배열로 만들어주고, 시작 부분을 main 시작 위치가 아니라 fgets를 받는 위치로 설정해야 한다. ( 이유는 main 시작 부분에 안티 디버깅과 실행을 제대로 되지 않게 하기 위한 바이너리 패치가 되어 있기 때문, 이거 때문에 실제 대회에서는 풀지 못했다 ㅠㅠ )


ida로 열어서 disassemble을 하기 위해서는 몇가지 바이트 수정이 필요하다. ( xor eax,eax 이 부분만 수정해 주면 될 듯 )


나머지 부분은 일반적인 angr 사용법이랑 동일하다.



=========== EXPLOIT SOURCE =============



import angr


fails = [0x400803, 0x40082C, 0x40084C, 0x400875, 0x4008A4, 0x4008CD, 0x4008F6, 0x40091F, 0x400948, 0x40098B, 0x4009B4, 0x4009DD, 0x400A06, 0x400A2F, 0x400A5B, 0x400A80, 0x400AA9, 0x400ACF, 0x400AF4, 0x400B1D, 0x400B53, 0x400B7C, 0x400BB8, 0x400BEA, 0x400C13, 0x400C45, 0x400C71, 0x400C96, 0x400CBF, 0x400CE4, 0x400D09, 0x400D2F, 0x400D54, 0x400D7D, 0x400DA6, 0x400DC6, 0x400DEB, 0x400E14, 0x400E3A, 0x400E66, 0x400E8F, 0x400ECC, 0x400EF1, 0x400F1A, 0x400F43, 0x400F6C, 0x400F8C, 0x400FB5, 0x400FE4, 0x401009, 0x40102F, 0x40105F, 0x401084, 0x4010AD, 0x4010D6, 0x4010F6, 0x40111F, 0x401148, 0x401171, 0x40119A, 0x4011D6, 0x4011FF, 0x40122F, 0x401258, 0x401281, 0x4012AA, 0x4012D3, 0x4012FC, 0x401332, 0x40135B, 0x401387, 0x4013B0, 0x4013D9, 0x4013F9, 0x401422, 0x40144B, 0x401474, 0x40149D, 0x4014C6, 0x4014EF, 0x401518, 0x401541, 0x40156A, 0x401593, 0x4015BC, 0x4015E5, 0x401614, 0x40163D, 0x401666, 0x40168F, 0x4016B8, 0x4016E7, 0x401710, 0x401739, 0x40178F, 0x4017B8, 0x4017E0, 0x401809, 0x401832, 0x401868, 0x401891, 0x4018C7, 0x4018F0, 0x401919, 0x401942, 0x40196B, 0x401994, 0x4019BD, 0x4019E6, 0x401A0F, 0x401A38, 0x401A67, 0x401A90, 0x401AC0, 0x401AE9, 0x401B12, 0x401B41, 0x401B6A, 0x401B93, 0x401BB8, 0x401BE1, 0x401C09, 0x401C3F, 0x401C6E, 0x401C97, 0x401CC0, 0x401CE9, 0x401D12, 0x401D37, 0x401D5D, 0x401D82, 0x401DAB, 0x401DE7, 0x401E10, 0x401E39, 0x401E5E, 0x401E84, 0x401EA9, 0x401ECE, 0x401EF7, 0x401F26, 0x401F4F, 0x401F78, 0x401FA1, 0x401FCA, 0x401FF3, 0x40201C, 0x402045, 0x40206E, 0x402097, 0x4020BC, 0x4020E1, 0x402107, 0x40212C, 0x402155, 0x40217E, 0x4021B4, 0x4021DD, 0x402213, 0x402238, 0x402271, 0x402297, 0x4022BC, 0x4022E5, 0x40230E, 0x402337, 0x402360, 0x402389, 0x4023B2, 0x4023D7, 0x4023FC, 0x402421, 0x402447, 0x40246C, 0x4024A2, 0x4024D4, 0x402510, 0x402539, 0x40255E, 0x402583, 0x4025A9, 0x4025CE, 0x4025F7, 0x402654, 0x402686, 0x4026AB, 0x4026DA, 0x402703, 0x402733, 0x40275C, 0x402792, 0x4027BB, 0x4027E1, 0x402806, 0x40282F, 0x402858, 0x402881, 0x4028AA, 0x4028D3, 0x402905, 0x40292E, 0x402957, 0x40297C, 0x4029A1, 0x4029CA, 0x4029EF, 0x402A29, 0x402A4E, 0x402A7D, 0x402AA6, 0x402ACF, 0x402B05, 0x402B2E, 0x402B57, 0x402B8D, 0x402BB2, 0x402BDB, 0x402C04, 0x402C29, 0x402C4E, 0x402C7D, 0x402CA6, 0x402CCB, 0x402CF1, 0x402D16, 0x402D3F, 0x402D75, 0x402D9E, 0x402DC7, 0x402DEC, 0x402E15, 0x402E43, 0x402E6C, 0x402E9E, 0x402EC3, 0x402EF2, 0x402F17, 0x402F40, 0x402F69, 0x402FA4, 0x402FCA, 0x402FFC, 0x403025, 0x40304E, 0x40306E, 0x403097, 0x4030C0, 0x4030E9, 0x403112, 0x403132, 0x403168, 0x403191, 0x4031B1, 0x4031DA, 0x403203, 0x40322C, 0x403255, 0x40327E, 0x4032A7, 0x4032EE, 0x40331B, 0x403344, 0x40336D, 0x4033A9, 0x4033DF, 0x4033FF, 0x403428, 0x403451, 0x40347A, 0x4034A3, 0x4034CC, 0x4034F5, 0x403515, 0x40353E, 0x40356D, 0x403596, 0x4035BF, 0x4035E8, 0x40361E, 0x40363E, 0x403674, 0x40369D, 0x4036C6, 0x403716, 0x40373F, 0x403768, 0x40379E, 0x4037D4, 0x4037FD, 0x403826, 0x40384F, 0x403878, 0x4038A1, 0x4038D7, 0x40390D, 0x403943, 0x40396C, 0x403991, 0x4039B7, 0x4039DC, 0x403A05, 0x403A2E, 0x403A57, 0x403A80, 0x403AA5, 0x403AD4, 0x403AF9, 0x403B28, 0x403B51, 0x403B7A, 0x403BA3, 0x403BCC, 0x403BF5, 0x403C1A, 0x403C3F, 0x403C6E, 0x403C97, 0x403CC0, 0x403CF6, 0x403D1F, 0x403D48, 0x403D71, 0x403D96, 0x403DBB, 0x403DEA, 0x403E13, 0x403E3C, 0x403E65, 0x403EA4, 0x403EE5, 0x403F1B, 0x403F44, 0x403F7A, 0x403F9F, 0x403FC4, 0x403FEA, 0x40400F, 0x404038, 0x40406E, 0x404097, 0x4040C0, 0x4040E5, 0x40410A, 0x404130, 0x404155, 0x40417E, 0x4041A7, 0x4041DD, 0x404206, 0x40422C, 0x404251, 0x40427A, 0x4042A3, 0x4042CC, 0x4042F5, 0x40431E, 0x404343, 0x40436C, 0x404391, 0x4043B6, 0x4043E8, 0x40440E, 0x404433, 0x40445C, 0x404485, 0x4044AE, 0x4044D7, 0x404500, 0x404525, 0x40454E, 0x404573, 0x404598, 0x4045C1, 0x4045E6, 0x40460C, 0x404631, 0x40465A, 0x404683, 0x4046AC, 0x4046D5, 0x4046FE, 0x404723, 0x40474C, 0x404771, 0x404796, 0x4047BF, 0x4047E4, 0x404809, 0x40482E, 0x404854, 0x404879, 0x4048A2, 0x4048CB, 0x4048F0, 0x404915, 0x404944, 0x40496D, 0x404996, 0x4049BF, 0x4049E8, 0x404A11, 0x404A31, 0x404A5A, 0x404A83, 0x404AAC, 0x404AD5, 0x404AFE, 0x404B1E, 0x404B47, 0x404B70, 0x404B99, 0x404BC2, 0x404BEB, 0x404C14, 0x404C3D, 0x404C80, 0x404CA9, 0x404CD2, 0x404CFB, 0x404D24, 0x404D4D, 0x404D83, 0x404DAC, 0x404DD5, 0x404DFE, 0x404E27, 0x404E50, 0x404E75, 0x404EA4, 0x404ECD, 0x404EF6, 0x404F1F, 0x404F44, 0x404F7C, 0x404fab]


main_fgets = 0x00000000004007c2

avoid = [(offst - 0x5) for offst in fails]


find = 0x404fab


proj = angr.Project('./angrybird8')


init = proj.factory.blank_state(addr=main_fgets)


path_group = proj.factory.path_group(init)

path_group.explore(find=find, avoid=avoid)


print path_group.found[0].state.posix.dumps(0)




=========== EXPLOIT SOURCE =============