C语言正则表达式文件合法路径匹配

使用正则匹配是判断文件路径是否合法的有效手段,很多语言已经内置了正则匹配的函数,c语言也不例外,在regex.h中已经定义了很多正则匹配函数,关于这些函数的用法,catgatp已经在blog中做了详细说明[1]。 下面关于正则语法的讨论都是围绕Windows英文系统。一般的文件路径大致是这样c:\xxx\xxx\xxx,所以待匹配的路径必须符合上面的基本的基本格式。文件夹/文件的路径也必须下面两个条件: 文件夹/文件的名字首字母不能是空格 名字不能带有\/:*?”<>| 根据上面这两个条件,正则表达式可以写写成这样: 关于正则的语法可以参考菜鸟教程[2],理解并不困难。但是在编程时需要考虑转义的问题,正则匹配代码如下: [1] 深入浅出C/C++中的正则表达式库. https://www.cnblogs.com/catgatp/p/8052556.html[2] 正则表达式 – 语法. https://www.runoob.com/regexp/regexp-syntax.html

Continue Reading →

Linux Pwn利用漏洞获取libc

1、 PlaidCTF 2013 ropasaurusrex 该题没有通过system、int 80 syscall,也没有提供libc库,同时开启了nx保护。但是该题提供了read函数和write函数,且read函数有栈溢出,write函数可以打印任意地址,因此可以利用DynELF来解决。 2、 LCTF2016-pwn100 之前该题已经做过一遍了,但是当时提供了libc库,现在则借助DynELF来获取system在内存的地址。和1题不同之处在于这次的leak函数倚靠的puts函数打印内存地址,由于puts函数遇到\x00则就停止,所以在处理上要采用别的技巧

Continue Reading →

Posted in: pwn

Linux pwn栈帧调整技巧

1、 Alictf 2016-vss 该题还是用rop来执行sys_execv。然而在调试过程中发现需要调整栈帧,所以需要找一个能调整栈帧的gadget, 2、pwnable.kr-login 程序里面有一个memcpy的栈溢出,但是只能覆盖到ebp,还提供了一个可供利用的位于0x0811eb40的全局变量input,考虑利用两次leave;retn来劫持栈并最终劫持eip。 在auth函数退出时,劫持ebp到input所在的.bss段,即0x0811eb40; 在main函数退出时,由于leave指令的作用esp会指向0x811eb44,然后retn指令会跳转到内存地址为0x811eb44处执行call system 3、Ice ctf 2016 so_close 程序很简洁,read函数向长度为268个字节的缓冲区buf中读入272个字节,还有4字节溢出,和上题一样考虑利用两次leave来劫持栈。但是和上题不同的地方是,这次无法将栈劫持到一个精确的位置,只能通过将末位字节修改为0(地址变小了)对地址进行微调,尽可能把栈劫持到buf所在的位置,然后利用其他技巧跳转到shellcode。 问题在于有时候无法将栈劫持到适当的地方,因此该shellcode不能保证一次性成功,只能多试几次。

Continue Reading →

Posted in: pwn

记2019年信工所六室预推免面试

