记一次AWD
有幸bjx师傅又让我参加了一次awd,算是第二次体验awd,又感觉学习到了很多东西。
第一次打这种模式的时候,我几乎什么都没有做,就给师傅们下载文件,上传文件了。(太菜了)
昨晚分的组,发现没有人是pwn方向的,那么就只能我一个人来负责pwn了。昨晚和今早简单的学习了一下patch,突然感觉patch比写exp脚本要简单一些。
今天的比赛也没有写exp拿分,一直在补自己程序的漏洞。
先说一说pwn1吧
pwn1
这里有一个这样的知识点,就是在c语言中生成随机数,其实是一个伪随机数,在调用rand之前需要先用srand,而srand是初始化随机数发生器。
srand() 用来设置 rand() 产生随机数时的随机数种子。参数 seed 必须是个整数,如果每次 seed 都设相同值,rand() 所产生的随机数值每次就会一样。
这就意味着,现在我可以直接用脚本跑出每次v3的值。
脚本:
1 #include<stdio.h>
2 int main()
3 {
4 srand(0);//产生随机数种子
5 int i;
6 for(i=0;i<5;i++)
7 {
8 int rand_num=(rand()%5);
9 printf("%d\n",rand_num);
10 }
11 return 0;
12 }
  
这样我就知道switch先进入的是3了,那么我们看看3这个函数干了些什么。
  
大概就是先让你往buf输入东西,然后进入sub13B0函数,s1是返回值,再判断s1和"aXdhbmFmbGFn"是否相等,如果相等就输出flag,这个时候我们就修补read函数的参数,将fd修改成0,这个漏洞就算是patch掉了!
  
修改之后
第一个over,接下来是进入1,看看1干了些什么。

这里其实就带一点盲猜了,v3大于0x63就执行下面的命令,我就想,不能那么容易被绕过,这里就把0x63修改成了0x99,就让过更难一些,当时具体也没分析出来了,就这样过去了。
接下来是进入2,2是一个堆题目,我扫了一眼是没发现毛病。。。
接下来就是0,这里的read是可以进行溢出的,虽然题目开启了canary保护,但是相信师傅们前面就可以leak出来canary,这里想着, 那就多打一次补丁,让buf只能输入两位数吧。


接下来看到system函数,相必这里也是一个getshell的第一点,但是我觉得patch的差不多了,也就没有再管。到这里就是我对pwn1的全部补丁。接下来看一下pwn2
pwn2
堆才刚开始学,也不会。。。

是常见的菜单题,我在delete函数中发现了这个,很明显的一个uaf漏洞,按道理,uaf漏洞修补需要将指针清0,但是这个patch我是真不会打。网上教程也不多,只知道大概思路是将这样的将call free ----> call .eh_frame地址,然后在.eh_frame的地址上写指针清零的汇编,然后写个ret再调回去。这样就不会覆盖其他数据了。
但是。。。我在.eh_frame上写汇编一直不成功,可能是.eh_frame段没有执行权限的原因,我也不会用ida给.eh_frame段赋执行的权限。。。就卡死了。。。
记:参加了这次awd确实又学习到不少操作,中间大概有一个半小时,我pwn1没法替换源文件,一直不知道怎么回事,后来重启了一次还不行,重启了第二次才又可以替换了。大概打到后面,pwn1几乎没有失多少分。感觉做的很不错了。pwn2实在不会修复,不过师傅们写脚本写的也慢,最后30分钟的时候,我们的pwn2才被打。也就是最后30分钟pwn2一直被打,pwn1一直安全。唉,还是自己太菜了,一个exp都没有写出来!继续加油了!

记一次AWD的更多相关文章
- Spark踩坑记——Spark Streaming+Kafka
		
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
 - Spark踩坑记——数据库(Hbase+Mysql)
		
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
 - 这些年一直记不住的 Java I/O
		
