1、申 请 I D:windcarp
2、个人邮箱:1367118196@qq.com
3、原创技术文章:
本人学生党一枚,业余爱好信息安全,希望加入论坛~~求各位大大们轻拍,对学生要求不要太高~~贴出写的一个内部赛writeup,新人可以看过来学习思路,求指教~
Misc 100 诱人的图片 这题是简单的图片信息隐藏题目,直接将题目flag填充到了图片文件尾部。解决方法可以使用stegsolve的FileFormat分析模块(文件格式分析,可以分析出图片异常数据块)或者直接扔到UE里面去看文件尾,都可以得到flag: 题目flag:TSCTF{S33ing _i5_b3li3ving...}
Misc 200诱人的wifi 这道题目考核的是WPA2握手包破解,可以使用EWSA、hashcat或者其他握手包破解工具破解wifi密码。 方法一:EWSA 将握手包导入EWSA,然后设置字典,并且为了加快速度,可以取消密码变异选项: 然后就是字典选择和时间问题了,考虑到本题密码是很弱的弱密钥,基本上字典都可以跑的出来,而且会比较靠前("最后密码"由于一秒上千个,并不是跑出来的wifi密码): 题目flag:11223344 方法二:hashcat 由于hashcat不支持直接处理.cap或者.pcap包,所以需要先转化成.hccap格式,附上官方转换URL:https://hashcat.net/cap2hccap/ 转换完成之后,可以通过字典文件来破解握手包密码,可以通过"—help"来查看攻击模式和命令(P.S.不同版本的hashcat命令行可能会稍有不同),我这里使用的命令是: hashcat-cli64 -m 2500 1.hccap all_psw_dir_160k.txt 【hashcat应用程序 –m 破解模式 待破解握手包路径 字典路径】 然后秒出了结果……明明显示的速度差不多的啊喂……好吧,只能说EWSA变异密码功能很强大,但是也占用了太多的破解时间…… 题目flag:11223344
Misc 300女神的秘密 这题是考察收集、筛选信息的能力,以及对基本社工知识的掌握。首先我们拿到的是女神的简历,里面有两个比较关键的信息: 1、QQ邮箱:@qq.com(可以获取QQ号,往往QQ号对于收集社工对象信息最为关键。) 2、Gmail邮箱:angelynnkoh@gmail.com(考虑到之前部分Gmail邮箱帐号密码泄露,可以作为社工对象常用密码或者曾用密码的入口点。) 首先通过QQ的搜索功能,搜索社工对象: 这里可能得到了一些关键的信息,出生地(身份证前六位)、生日(7-14位)、常用邮箱、QQ注册时间、常用QQ登录地点等。 然后我们访问她的QQ空间,通过说说、朋友留言、日志、相册等,进一步收集信息。在访问相册时,看到有个加密相册,需要输入社工对象的身份证号,所以明确目标为——收集身份证号。 此时,关注空间里面的另外一条说说: 这里泄漏了身份证中,最不容易得到的后四位1120,同时泄漏了首位为3,出生年份为1998。通过查询出生地,可以得到身份证前6位为:341202。 所以此时得到的身份证是: 3412021998****1120 再通过好友留言得到生日为11月11日: 这样就得到了完整的身份证号:341202199811111120。通过输入正确的身份证号,查看加密相册,可以得到下一条提示: 然后去服务器下载rar文件,输入Gmail密码200780(查不到的话可以爆破rar密码 = =),可以解压得到secret.jpg和flag.txt,查看flag.txt结尾可以得到flag: 题目flag:TSCTF{5oci4l_3ngin33ring_is_5ooooo_int3r3sting!}
Misc 400倒数第二名 这题是将flag信息隐藏在第二幅图片中,与第一张图片不相同的像素点G值部分的倒数第二比特,嵌入算法可以通过code.bmp(在网站本题目录下)的matlab代码得到: 对应的提取代码: import Image import random
img1 = Image.open("first.bmp") im1 = img1.load()
img2 = Image.open("second.bmp") im2 = img2.load()
a=0 i=0 s=''
for x in range(img1.size[0]): for y in range(img1.size[1]): if(im1[x,y]!=im2[x,y]): print im1[x,y],im2[x,y] #print im2[x,y][0]
if i==8: s=s+chr(a) a=0 i=0 if (im1[x,y][1] > im2[x,y][1]): a=0+a*2 else: a=1+a*2 i=i+1
if i==8: s=s+chr(a)
print s 运行结果: 题目flag:TSCTF{OOOOOOh!Y000u_found_m3!}
Reverse 100给你自信 这个题目是一个cmd的程序,通过输入与flag进行字符串比对,来判断输入是否正确。直接扔到IDA里面,可以看到flag的明文。由于是控制台程序,直接找到main函数入口处(使用TextView拖到最上面): 再向下找一找,就可以看到flag明文写死在程序里面: 题目flag:TSCTF{L3t_u5_l34rn_r3v3rs3_fr0m_n3m0}
Reverse 200 不速之客 这题是一个MFC的程序,关键在于定位按钮响应函数和在OD中寻找比较字符串的部分,可以在内存中找到flag。 可以使用XSPY定位,找到三个按钮的响应函数,在入口处下断点,可以得到"让我进去!"按钮的响应函数地址为0x00401500。 另一种方法利用OllyIce的字符串查找功能: 可以看到一大堆和判断输入是否正确相关的关键字符串,选择一个双击,也可以进入按钮响应函数: 随便找到一个地方下断点,或者找到函数入口处下断点,F9运行,停在断点处后,单步向下跟进。接下来的关键是,找到自己的输入存在哪个寄存器里面,以及会和哪个字符串比较判断(或者从比较的关键跳转处向上找也可以): 无论在那个位置下断点,只要在生成flag完成后,都可以在ESI中看到指向的flag。将这个flag输入登录框,可以验证通过。 题目flag:TSCTF{W3lc0m3_t0_Dubh3_G33k_Club}
Reverse 300 灰色忧伤 这题依旧是一个MFC的程序,其中有两个按钮被禁用(分别使用属性和按钮函数禁用)了,对应解密步骤一和解密步骤二。这个题目依旧可以有多种解题方法: 1、使用灰色按钮修复工具 可以去看雪下载,或者百度,任意一款都可以使得按钮有效。 【Window 按钮突破专家:http://tools.pediy.com/other.htm】 比如使用看雪上下载的EnableWindow,可以直接修复灰色按钮,依次点击可以得到解密后的flag.txt。 题目flag:TSCTF{Dis4bl3d_butt0n_i5_b0res0m3!} 2、手工修改函数跳转 使用xspy侦测到四个按钮的响应函数入口点的地址分别为:0x00401460、0x00401470、0x004015D0、0x00401710。接下来就是确定每个函数对应哪个按钮,可以在OD中下断点、IDA中查看或者查看按钮ID,都可以…… 这里使用一种方便的方法,将程序扔到OllyIce里面,然后按F9运行,等到窗口弹出来之后,点击W窗口,可以看到按钮控件的ID。 得到 0x00401460:03ec:退出; 0x00401470:03ea:解密1; 0x004015D0:03eb:解密2; 0x00401710:03e9:加密。 所以这里修改按钮跳转,让点击加密跳转到(解密1),让点击退出跳转到0x004015D0(解密2),在OD里面进行修改。 先改一个点一下试试: 好了,点加密就直接变成解密1了,我们如法炮制,在修改加密到解密2。 然后查看flag.txt: 题目flag:TSCTF{Dis4bl3d_butt0n_i5_b0res0m3!} 3、逆向加密算法 既然给出了加密算法,于是我们也可以试着看看如何逆向加密算法(可以直接逆加密函数,或者是逆两个解密函数,是不是听起来有点不大靠谱……)。 一般思路是,还是要通过字符串查找或者xspy定位到关键的按钮响应函数的位置,然后先尝试用IDA F5看IDA分析生成的C代码与OD动态运行结果一起分析加密解密过程。这里可能会比较麻烦,这里试试随便给出一个flag.txt,然后单步跟踪加密算法。 首先我们在加密函数入口处下断点: 通过明显的fopen函数的参数,可以猜测到入口处调用了两次fopen,分别打开flag.txt和打开用于2进制写入的文件flag.crypt,并且判断了flag.txt是否存在。所以我们新建一个flag.txt,在里面随便写点,我这里写的是"1234567890abcdef"。 然后继续向下单步走: 走过文件指针初始化模块后,下面我们需要关心的就是明文数据读到哪里了以及是如何处理的,所以我们眼睛盯着寄存器和堆栈,看看1234567890abcdef什么时候被读进来并处理。 继续单步,可以看到fscanf以及读入的文件数据: 接下来就是盯紧这块堆栈,看看什么时候取我们的明文并且处理,继续单步: 这里可以看到一个关键循环,每次分别取一个输入的字符到cl中,再取一个"1112"的字符到dl中,两者异或,再将结果写到存我们输入的内存中。 接下来碰到一个奇怪的循环,会读我们存处理后的明文,但是并不写入,用F4跳过这个循环,可以看到会把一个奇怪的字符串放到esi里面。如果仔细观察了处理之前的数据,可以发现这些是循环前的数据的ASCII码,第二位和第一位颠倒了之后的结果。 然后再接着向下单步,可以看到这些东西被%c写到flag.crypt里面。所以整个加密算法就是,字符串和"1112"循环异或,异或结果的16进制ASCII码两位颠倒后,再转成字符写到文件里面,所以编程逆向算法即可。 4、建立字典文件 考虑到明文都是可见字符,可以尝试使用明文加密建立字典,反查明文,可以作为一种逆flag的思路。但是这题因为加密分组是4,又限制了长度,所以需要分段生成字典,然后再进行反查。
Reverse 400 天枢凭证 这题加了花指令(可以参看源码),所以没办法直接用IDA去分析,先尝试去掉这些花指令。由于是控制台程序,首先要找到关键函数位置,这里借助IDA。使用TextView可以在IDA最上面看到一些敏感信息和IDA没有正确识别的代码: 在OllyIce里面寻找对应位置,即0x004011bc。 可以看到加了花指令,手动去除函数中的所有花指令,再丢到IDA里面F5,可以看到关键函数分析的C语言指令: 然后就可以逆算法了……其实是判断home.txt中读出来的数据,经过循环减数字1、1、1、2后是否和字符串SRBREzCsag2]F22i^B0sa^%]Sgtlj^B.c2|相等。最后得到结果为: TSCTF{Dubh3_G33k_C1ub_&_Thunk_C0d3} 题目flag:TSCTF{Dubh3_G33k_C1ub_&_Thunk_C0d3}
Crypto & PWN 100 古典的密码 题目中给出的密文:V1ZGV0l7VmRiX2tob29yX3dyX0ZkaHZkdV9mbHNraHUhfQ==。通过两个等号,可以判断出使用了base64编码,直接进行解码得到: WVFWI{Vdb_khoor_wr_Fdhvdu_flskhu!} 通过题目提示和标准flag(TSCTF{}),可以发现使用了凯撒密码加密,解密可以得到明文: 题目flag:TSCTF{Say_hello_to_Caesar_cipher!}
Crypto & PWN 200 "XSS"和"XML" 这道题目给出了一大堆的0和1比特串,需要编程实现将0和1比特串转换成字符,输出到文件中,这里给出C++参考代码(使用了bitset类用于方便转换): #include <iostream> #include <string> #include <bitset>
using namespace std;
int main() { FILE *file = fopen("2.txt", "r"); FILE *out = fopen("16.txt", "wb+");//注意这里要二进制写入,不然会bug
if (file==NULL || out==NULL) { cout << "error" << endl; return -1; }
char buf[9] = "";
int i = 0; buf[i++] = fgetc(file); while (!feof(file)) { if (i==8) { bitset<8> b(buf);
fprintf(out, "%c", b.to_ulong()); i=0; } buf[i++] = fgetc(file); }
fclose(file); fclose(out);
return 0; } 运行程序可以得到转换完成后的文件16.txt,打开发现依旧是乱码,于是扔到UE里面可以看到文件有jpg文件头: 所以果断重命名为.jpg,打开就可以看到flag: 题目flag:TSCTF{x55_4nd_xm1_ar3_a5_funny_a5_coding!}
Crypto & PWN 300 暴力男 这题是需要从100W条记录的字典中,找到3次md5之后,值和题目中给出的md5值相同的那个。使用hashcat工具可以很快解决这个题目,对应的命令行如下: hashcat-cli64 -m 3500 hash.txt dir.txt 【对应hashcat的可执行程序的名字 –m 攻击模式 哈希文件 字典文件】 然后可以在一秒钟得到答案: 题目flag:TSCTF{Do_y0u_lik3_h4shc4t?}
Crypto & PWN 400 printf
WebB 100 XSS1 考察基本的跨站方法,即想办法闭合标签、单引号、双引号等。 看网页源码可知,后台是将提交内容放入text框的value属性。 用单引号闭合value的属性值,用">"闭合input标签,然后插入自己的标签和xss代码,payload如下: a'><imgsrc=x onerror=alert(1)> 提交后查看源码: 可以看出原来的input标签已经被闭合,并添加了我们的img标签。
WebB 200 窃听风云 根据题目提示,需要寻找登录网站后台的密码。由于登录网站发送的是HTTP包,所以在wireshark里面进行过滤,然后寻找和后台相关的数据包,就可以看到flag: 题目flag:TSCTF{Why_w3_u5e_pl4int3xt_tr4n5m1t_m0de?}
WebB 300 XSS2 查看页面源码可知过滤了左右尖括号和alert字符串,导致我们不能像xss1一样闭合input标签后插入其它标签,所以可以考虑不闭合input标签,而是插入并覆盖input标签的属性。 如上图,此题把type="text"放在value属性后面,这样可以用双引号闭合value属性的值,然后添加input标签的属性type=image,虽然这时和后面的type="text"冲突,但浏览器会以前面的type=image为依据进行解析。payload如下: a" type=image onerror=eval(atob('YWxlcnQoMSk=')) src="x 由于后台将alert字符串过滤了,所以payload不能含有alert,用base64编码绕过即可。atob函数是将base64编码解码为字符串。
WebB 400 窃听风云2 根据题目提示,需要寻找从某edu站点下载下来的两个文件,首先使用http过滤,然后分析出目标网站的ip,再次进行过滤,最终过滤条件设置为: http && (ip.src==222.26.161.66 || ip.dst==222.26.161.66) 然后可以发现请求下载了flag.rar和password.docx,并且通过http协议进行了返回,所以在返回包中,导出这两个文件的内容: Word文件如法炮制,然后用docx中的密码,解压flag.rar,可以得到flag.jpg这张图片。而最终的flag隐藏在图片的EXIF位置处(可以使用stegsolve、UE或者EXIF查看工具看到): 题目flag:TSCTF{1_n33d_le@rn_m0r3_4b0ut_u5ing_wir3sh4rk}
WebA 100 美味的饼干 通过浏览器访问该页面后,再次访问该页面并截取数据包或其他方式查看本地cookie Flag属性后面值有"=="很明显是base64编码解码后得到flag: TSCTF{Teacher_Gong_is_Behind_You!}
WebA 200 神奇的sqlmap 本题主要是考察sqlmap注入工具的基本使用。 访问页面从参数id的变化可以判断出存在SQL盲注 使用sqlmap指定参数跑库跑表 sqlmap.py -u "http://localhost/tsctf/game/webA/2/index.php?id=1" –dbs sqlmap.py -u "http://localhost/tsctf/game/webA/2/index.php?id=1" –tables -D sql_tianshu sqlmap.py -u "http://localhost/tsctf/game/webA/2/index.php?id=1" --dump -T secret_isflag -D sql_tianshu 注:这是测试环境上的flag. WebA 300 蛋疼的PHP 本题主要是考察php://input的用法。 从页面源代码可知,后台程序用$_GET方法获取参数a,随即传给函数file_get_ontents(), 在firefox下利用hackbar工具访问web300.php,并传递参数a,值为php://input,然后在post框填上tianshu,提交后即可得到flag。 WebA 400 诱人的webshell 首先访问题目 下划线为提示robots.txt访问发现"后台" 访问之 这个地方存在SQL注入漏洞 登陆框处的注入多为万能密码之类 尝试中,网页提示"你懂不懂高级一点的注入"并放出tips和阿里ctf相关,因此可以查到是一种变形的万能密码利用mysql "or"和"||"尝试绕过 在用户名处输入a' || 1=1# 即可绕过登陆成功 然后点击链接,进入上传页面 这里提示需要上传可执行脚本文件,之前可以通过抓包分析服务器是apache 脚本支持php,所以上传可执行脚本文件主要是利用apache的解析漏洞,只要本地命名一个文件1.Php.x就能上传成功获得最后的flag
|