2019年信工所夏令营于7月14日开营,非夏令营成员面试定于7月18日。因为信工所每年招收学生较多,所以信工所各室会在那些没有被选上参加夏令营的同学中再选一批参加各室自己的面试。比如今年夏令营只收了150人,我没选上,但是在接下来的一周陆续收到了信安国重、二室和六室的电话以及某位老师的邮件,都是问我18号有没有意愿去面试的。我最终选择报六室。 某室的老师曾解释过这批非夏令营学生是怎么筛选出来的,夏令营名单公布后,那些没被选上夏令营的同学的简历会被发到各个室的各个老师,如果老师对你的简历感兴趣就会为你的简历投一票,最终得票多的同学有机会参加18号的面试。这些非夏令营的同学除了中午管一顿饭,其余费用自理,时间是一天。上午安排体检,如果提前一天去的话晚上住在体检医院附近的宾馆是最好的。 在面试的前几天,六室会把面试需要准备的材料通过邮件或短信发给各同学,(很多人报名的邮箱填的是谷歌邮箱,但谷歌邮箱会默认把信工所的邮件视为垃圾邮件,导致很多人错过了邮件通知)。 18号上午体检完信工所安排班车接我们去六室所在的益园园区,位于北京五环,位置有点偏,园区内部和IT公司的陈设很相像。到了园区后各室会有一位老师领着学生到各自的办公地点参加考核,考核包括心理测试、笔试、机试和面试。 心理测试就和学校每学期组织的心理调查问卷一样,提前准备好2B铅笔。 笔试是一张卷子45分钟,题目倒是有点新颖,和平时考的专业课完全不一样,更像是知识竞赛的题。比如给你一个数让你拆成几个连续的数的和,有多少种拆法?智能手机九宫格锁屏有多少种密码手势?最后还有一题给你函数让你写逆函数,总之和算法、逆向、编译原理等有一点关系,。虽然可以使用手机,但是在45分钟内确实做不了多少题(何况这种烧脑的题网上也不好搜),出题的学长直接就明说了这张卷子你们应该做不到30分。最后也是连蒙带猜地做出来几题。做完已经是1点多了,热心的学长学姐直接把午饭送到了笔试的机房。 面试下午2:00左右开始,很多人都是先做机试然后参加面试,或者机试做了一半去参加面试。我不想因为面试影响机试思路,所以决定先参加面试再回来做机试。面试分三轮:英语面、技术面、综合面,分别安排在三个办公室,没有固定的顺序。 技术面:负责技术面试的是两位学长,开始是自我介绍,2-3分钟左右,然后学长会针对你的项目经历提问题。我在简历中写了做过工控安全网关和网络攻击工具集,学长问我这个网关的流量速度如何?对原工控设备是否有影响?什么是Land攻击(因为我项目经历里面写了land攻击)等等,可能学长对我的项目不太了解,问的问题不具有很强的技术性。但是两位学长人很友好,也没有问我专业课的问题,最后听说我做过内核学长还帮他的实验室打了一波广告。 英语面:负责英语面试的是一位女老师,开始是英文自我介绍,也是2-3分钟,然后老师会根据你本科的经历用英语提一些问题,比如,学CTF多久了?有没有自己的CTF团队?团队有多少人?团队成员来自哪些学院等等,一般人都能应付。 综合面:综合面试应该是最重要的一个环节了,被安排在一个大会议室里。正中央坐着六室的主任刘宝旭老师,两边各坐着两位老师,应该也是硕导博导级别的人物。开场是5分钟自我介绍(需提前准备PPT),然后是各个老师提问,老师问我做的网络攻击工具集有没有利用别的工具?攻击过程是怎样的?攻击效果怎么样?然后还有一些别的技术细节问题,因为项目都是自己做的所以回答起来并不困难。最后刘老师还问了我家庭的情况、每周是否运动、每次运动多长时间、有什么兴趣爱好、本科期间是否担任过什么职务等。以上问题都没有涉及专业课,整个面试流程还算流畅。 做机试的时候已经3点了,今年的机试和往年不一样。往年是CTF/编程二选一,今年编程是必做,1个小时3道题,CTF是选做,只有pwn、web、reverse(因为赶火车没来得及做……)。编程题3道:两道基础题一道附加题。基础题1是在一个二维数组保存的矩阵中找一个数,找到返回true,没找到返回false,这个矩阵的数从左到右依次增大,从上到下依次增大;基础题2是计算一个数转成二进制后包含多少个1;附加题是给一个数组,把数组的数拼接在一起,求怎么拼接得到的数最小, 例如输入数组{3,32,321},则拼接起来的最小数为321323 。前面的基础题就不用说了,附加题就是一道简单的ACM题。机试只能用C\C++\java,不能用python。因为在使用vs的时候遇到了一点小问题(没想到卡了20分钟),时间紧急也没来得及细想就转用java(况且eclipse带了自动补全)。 experience:1、信工所看重本科项目经历,面试也都是基于项目经历来问,所以本科期间在实验室做开发还是有一些帮助。但是在实验室尽量要负责一些有技术含量的模块,很多模块虽然代码量大但是没有什么难度,对于日后推免没有什么实际益处;2、如果有编程题机试,一定要提前做题练习。虽然此次机试题不难,但是如果长期不做题,在真正机试的时候还是会有些不适应,毕竟换了个环境而且有时间限制,对做题人来说有一定的心理压力。