参考资料 该文中的内容来源于 Oracle 的官方文档.Oracle 在 Java 方面的文档是非常完善的.对 Java 8 感兴趣的朋友,可以从这个总入口 Java SE 8 Documentati ...
 - 千回百折:百度Java研发offer斩获记和经验分享
		
起因 面试过程 等待offer的过程中悟道 Java面试常考知识点个人总结 过程 百度——作为国内互联网的巨头之一,最近的一些风波对其褒贬不一,但是类似事件不是第一次发生,也绝对不是最后一次,对于真的 ...
 - 记一次nginx部署yii2项目时502 bad gateway错误的排查
		
周六闲来无事,就试着安装和部署下yii2,安装过程没什么问题,但部署到nginx上时遇到了502 bad gatewary问题,折腾了半天才搞定.这个问题是我以前在部署yii2时没有遇到过的,因此记在 ...
 - 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏
		
本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...
 - ArcGIS中的标注和注记
		
在ArcMap中可以使用标注和注记来识别要素,选择标注或注记取决于你需要如何控制文本显示以及在ArcMap中如何存储文本. 1.标注只是临时显示相关数据或字段 2.标注用于长时间保存数据以及显示方式. ...
 - 记处理线上记录垃圾日志 The view 'Error' or its master was not found
		
最近监控线上日志,网站是ASP.NET MVC 开发的,发现不少错误日志都记录同样的内容: The view 'Error' or its master was not found or no vie ...
 - 算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。
		
只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/588 ...
 
随机推荐
- [cf1340D]Nastya and Time Machine
			
记$deg_{i}$为$i$的度数,简单分类讨论可得答案下限为$\max_{i=1}^{n}deg_{i}$ 另一方面,此下限是可以取到的,构造方法较多,这里给一个巧妙一些的做法-- 对其以dfs(儿 ...
 - [loj2473]秘密袭击
			
容易发现答案即$\sum_{S}\sum_{u=1}^{W}[u\le val(S)]=\sum_{u=1}^{W}\sum_{S}[u\le val(S)]$,那么可以枚举权值$u$,并将点权$va ...
 - [luogu5423]Valleys
			
先考虑不要求有洞,那么可以将所有权值排序,然后不断插入,那么一个连通块就是一个答案,加上连通块大小即可考虑并查集如何判断是否有洞,可以发现对于任意一个无洞的直角多边形,都有$90度内角-90度外角=4 ...
 - 手把手教你实现Android真机远程截屏
			
先看效果演示 接下来手把手教你实现这样的效果. minicap简介 minicap是一个可以远程获取android屏幕画面的开源库,它在低版本的Android系统上采用截屏的方式获取画面,在Andro ...
 - 入门JavaScript正则表达式
			
概念 regular expression,描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 正则表达式的创建 ...
 - Java设计模式之(八)——适配器模式
			
1.什么是适配器模式? Convert the interface of a class into another interface clients expect.Adapter lets clas ...
 - @Value设置默认值
			
使用@Value注解将变量进行自动注入的时候,经常会出现的一个问题就是我们可能会由于在配置参数中忘记设置该参数造成整个项目报错,其实我们可以通过给被@Value注解作用的变量进行注入的时候如果没有找到 ...
 - Collections集合工具类的常用方法
			
Collections集合工具类的方法 addAll与shuffle import java.util.ArrayList; import java.util.Collections; /* - ja ...
 - Run For Beer CF575G
			
Run for beer CF 575G 如果直接bfs分层贪心可以做,但是很毒瘤,具体可以参考Gavinzheng的提交 考虑魔改dijkstra 首先,每次拿权值最小的来松弛肯定没有问题,只是怎么 ...
 - R语言与医学统计图形-【29】地图的绘制
			
R绘制地图原理: R使用一个个多边形(polygon)来表示每个区域,通过顺次连接GIS数据提供的每个区域多边形的坐标来逐点绘制这些多边形,所以理论上只要得到GIS数据就可绘制相应的地图. 地图绘制说 ...
 
			
		