中山外贸网站建设报价,合肥市城乡建设网站,做外贸网站需要注意些什么,建站高端网站目录
环境搭建
无锁无事务的竞争攻击复现
无锁有事务的竞争攻击复现
悲观锁进行防御
乐观锁进行防御 环境搭建
首先我们安装源码包#xff1a;GitHub - phith0n/race-condition-playground: Playground for Race Condition attack
然后将源码包上传到Ubuntu
为了方便使…目录
环境搭建
无锁无事务的竞争攻击复现
无锁有事务的竞争攻击复现
悲观锁进行防御
乐观锁进行防御 环境搭建
首先我们安装源码包GitHub - phith0n/race-condition-playground: Playground for Race Condition attack
然后将源码包上传到Ubuntu
为了方便使用我们可以对文件进行重命名
解压
unzip race-condition-playground-main.zip
备份env文件
rootutuntu000:~/race-condition# cp .env.default .env.default.bak
rootutuntu000:~/race-condition# mv .env.default .env
修改env文件内容
原DEBUGtrue //因为这里不对
修改后DEBUGTrue
安装需要的库
pip3 install -r requirements.txt
注可以使用豆瓣源来下载速度更快
生成数据表migrate
python3 manage.py migrate 使用python生成前端代码
python3 manage.py collectstatic
使用python创建用户
python3 manage.py createsuperuser 运行
gunicorn -w 2 -k gevent -b 0.0.0.0:8080 race_condition_playground.wsgi
[2023-11-13 16:44:25 0800] [9072] [INFO] Starting gunicorn 21.2.0
[2023-11-13 16:44:25 0800] [9072] [INFO] Listening at: http://0.0.0.0:8080 (9072)
[2023-11-13 16:44:25 0800] [9072] [INFO] Using worker: gevent
[2023-11-13 16:44:25 0800] [9075] [INFO] Booting worker with pid: 9075
[2023-11-13 16:44:25 0800] [9076] [INFO] Booting worker with pid: 9076
注如果没有gunicorn工具可以使用pip3 linstall 来安装
然后我们就可以尝试访问这个后台 然后我们就可以尝试访问一下admin
我们输入账号密码成功的登录到了后台页面
我们现在就可以给用户增加一些钱
然后我们在URL中访问
http://192.168.159.219:8080/ucenter/1/ 我们尝试在amount中输入100 这里可以看到我们提交的金额大于所拥有的金额会直接报错
无锁无事务的竞争攻击复现 我们首先进入到/root/race-condition/templates
将form表单的提交方式修改为form-data流的形式 输入金额
先使用Burpsuite进行抓包浏览器开启代理
点击提交后
赋值内容然后DROP这个包
关闭代理再去查看一下金额发现金额并没有改变
然后打开Yakit软件
点击本地的这个项目-打开项目或看到这样一个页面
然后就来到了这里然后将前面抓到的数据粘贴进这里
POST /ucenter/1/ HTTP/1.1
Host: 192.168.159.219:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,*/*;q0.8
Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.159.219:8000/ucenter/1/
Content-Type: multipart/form-data; boundary---------------------------366213157039382255462597162624
Content-Length: 366
Origin: http://192.168.159.219:8000
Connection: close
Cookie: __tins__21208037%7B%22sid%22%3A%201699867069692%2C%20%22vd%22%3A%2011%2C%20%22expires%22%3A%201699870531399%7D; __51cke__; __51laig__11; csrftokenPqAPXKFwTwIlbNyqhrelYxqbWgKPtsKjXdlcwxe3TqCfxT44ecNu3QLFhZWnRiaQ; sessionid3kx07mweulpr4559s5gyfte6d2whwfna
Upgrade-Insecure-Requests: 1
-----------------------------366213157039382255462597162624
Content-Disposition: form-data; nameamount
10
-----------------------------366213157039382255462597162624
Content-Disposition: form-data; namecsrfmiddlewaretoken
2s3TnpbX4HE23G8XhBfoAaoyTXKUklEmafOgWcKu4ByWpMEBemOxFtJ2eGWsIb4T
-----------------------------366213157039382255462597162624-- 可以将一些没有用的东西删除掉删除完成后
POST /ucenter/1/ HTTP/1.1
Host: 192.168.159.219:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0
Content-Type: multipart/form-data; boundary---------------------------366213157039382255462597162624
Cookie: __tins__21208037%7B%22sid%22%3A%201699867069692%2C%20%22vd%22%3A%2011%2C%20%22expires%22%3A%201699870531399%7D; __51cke__; __51laig__11; csrftokenPqAPXKFwTwIlbNyqhrelYxqbWgKPtsKjXdlcwxe3TqCfxT44ecNu3QLFhZWnRiaQ; sessionid3kx07mweulpr4559s5gyfte6d2whwfna
Upgrade-Insecure-Requests: 1
-----------------------------366213157039382255462597162624
Content-Disposition: form-data; nameamount
10
-----------------------------366213157039382255462597162624
Content-Disposition: form-data; namecsrfmiddlewaretoken
2s3TnpbX4HE23G8XhBfoAaoyTXKUklEmafOgWcKu4ByWpMEBemOxFtJ2eGWsIb4T
-----------------------------366213157039382255462597162624--
然后进行并发配置然后发送
但是这里并没有测试成功我们删除这条日志
然后再为yps用户增加10块钱用于测试
然后我们可以再次测试
我们可以将重复发包数修改为1000再次尝试但是还是没有成功重复以上操作直到成功
可以看到这里转发了两次我们再看看日志
这里很明显购买了两次我们只有10块钱却购买了两次10块钱的东西这里成功的利用竞争漏洞实现了攻击
无锁有事务的竞争攻击复现
我们可以在源代码中增加事务注本代码中已经有了不需要手动添加
class WithdrawView2(BaseWithdrawView):success_url reverse_lazy(ucenter:withdraw2)transaction.atomicdef form_valid(self, form):amount form.cleaned_data[amount]self.request.user.money - amountself.request.user.save()models.WithdrawLog.objects.create(userself.request.user, amountamount)return redirect(self.get_success_url())
然后删除之前的日志然后为用户增加10元
重新抓包相同的方法放到Yakit软件中
然后还是一样反复的使用对线程并发的发送请求多试试几次
可以看到还是出现了多个302跳转说明事务无法阻止竞争型漏洞
从日志中也可以看到成功了
悲观锁进行防御
代码中的3页面就是使用了悲观锁进行防御
还是像上面一样来测试
这里就只展示多线程访问的结果
可以看到只有一个302跳转我们尝试多次也是这个结果说明成功的访问到了
查看日志也可以看到是正常的
但是这里还有一个问题就是悲观锁会把读和写都锁住性能会收到影响那么我们就可以使用乐观锁进行防御
乐观锁进行防御
代码中的4页面就是使用了乐观锁进行防御
代码中的3页面就是使用了悲观锁进行防御
还是像上面一样来测试
这里就只展示多线程访问的结果
这里的结果与悲观锁的结果是差不多的只有一个302跳转我们尝试多次也是这个结果
乐观锁就是我们结果这个Race Condition漏洞的防御方案了
但是我们还是要知道的是乐观锁并没有悲观锁安全但是乐观锁的性能比悲观锁好