Continue Reading →

记2019年东南大学网络空间安全学院夏令营

东大网络空间安全学院前几年由信息学院、计算机学院等多个学院抽调老师组建而成,2018年开始以网安院名义招收研究生,今年2019年是东大网安院第一次举办夏令营,总共收到了七百多份申请,审核通过四百多份,最终入营的有三百多人。这三百人来自主要是由南京周边的学校,如南京邮电大学(28人)、河海大学(25人)、安徽大学(30人),然后还有一部分是周边如合工大、湖南大学、南昌大学等,令我意外的是西安电子科技竟然来了30多人,不得不佩服西电在计算机领域的名气~。 7月9日上午报到,下午是学院介绍和参观企业(烽火科技)。通过下午的介绍我才知道,东大一方面承担着国家给的网络空间安全模范学院建设任务,一方面自己也有着雄厚的资金,有足够的校舍、足够的实验室和足够的老师。所以东大网安院招生规模庞大,18年招收了250名左右研究生,150名左右本科生。 7月10日上午,听东大网安院的导师讲座,5位老师中一位(网安院长)是做网络安全的(如网络攻击主动防御、网络测量、恶意流量检测等,比较符合计科、信安的学生)、两位是做深度学习的、还有两位是做物联网/无线通信的。网安院老师的配置还不错,既有能做项目的导师,又有能发论文的导师。 10日下午面试,也许是面试学生太多,每个人只有5分钟左右的时间(如果老师对你感兴趣也许会多问你一些问题,时间会长一点),我的面试顺序安排在中间,等了近3个小时才轮到我(心疼后面那一半同学,据说有的组到后面就直接让学生自我介绍完就出来)。面试流程很简单,老师会看你的申请表,上面有排名、竞赛成绩和项目经历,根据这些老师就有了对你的基本评价,如果对你的基本评价不好,他就会问几个和技术没啥关系的问题,比如我面试的时候,我自我介绍完老师说我排名有点低,然后问我有没有竞赛荣誉,接着就问我你们这个产品现在是不是已经投产了、你们专业人数、你的项目个人贡献云云,总之没有什么技术上的问题。最后几乎所有的学生都被问了同样的问题:你是否报名了其他学校的夏令营?如果让你在东大和xxx大学之间选择你会选哪所?等等,似乎这个问题也对面试最终分数有一点影响。我还准备了英文自我介绍部分,可惜老师没问,老师没有问我任何和英语有关的问题。别的组有的老师问了,如果你在申请书里面写了你考过雅思/托福,老师可能会让你用英文介绍你的项目经历,如果你的英语水平一般,老师也许会让你用英文讲一下你的电话号码。 总结一下:1、东大比较看重排名和竞赛,可能是因为第一年举办夏令营的缘故,感觉面试比较鸡肋(毕竟时间少);2、如果有科研项目的话,一定要把自己参与成分较多的项目写在前面,有些项目虽然很高大上,但你只负责了一小模块,几乎没啥作用;3、东大确实很大,环境很好,资源很多,食堂很好吃。 2019.7.19更7月17号公布优秀营员名单,在名单公布之前,申请直博的同学需要联系好导师。东大还给我打了电话问我能不能确定有保研资格,估计没有保研资格的话应该就不会给优营了吧。此次优营名单有150人,占到总人数的一半,还是挺多的。

