python脚本编写

request库中带有get,post等方法,可以发送http请求,脚本编写中经常调用这个库

如:x = requests.get(url,params)

这样调用请求后,同时也会返回一个response对象,其中包含响应信息

1
2
3
print(response.status_code)  # 获取响应状态码
print(response.headers) # 获取响应头
print(response.content) # 获取响应内容

调用的一般形式为

1
2
3
requests.get(url,params,args)

requests.post(url,data={...},json={...},args)

其中data内的内容使用键值对传递

这就是request库的常见使用方式,我们还经常使用re库,用以正则匹配

使用方法

1
2
re.match(pattern, string, flags=0)
re.match(pattern, string, flags=0)

pattern:匹配的正则表达式

string:要匹配的字符串

flags:标志位

ctf中有利用python脚本进行速算,多次请求爆破等题目

bugku-速度要快

首先发包,在header中发现flag,拿去两次base64解密

1
102272

尝试post后发现不行,因为这个值一直在变化

我们可以在header中截取flag,利用python脚本发包以保证速度

1
2
3
4
5
6
7
8
import requests
import base64
r = requests.Session()
headers = r.get("http://114.67.175.224:14500/").headers
str = repr((base64.b64decode(headers['flag'])))
str = base64.b64decode(str[str.find(":") + 2:])
flag = r.post("http://114.67.175.224:14500/",data = {'margin':str})
print(flag.text)

使用session保持会话,flag第一次解码后是由“:”分成两段,取第二段,并解码,发送margin

flag{640832d6b0941215ef364b5ed76acbe1}

bugku-秋名山车神

image-20240716173823795

进入后发现是速算,+,-,*

给出的计算式如432664942-586204598-1449092086+1320886302+2019484813+458168165-596763586-24579723+1744057660+174270215*2089368842=?;

我们在编写脚本时要使用正则表达式,(\d+[+-*])+(\d+) 这里中括号的-实际上是转义的,即为反斜杠-

先匹配一个 数字与符号(+-*)的组合,再匹配最后一个数字

1
2
3
4
5
6
7
8
import requests
import re

s = requests.Session()
page = s.get('http://114.67.175.224:19487/')
expression = re.search(r'(\d+[+\-*])+(\d+)',page.text).group()
result = eval(expression)
print(s.post('http://114.67.175.224:19487/',data={'value':result}).text)

保持会话,从页面获取内容并正则匹配,group表示为返回字符串,这个字符串是一个数学表达式,我们通过eval函数执行后,将会进行计算

flag{96fd1901b425291f1f3e338a0745cad5}

xss(跨站脚本攻击)入门

xss一般是由于前端过滤不完全,攻击者构造的攻击脚本如js脚本未经处理而执行成功,这种漏洞一般分为以下三种类型

存储型:这种类型的XSS攻击会将恶意脚本存储在目标服务器上,当其他用户访问包含恶意脚本的页面时,这些脚本会在用户的浏览器中执行。

反射型:这种类型的XSS攻击是通过将恶意脚本嵌入到URL中,并诱使用户点击该URL。

基于DOM的xss:攻击者通过修改网页中的DOM节点或属性来注入恶意代码,而不依赖于服务器的响应。

实例:xsslabs-level2

这里有个框专门进行xss,我们先使用”>闭合前一个标签,再使用//注释掉尾部的引号,并插入js语句

即在输入框内输入”>//

可以在查看器里看到前一个标签成功闭合,Js被成功插入并执行

xsslabs-level3

输入上一题的内容,发现标签被转为实体

利用html的事件触发alert来过关,本题为单引号闭合

‘ onblur=’alert(1)’

传入后鼠标从输入框离开即可触发alert