zoukankan      html  css  js  c++  java
  • 记一次渗透测试(3)

    网址:http://ctf5.shiyanbar.com/ppc/sd.php

    1.登陆该网页

    2.分析一下步骤:假设我们已经选定了一个整数,我们首先需要将这个整数进行md5编码,然后再求sha1值,将这个结果与页面中的sha1值进行比对。

    如果相同的话,那我们就提交这个整数,用到post命令。

    3.因为有时间限制,所以用脚本应该是最快的方法了。为了获取md5,sha1的方法,需要导入hashlib的包,为了获取网页内容,需要导入requests包。

    为了方便快捷的获取页面中的sha1值,导入beautifulsoup包。

    4.在写代码之前,看一下网页的html。了解一下我们该获取什么标签,以及post的时候以什么关键字来传递参数。

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Blast and fast</title>
    </head>
    <body>
    <form name="form1" method="post" action="">
    <table  border="0">
     
      <tr>
        <td>给你一个sha1值,它是0-100000之间的整数的md5值再求取sha1值,请在2秒内提交该整数值</td>
      </tr>
      <tr>
        <td align="center">请在2秒内提交该整数:<input type="text" name="inputNumber" size="5" >&nbsp;&nbsp;
        <input name="submit" type="submit" id="submit" value="提交" /></td>
      </tr>
    </table>
    <div name='sha1' style="color:red">96e828d718bbce384ee31e4a53cb10cddc5adc9c</div>
    </form>
    Wrong parameter!</body>
    </html>

    因为这个网页需要我们输入一个整数,也就是'inputNumber'的value,然后点击“提交",才算是完成这一整步骤操作。

    所以post的时候应该构造'inputNumber':一个整数,‘submit':'提交' 这样的形式。

    注意(我也是后来才学到这点):这里的’提交‘应该变为它的url编码形式,这样才能正确post,不能用中文。post的编码为:%E6%8F%90%E4%BA%A4

    代码如下:(注释复杂,老鸟见谅)

    from bs4 import BeautifulSoup
    #pthon3.x版本导入bs包需要这么写才可以正确导入,如果是2.x版本的直接import就可以
    import requests
    #导入request包
    import hashlib
    #导入hash包可以编码解码
    
    
    def get_Flag(content,url,status):
        for i in range(0,100001):#实现对1到100000的遍历
            hashmd5 = hashlib.md5(str(i).encode()).hexdigest() #对整数i进行MD5编码
            hashsha1 = hashlib.sha1(hashmd5.encode()).hexdigest() #对MD5的结果进行sha1
            if hashsha1 == content:
                i = int(i)#将i转换为整形
                post_Content = {'inputNumber': i, 'submit': '%E6%8F%90%E4%BA%A4'}
                #post格式是我们找到的整数和模拟点击提交按钮
                #submit后面的是提交中文的url编码 查看源代码可以看到格式
                result = status.post(url,data=post_Content)
                #这里要用到我们获取的session来进行post
                print (result.text)
                #打印成功后网页的返回页面html内容
                break
    
    url = 'http://ctf5.shiyanbar.com/ppc/sd.php'
    status = requests.session()
    #获取session
    html = status.get(url).text
    soup = BeautifulSoup(html,"html.parser")
    #soup的最常见用法之一,直接获取当前页面的html内容
    get_Flag(soup.div.string,url,status)

    这里讲解一下soup的很好用的一个用法,我们获取到soup之后,可以用 soup. 的命令来直接获取标签。

    如果说想直接获取标签中的字符 比如:<div name='sha1' style="color:red">96e828d718bbce384ee31e4a53cb10cddc5adc9c</div>

    就可以写成 soup.div.string 这样它返回的就是标签里面的 96e828d718bbce384ee31e4a53cb10cddc5adc9c 

    获取什么标签就可以写什么,比如soup.head soup.title 都可以 。

    这道题还是比较简单,因为只有一个div标签,所以用soup方式十分方便。

    至于为什么要用session进行post等操作,需要了解一下session的机制。

    这篇文章写的非常好:https://blog.csdn.net/u014649204/article/details/24119029

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    运行后获得flag

    关于beautifulsoup这个强大的库可以看中文文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

  • 相关阅读:
    【拆点费用流】【HDU1853】【 Cyclic Tour】
    【最小费用最大流】【HDU1533】【Going Home】
    【最大流,二分图匹配】【hdu2063】【过山车】
    【最小费用最大流模板】【Uva10806+Spring Team PK】Dijkstra, Dijkstra,
    【最大流之sap】【HDU1532】模板题
    HDU 6130 Kolakoski 思维个屁 水题
    Codeforces 837 D Round Subset DP 思维
    Educational Codeforces Round 26
    Codeforces Round 427 B The name on the board 水题
    Codeforces Round 428 B Game of the rows 贪心 思维
  • 原文地址:https://www.cnblogs.com/lixiaoyao123/p/9676473.html
Copyright © 2011-2022 走看看