Continue Reading →

Linux环境下动态库和静态库的编译调用

实验环境 操作系统:Ubuntu 16.04 gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 源程序:hello.c、hello.h、star.c、starfun.h。starfun.h里面有star1函数和star2函数,我们不关心函数的功能,只要记得有star1和star2两个基本函数供其他函数调用。 hello.h自己定义了一个hello函数,并调用star1函数 hello.c内实现了showhello函数 主函数在star.c 下面把hello.c分别编译成动态库和静态库供star.c调用 动态库编译和调用 静态库的编译和调用 运行结果同上

Continue Reading →

rop技术

1、RedHat 2017 pwn1 程序功能是scanf一个字符串再打印出来 checksec pwn1,发现程序开了nx保护,于是采用rop IDA ctrl+s找到.got.plt表,表格中有的system和scanf可以利用 另外还得找一段可读可写的地址空间写入”/bin/sh”,CTRL+s查看 最终在0x0804A030找到一块0x10字节的空间可以用来存放’/bin/sh’,下面开始pwn这个程序 首先利用scanf函数的栈溢出劫持eip让其在ret时再执行一次scanf函数,并指定第二个scanf函数的两个参数 根据上面的栈的分布,即可得到第一段shellcode包含的内容,最后一个scanf函数的地址则是上面找到的0x0804a030,于是第一段exp如下: 第一次scanf时,输入以上代码,程序会再执行一次scanf,此时输入’/bin/sh’ 如此,数据区多了’/bin/sh’,并且程序会跳到main继续执行,当执行到scanf的时候,我们需要把程序劫持到system函数处,并让’/bin/sh’做system的参数 注:两端shellcode中用于填充多余空间的’A’的字符个数不一样,因为程序中有一行and esp, 0FFFFFFF0h,在执行第一次执行main函数时,该行指令总会让esp和ebp之间增加0x8字节,第二次执行main函数时没有增加。 2、 bugs bunny…

Continue Reading →

Posted in: pwn

shellcode入门练习

reference:https://bbs.ichunqiu.com/thread-42285-1-1.html 以下习题来自i春秋的学习资源 1、tyro_shellcode1 运行程序,输出一个mmp内存地址,然后等待用户输入。看源码知道是用read函数接受用户输入并把输入的东西作为函数执行 于是输入shellcode到v4然后让程序执行即可获取shell然后再拿到flag,由于代码中read的长度是0x20个字节,所以shellcode长度不能超过32。 shellcode=’\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80′ 2、b_64_b_tuff 阅读代码,知道程序会对用户输入进行base64编码,然后再执行,也就是我们输入的必须是shellcode解码后的内容,但是能被base64解码的只能是0-9,a-z,A-Z,+/=,因此需要对shellcode进行编码使其可被base64解码 python -c ‘import sys; sys.stdout.write(“\x31\xc9\xf7\xe1\xb0\x0b\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xcd\x80”)’ | msfvenom -p – -e x86/alpha_mixed -a…

Continue Reading →

Posted in: pwn

栈溢出入门练习

pwn学习资源 环境配置:https://bbs.ichunqiu.com/thread-42239-1-1.html 栈溢出基础:https://bbs.ichunqiu.com/thread-42241-1-1.html 以上由i春秋提供,适合新手学习,栈溢出基础这一章后面留了三个习题,做题记录如下。 1、warmup ida查看代码,逻辑很简单,输出一个地址,然后gets获取输入 int __fastcall main(__int64 a1, char **a2, char **a3) { char s; // [sp+0h] [bp-80h]@1…

Continue Reading →

Posted in: pwn

kali rolling安装docker

检测系统版本: 需要安装一些软件包,使apt能够通过https操作repository $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common 安装docker官方的gpg密钥 $ curl -fsSL…

Continue Reading →