TL; DR
Berhemeke Maven Central wekî hatiye weşandin io.github.davidtimur:c2-lab neh bername şandin, heşt ji wan di dema berhevkirina her projeyek jêrîn de ku jar li ser rêya pêvajoya şîrovekirinê ya wê bi cih dikir, bargiraniyek gihîştina dûr bicîh anîn. Pêdivî bi tu koda serîlêdanê tunebû ku wê import bike. Pêdivî bi tu rêza çavkaniyê tunebû ku jê re referans bike. Ne skrîpteke sazkirinê, ne hevwateya piştî sazkirinê, û ne jî çengelek çerxa jiyanê ya ji her cûreyê ji bo amûrên ku wê vekolin hebû.
Vektora pêkanînê pelek yekane ya 46-baytî ye ku di hundirê jar de ye: qeydkirinek dabînkerê karûbarê Java ku çînek bicîh tîne nav dike. javax.annotation.processing.ProcessorBerhevkarê Java qeydkirinên weha bixweber kifş dike. Dema ku were dîtin, javac çînê wekî beşek normal a berhevkirinê çêdike û dimeşîne. Ev tê vê wateyê ku jîngeha xebitandinê ya barê bikêrhatî makîneya avakirinê ye, di wê gavê de makîneya avakirinê tiştê ku ew ji bo wê heye dike.
Di neh guhertoyan de kanala ferman-û-kontrolê sê caran ji nû ve hate avakirin: URL-ya vegerandina bangê ya ji hêla operator ve hatî peyda kirin, dû re qalikek berevajî li ser tunelek TCP-ya ngrok, dû re kanalek anketê ya HTTP-ê ku rêyên wê du caran din guherîn. Guhertoya dawî rêveberek baweriyê ya TLS-ya bê-oper wekî xwerûya JVM saz kir, qebûlkirina her sertîfîkayekê ji bo dema berhevkirinê.
Di POM û lîsansa MITê de peyvên "C2 Lab Payload" li ser berhemê hebûn. Di tevahiya dema ku me ew çavdêrî kir de, ew li ser Maven Central zindî bû. ji wê demê ve tevî tevahiya wê hatiye rakirin io.github.davidtimur kom.
Anatomî: kompîler wekî motora darvekirinê
Çarçoveya pêvajoya şîrovekirinê ya Java heye, ji ber vê yekê pirtûkxane dikarin di dema berhevkirinê de kodê çêbikin - mekanîzmaya li pişt Lombok, Dagger, û navnîşek dirêj a amûrên ORM û rêzefîlmkirinê. Pêvajoyek xwe bi pelek nivîsa sade di hundurê jar de radigihîne:
META-INF/services/javax.annotation.processing.Processor
Naveroka wê pelê di her guhertoya bandorkirî de, bi herf û bi temamî:
io.github.davidtimur.c2lab.C2Processor
Pel di navbera guhertoyên 1.0.1 heta 1.0.8 de bi awayê byte yek e, md5 7d2a08a5c8869a47eea9fa62487dfbe4. Guhertoya 1.0.0 wê nagire nav xwe.
Heke Javanesî dimeşe, ew rêya pêvajoya şîrovekirinê ji bo van tomarên xizmetê dişopîne û tiştên ku dibîne bar dike. Tiştek di projeya ku tê berhevkirin de ne hewce ye ku behsa pêvajoyê bike, tiştekî şîrove bike, an tiştekî mîheng bike. Hebûna li ser rê têrê dike. Ev taybetmendiya ku JavacDoor ji şablonên zincîra dabînkirinê yên ku piraniya amûran li dora wan ava dibin vediqetîne:
| pattern | Kişok | Dîtbar wek |
|---|---|---|
| çengela sazkirina npm | npm install | scripts.postinstall di manîfestoyê de |
| Barkêşiya dema importkirina Pythonê | yekem importkirina modulê | daxuyaniya asta modulê di çavkaniyê de |
| JavacDoor | javac li ser her projeyek paşîn | navekî pelê qeydkirina xizmetê |
Çengek sazkirinê daxuyaniyek di manîfestoyekê de ye, û manîfesto yekem tiştê ku kesek dixwîne ye. Barkêşek dema importê bi kêmanî di çavkaniya xwendî de ye. Qeydkirina xizmetê ne yek ji wan e: ew navek pelê ye û rêzek navê çînekê dide, û tevger di bytecode-a berhevkirî de, peldankek dûr dimîne.
Çîna barkêşiyê bi xwe bi gulebaranê keşfa mêvandar pêk tîne. Hewzên sabît ên çînên berhevkirî dihewînin / bin / sh, ez kî me, uname -a, pwd li ser rêya Unix û lîsteya peywiran li ser rêya Windows-ê, digel beralîkirinaErrorStream ji bo tevlêkirina derana xeletiya pêvajoya zarok di herika girtî de. Du şablonên JSON encaman ji mêvandar hildigirin - nîşanek qeydkirinê:
{"host":"%s","os":"%s","user":"%s","dir":"%s"}
niştecî ji hostname ferman û navê.osê, navê bikarhêner, û bikarhêner.dir taybetmendiyên pergalê, û vegerandina encamek:
{"version":"%s","host":"%s","time":"%s","output":"%s"}
Nîşaneyên pêşketinê yên ku di derana berhevkar de mane bi awayekî neasayî eşkere ne: [C2] bicîhanîna dema berhevkirinê qediya, [C2] banga vegerê hat şandin → HTTP , [C2] qalik bi ve girêdayî ye .
Neh berdan, sê nifşên C2
Berdan ne neh kopiyên barekî ne. Ew qeydek dubarekirinê ne, û xwendina wan bi rêzê nîşan dide ku kanal ji nû ve tê çêkirin di heman demê de vektora radestkirinê sabît maye.
| Berdan | Di dema kompîlasyonê de bixweber tê xebitandin | Qenal |
|---|---|---|
1.0.0 | na (pelê xizmetê tune ye) | Tenê URL-ya vegerandina bangê ya ji hêla operator ve hatî peyda kirin |
1.0.1 | erê (vektor hatîye nasandin) | URL-ya vegerandina bangê ya ji hêla operator ve hatî peyda kirin |
1.0.2 | erê | Qalika berevajî, tunela TCP ya ngrok |
1.0.3 | erê | Kanala HTTP, /register /cmd /out |
1.0.4 | erê | Kanala HTTP, /register /cmd /out |
1.0.5 | erê | Kanala HTTP, /qeydkirin /pirsandin /derketin |
1.0.6 | erê | Kanala HTTP, /qeydkirin /pirsandin /derketin |
1.0.7 | erê | Kanala HTTP, /register /cmd |
1.0.8 | erê | Verastkirina kanala HTTP + TLS neçalak e |
Hêjayî xêzkirinê ye ku sê hûrgulî di wê tabloyê de werin xêzkirin, ji ber ku her yek ji wan awayê xwendina komek hunerî diguherîne.
Vektor digihîje 1.0.1, ne 1.0.2. Guhertoya 1.0.0 heman mantiqa keşf û vegerandinê hildigire lê pelê xizmetê û îtxalkirina pêvajoya şîroveyan tune ye; ew tenê heke tiştek wê gazî bike dixebite. Ji 1.0.1-ê pê ve pelê xizmetê heye û çînên berhevkirî îtxal dikin. javax.annotation.processing.SupportedSourceVersionHer nirxandinek ku her du guhertoyên bilêtkirî - 1.0.0 û 1.0.2 - berawird dike, bi awayekî rast encam dide ku tiştek guheriye, lê bi xeletî destnîşan dike ka li ku derê guheriye.
Qalika berevajî tam di yek berdanê de heye. Guhertoya 1.0.2 dihewîne 0.tcp.ngrok[.]io, xeta qeydkirinê [C2] qalik bi 0.tcp.ngrok[.]io:19823 ve girêdayî ye, pankarteke înteraktîf qalikê-c2, û termînalek çarçovê __DAWÎ__Guhertoyên 1.0.3 û pê ve ti ji wan nagirin û li şûna wê digihîjin mêvandarek HTTPS. Daxwazek rakirinê ku tenê guhertoyên bilêtkirî bi nav dike, dê xalek dawî ya TCP-ya mirî destnîşan bike dema ku kanala HTTP-ya zindî, ku di şeş guhertoyên paşîn de heye, bê behs bihêle.
Guhertoya dawî verastkirina veguhastinê radike. Guhertoya 1.0.8 çînek pêkanînê lê zêde dike javax.net.ssl.X509TrustManager ku rêbazên kontrolkirina sertîfîkayê tiştekî nakin, verastkerek navê mêvandar a her gav rast ku bi rêya setDefaultHostnameVerifier, Û a bawerî bi hemûyan re rûtîneke ku herduyan jî wekî mîhengên xwerû yên JVM-ê saz dike. Bandor ew e ku ji bo mayîna wê kompîlasyonê, JVM her sertîfîkayek ji her mêvandar qebûl dike - ne tenê ji bo trafîka barkêşiyê bi xwe, lê ji bo her tiştê din ê ku avakirin paşê li ser TLS-ê dike.
Kanala HTTP, di her şeş guhertoyên ku wê bikar tînin de, ji hêla yek mêvandar ve tê rêvebirin: sifreya-ful-fervor-crazed.ngrok-free[.]devHer daxwazek sernivîsek hildigire hişyariya-ngrok-skip-browser, ku rûpela navberî ya ku tunelên ngrok ên belaş ji gerokan re pêşkêş dikin, tepeser dike. Setên rêyan di navbera guhertoyan de diguherin — /derve di 1.0.7 de winda dibe, û /cmd bi /gelpisî — lê mêvandar qet naguhere.
Gotina xwe-îstîsnakirinê
Her POM ji 1.0.1 û pê ve argûmanek berhevkar ji bo avakirina berhemê bi xwe destnîşan dike:
-proc:tune
Ew al pêvajoya şîrovekirinê neçalak dike. Bandora wê li vir pêş ecise: dema ku projeya ku pêvajo dihewîne bi xwe tê berhevkirin, pêvajo naxebite.
Ev al bi tevahî ji karanînên asayî pêk tê. Projeyek ku pêvajoyek şîrovekirinê dişîne pir caran hewce dike ku di dema bootstrapê de ji sepandina wê pêvajoyê li ser xwe dûr bisekine, û belgekirina amûrên avakirinê tam vê yekê pêşniyar dike. Bi tena serê xwe, ew tiştekî îspat nake.
Lêbelê, dema ku pêvajo bi hev re bi karên xwe ve girêdayî be, ew nehevsengiyek taybetî vedibêje: kod li ser makîneyên her kesê ku li dijî berhemê kompîle dike tê xebitandin, û ne li ser makîneya ku berhemê ava dike. Ev al di heman guhertoya ku pelê xizmetê dide nasîn - 1.0.1 - û di her guhertoya piştî wê de xuya dike. Têkiliya di navbera "guhertoya ku pêkanîna di dema kompîlekirinê de dest pê dike" û "guhertoya ku pêkanîna di dema kompîlekirinê de bi awayekî herêmî tê vemirandin" de sînyala analîtîk a herî bikêrhatî di koma berheman de ye, û ew di POM-a nivîsa sade de bêyî ku tiştek dekompîle bike xuya dike.
Em bandorê destnîşan dikin û li vir rawestin. Di nav berhemên dîrokî de tiştek nabêje ka çima al hatiye danîn.
Perçeyek din a metadatayê hêjayî behskirinê ye, bi piranî ji bo avêtina wê. POM projeyê wekî "C2 Lab Payload" bi nav dike, wê wekî "C2 lab payload artefact" bi nav dike, û lîsansê dide MIT. Xwe-etîketkirina bi vî rengî carinan wekî delîl tê pêşkêş kirin ku pakêtek xebatek lêkolînê ye.cise li şûna gefek zindî, û carinan ew xwendin rast e - kanaryayek ragihandî bêyî binesaziyek gihîştî tiştek ji vê yekê cuda ye. Li vir derbas nabe. Împlantek fonksiyonel ku li depoyek giştî hatî weşandin, ku ji hêla her xerîdar ve tê gihîştin, bi binesaziyek derketinê ku sê caran di neh berdanan de ji nû ve hatî çêkirin, bêyî ku metadata wê çi jê re dibêje, kapasîteyek zindî ye. Nav di POM de tiştek di derbarê tiştê ku li ser makîneyek ku li dijî wê berhev dibe de naguhere.
Nîşaneyên ji bo makîneyên çêkirinê
Eger hosteke avakirinê li dijî vê berhemê hatibe berhevkirin, delîl di têketinên avakirinê û telemetriya torê de rûdine, ne di împlanteke domdar a li ser dîskê de - barkêş di hundirê pêvajoya berhevkar de dimeşe û bi wê re derdikeve.
Di jar an jî depoya herêmî de cache
META-INF/services/javax.annotation.processing.Processornamingio.github.davidtimur.c2lab.C2Processor- Pelê xizmetê md5
7d2a08a5c8869a47eea9fa62487dfbe4 - Dersên di bin
io/github/davidtimur/c2lab/:C2Processor,C2Task,Task, û di 1.0.8 de çîna hundirînTask$1
Derana di avakirinê de
[C2] compile-time execution complete[C2] callback sent → HTTP[C2] callback failed:[C2] shell connected to- Banera înteraktîf
c2-shell; dawîkera çarçoveyê__END__
Telemetrîya di pêvajoyê de
javacwekî dêûbavê/bin/sh -c(Unix) an jî wergêrekî fermanên Windowsê- Fermanên zarokan
whoami,uname -a,pwd(Unix) an jîtasklist(Windows) ji hêla gaveke kompîlasyonê ve tê rêvebirin
Di telemetriya torê de
- TCP-ya derketî bo
0.tcp.ngrok[.]io:19823(berdana 1.0.2) - HTTPS bo
tableful-fervor-crazed.ngrok-free[.]dev, rê/register,/cmd,/poll,/out(guhertoyên 1.0.3 heta 1.0.8 derdixe) - Sernivîsa daxwazê
ngrok-skip-browser-warning: true - Daxwaza lihevhatina laşên
{"host":...,"os":...,"user":...,"dir":...}or{"version":...,"host":...,"time":...,"output":...}
Di veavakirinê de
- Guherbarên jîngehê
CALLBACK,CALLBACK_URLtaybetmendiya sîstemêcallback.url
Metadataya weşanger
- Kom
io.github.davidtimur; navnîşana weşanxaneyêdavudboi999@gmail[.]com; mifteya îmzekirinêE520C345EF94423D
Avakirinek ku guhertoya 1.0.8-ê dixebitîne, kontrolkirinek zêde heq dike. Ji ber ku ew guhertoya rêveberek baweriyê ya destûrdar wekî xwerû ya li seranserê JVM-ê saz dike, her girêdana TLS-ê ya ku paşê di heman JVM-ê de hatî çêkirin - çareserkirina girêdayîbûnê, barkirina artifaktê, gavek bicihkirinê - bêyî pejirandina sertîfîkayê berdewam kir. Divê trafîka ji wê pencereyê neyê pejirandin.
Çima berhemên berhevkirî hewceyê skankirina cûda ne
JavacDoor ceribandinek kêrhatî ye ji ber ku ew du texmînên hevpar di carekê de têk dibe, û tu têkçûn ne taybetî bi amûrên firoşkarek yek ve girêdayî ye.
Pêşbîniya yekem ew e ku koda xeternak xwe di manîfestoyekê de radigihîne. Gelek amûrên zincîra dabînkirinê li dora çerxa jiyanê têne organîzekirin hooks, ji ber ku ji bo npm û PyPI çalakî bi gelemperî li wir e. JavacDoor çengelek tune. Tetikandina wê pelek qeydkirina xizmetê ye ku navê wê navrûyek Java ye û naveroka wê jî navek polê ye. Ji bo ku hûn wê bi awayekî statîk bigirin, divê hûn derman bikin META-INF/services/javax.annotation.processing.Processor wekî xalek têketina darvekirinê bi serê xwe, li ser heman astê piştî sazkirinê skrîpt — û dûv re çîna bi navkirî bişopînin nav bytecode. Ekosîstem xwedî mekanîzmayên xwe yên kifşkirina otomatîkî yên bi vî rengî ne, û her yek xalek têketinê ye gelo tooling wê wekî yek bihejmêre an na.
Fermana duyem ew e ku rêzik di pelên çavkaniyê de ne. Ji bo jarekê, xalên dawî, fermanên shell, şablonên JSON, û nîşankerên têketinê hemî di hewzên sabît ên .sinif pelan. Amûrên ku nivîsê greps dikin tiştekî nabînin - ne ji ber ku rêzik tarî ne, lê ji ber ku ew di konteynirek duqatî ya birêkûpêk de ne ku skanek nivîsê analîz nake. Her nîşaneya torê di vê postê de ji analîzkirina hewza domdar derket. Yek ji wan bi tevahî-avakirî ye https:// URL di hundirê pelê polê de bi awayekî vekirî ye; skaneke nivîsê ya naveroka xwendinbar a jar hîn jî wê dernaxe holê. Li vir kodkirin tune ku were têkbirin, tenê formateke konteynerê heye ku were xwendin.
Herdu valahî jî xwedî heman şiklê ne: formata berhemeke nesnayî wekî kîsikek pelan hate destgirtin, ne wekî avahiyek bi semantîkên diyarkirî. Rastkirin ne balkêş e - konteynerê analîz bikin, xalên têketina oto-vedîtina ekosîstemê bi xwe rêz bikin, û wan di koda berhevkirî de bişopînin. Bi taybetî ji bo vektorên dema avakirinê, kontrolek sêyemîn erzan û bi awayekî ecêb teşhîs e: tiştê ku berhemeke nesnayî bi xerîdaran re dike bi tiştê ku ew xwe ji wê azad dike bidin ber hev. Berhemeke nesnayî ku pêvajoyeke dema berhevkirinê tomar dike û di heman demê de pêvajoya dema berhevkirinê ji bo avakirina xwe neçalak dike, di du rêzên POM-a nivîsa sade de ji we re tiştek li ser xwe gotiye.
Ji bo tîmên ku îro berhemên Maven dixwin, sê tedbîrên pratîkî li jêr têne şopandin:
- Riya pêvajoya anotasyonê wekî sînorê darvekirinê bihesibîne. Girêdayîyên ku li wir dadikevin kodê di avahiya we de dimeşînin. Li cihê ku avahiyek hewceyê pêvajoya şîroveyan nîne, -proc:tune ji bo parastinê bi qasî ku li vir li herêmê xuya bû kêrhatî ye; li cihê ku wusa dike, koma pêvajoykerê bi eşkereyî pin bike li şûna ku wê ji rêya çîna kompîlasyonê mîras bigire.
- Pêvajoyên bineberhevkarê tomarê. Gaveke kompîlasyonê ku qalikekê çêdike di piraniya projeyan de anormal e û bi awayekî sivik hişyarker e.
- Metadata wekî şahidî bihesibîne. "Lab", "test", "payload", û "PoC" di nav an danasîna pakêtê de ne sînorên çarçoveyê ne. Gihîştin û tevger sînordar in.
Berhem û tevahiya koma wê ji holê hatin rakirin. Maven Navenda piştî rapora me; hem rêya berhemê û hem jî rêya komê niha 404 vedigerînin, û endeksa Navendî ti koordînatên hevber nîşan nade. Ev yek vê berhemê digire. Ew vektorê nagire, ku taybetmendiyek belgekirî ya berhevkarê Java ye û ji bo her kesê ku jarek diweşîne peyda dibe.
Çavkanî
Ev nivîs çavkaniyên derveyî nayne ziman. Hemû dîtin analîzên statîk ên destê yekem ên neh kûpên weşandî ne, ku berî rakirinê ji Maven Central hatine wergirtin. Di tu demê de tu kodek ji berhemên dîrokî nehatiye bicîhanîn.







