python关于打ctf一些常用的模块(1) - CDUSEC内部博客

python关于打ctf一些常用的模块(1)

分类栏目: 编程知识

49℃

jsonf 发布于 发表评论

一(关于url请求)、

        首先安装requests库,因为用的比较方便,大部分都不需要记,基本用的是requests.get(url).content(或者requests.get(url).text)前者是bytes类型(可以用来爬取下载图片、音频和视频)后面的是以文本展示出来,python3可能有时会报错,那是因为编码问题,如果报错就用requests.get(url).content

        先讲requests.get(url),这个就平时的get请求类型参数就直接在url后面加,这也是和post的不同。

        requests.post(url,data=data),要用post提交数据时是用的python3的字典类型传递参数,例如:

data={"username":"admin","password":"admin"}这样就可以提交参数。

        现在讲他们两个方式的相同的地方,如果我们想修改请求头,不管是哪个请求方式都可以用,例如:我们想在请求头伪造cookie,headers={"cookie":"admin"},requests.post(url,headers=headers)并且可以添加其他的请求头,根据现场提供的东西来变化,如图:

4.png

看了代码直接构造payload发送后:

5.png

6.png


这样就得到flag了。


还有就是防止302重定向加入requests.get(url,allow_redirects=False)就可以了,还有就是设置超时,这个可以用来sql的时间盲注,requests.get(url,timeout=10)设置的时间是10秒,如果超过10秒就不要,这样会抛出异常所以我们可以加入try和except连用

ma = 126
ml = 32
m = (ma + ml) // 2
while ma >= ml:
    url = self.url + ' and if((select ascii(substr((select schema_name from information_schema.schemata limit {0},1),{1},1)))>{2},sleep(10),1 )'.format(
                            x, n, m)
    try:
        if requests.get(url, timeout=3):
        ma = m - 1
        m = (ma + ml) // 2
    except:
        ml = m + 1
        m = (ma + ml) // 2


还有就是在盲注里面python可以用 "flag" in text:来判断返回值是否有关键词。

二(关于16进制转图片之类的)、

        这里讲binascii库,用binascii.a2b_hex(内容)这个是可以把字符转为字节流,可以用它来把一串16进制数字转为图片:

7.png8.png

这样就可以拿到flag。

三(关于内容提取)、

        讲re库,反正学了re.match(),re.search(),re.findall()三个后发现用re.findall()就够了,re.findall()要传3个参数,第一个正则表达式,第二个提取的文本内容,第三个是提取的re的限制re.I(是不区分大小写),re.S(是提取所以包括换行回车),像第一个里面的提取flag:

9.png

看到他返回的是一个数组,所以还有一点注意,我们要把数组转换成字符串可以用"".join(数组)

        

  友情赞助
微信二维码
支付宝二维码
  选择分享方式

版权:若无特殊注明,本文皆为jsonf原创,转载请保留文章出处。

链接:python关于打ctf一些常用的模块(1) - http://cdusec.happyhacking.top/?post=72