python gif图 ctf_从两道CTF实例看python格式化字符串漏洞

本文探讨了Python中的格式化字符串漏洞,通过两个CTF实例展示了如何利用此漏洞获取敏感信息,如在SWPUCTF中利用错误的格式化字符串方法读取系统文件,以及在百越杯中如何通过格式化字符串漏洞伪造session访问特权接口。总结了如何在审计源码时发现此类漏洞,并提醒在编写代码时注意安全。
摘要由CSDN通过智能技术生成

什么是python格式化字符串漏洞

pyhton中,存在几种格式化字符串的方式,然而当我们使用的方式不正确的时候,即格式化的字符串能够被我们控制时,就会导致一些严重的问题,比如获取敏感信息

python常见的格式化字符串

百分号形式进行格式化字符串

>>> name = 'Hu3sky'

>>> 'My name is %s' %name

'My name is Hu3sky'

使用标准库中的模板字符串

string.Template()

>>> from string import Template

>>> name = 'Hu3sky'

>>> s = Template('My name is $name')

>>> s.substitute(name=name)

'My name is Hu3sky'

使用format进行格式化字符串

format的使用就很灵活了,比如以下

最普通的用法就是直接格式化字符串

>>> 'My name is {}'.format('Hu3sky')

'My name is Hu3sky'

指定位置

>>> 'Hello {0} {1}'.format('World','Hacker')

'Hello World Hacker'

>>> 'Hello {1} {0}'.format('World','Hacker')

'Hello Hacker World'

设置参数

>>> 'Hello {name} {age}'.format(name='Hacker',age='17')

'Hello Hacker 17'

百分比格式

>>> 'We have {:.2%}'.format(0.25)

'We have 25.00%'

获取数组的键值

>>> '{arr[2]}'.format(arr=[1,2,3,4,5])

'3'

用法还有很多,就不一一列举了

这里看一种错误的用法

先是正常打印

>>> config = {'SECRET_KEY': 'f0ma7_t3st'}

>>> class User(object):

... def __init__(self, name):

... self.name = name

>>> 'Hello {name}'.format(name=user.name)

Hello hu3sky

恶意利用

>>> 'Hello {name}'.format(name=user.__class__.__init__.__globals__)

"Hello {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'config': {'SECRET_KEY': 'f0ma7_t3st'}, 'User': , '

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值