Quantcast
Channel: 记事本
Browsing latest articles
Browse All 122 View Live

过滤了分号

过滤了分号后,不能结束语句了,但可以通过二元运算符来。比如var a = 1 + alert(2)加号也可以换成减号、乘、除、并、或、异或

View Article


vortex11

这道题是在strawdog提示下做出来的。他也说其实可以不用去读phk代码,我连链接的文章都没看完……还是一步步来,打印变量的地址,发现第一次malloc(0x10)和malloc(0x800)之间相距0x1000+48。这0x1000用来放两个0x800,然后那48bytes应该就是一些信息了。打印那部分内存,并对应到struct pginfo,void...

View Article


金陵科技杯信息安全大赛

做了漏洞利用类的第一题,...

View Article

vortex12

这道题和vortex8几乎是一样的,只是题目说了栈不能执行,所以只能ROP了。我开始还想用mprotect来恢复执行权限,但要传的参数里有\x00,比如地址必须是page...

View Article

vortex13

这道题和vortex12一样是猥琐流……题目说了栈还是不能执行,所以还是ROP。但这里陷入了思维定式,主要还是因为vortex12的影响,让我觉得还要修改got。但ROP不只是修改got,直接改返回地址也是可以的;而vortex12里也可以在主线程里改返回地址,但那样没用因为主线程已经去掉euid了。这道题的输入限制在20个字符,如果想修改got几乎是不可能的了……具体地,想要直接修改返回地址为sy...

View Article


SimpleVM

这是tiger给的一个ELF文件,普通用户似乎无法执行?以root执行后要输入东西,然后有判断具体地,用readelf -a可以发现文件是比较畸形的。而且entry point还在mmap映射区域之外?但从网上搜的结果,映射时还是会映射page size的整数倍;而想这个文件区域13c7之后还有内容,也会被映射到内存。所以entry point处的内容为 hexdump -C -v -s 5084...

View Article

vortex14

这道题提供了一个文件,是hexdump了server和client的通信首先根据<和>的个数及前后字符,我们判断出通信的流程是:server->client, client->server,...

View Article

build edb on x86

我想在32位的环境下用edb,按理来说是支持的,但编译时发现他认为是在64位下面……可能还是和chroot有关。在网上搜了半天也没找到什么好的结果,最后用的是笨办法,把src/src.pro和plugins/plugins.pri里面头文件路径都用成x86,再编译就可以了

View Article


vortex15

这道题给了两个文件,一个是加密用的程序,另一个是加密后的文件。加密的方法很简单,就是读plaintext和8 bytes的密码,然后cipher[i]=key[i%8] ^...

View Article


save the world

http://www.wechall.net/challenge/Z/save_the_world/index.php这道题和ISG里的yaya用的是同样的思路,这里再复述一遍。据说这个方法的名字是Hastad,但我觉得思路其实很简单:用中国剩余定理找到c, 使得c%n1=c1, c%n2=c2, c%n3=c3 求c的立方根p#!/usr/bin/python2#gcd(a,b)...

View Article

安装metasploit

首先是ruby1.9,因为版本低,所以从aur里装的。为了方便起见,把PKGBUILD里面涉及到的后缀1.9全部去掉,方便。再给gemrc文件里加上 gem: --no-ri --no-rdocgemrc文件可以通过$ strace gem 2>&1 | grep gemrc找到在哪里。还需要bundle来管理gems$ gem install...

View Article

ELF segments and sections

有时候需要搞明白ELF文件里哪些部分是可写的,之前一直是稀里糊涂的,没有仔细去研究。今天稍微看了一下manpage,并动手试了下,大概明白了segments和sections之间的关系。以下内容是基于我自己的理解写的,所以有些部分可能并不准确。首先是两个概念,segments和sections,这两个是完全不同的。ELF文件除了ELF header,还有program header和section...

View Article

fd

1分的题……#include <stdio.h>#include <stdlib.h>#include <string.h>charbuf[32];intmain(intargc,char*argv[],char*envp[]){if(argc<2){printf("pass argv[1] a...

View Article


unexploitable

这次是500分的rop#include <stdio.h>voidmain(){printf("Not all the bugs are exploitable.\n");printf("Try to exploit this one and you will see.\n");printf("Or.. maybe you can prove otherwise :)\n");//...

View Article

bof

代码如下#include <stdio.h>#include <string.h>#include <stdlib.h>voidfunc(intkey){charoverflowme[32];printf("overflow me :...

View Article


collision

代码如下#include <stdio.h>#include...

View Article

flag

直接用IDA打开,居然连输出的字符串都找不到…于是通过strings发现文件是被UPX压缩了。下载UPX,用upx -d flag解压缩后,直接找到flag地址。或者再用strings

View Article


input

代码如下#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>intmain(intargc,char*argv[],char*envp[]){printf("Welcome to...

View Article

passcode

代码如下#include <stdio.h>#include <stdlib.h>voidlogin(){intpasscode1;intpasscode2;printf("enter passcode1 : ");scanf("%d",passcode1);fflush(stdin);// ha! mommy told me that 32bit is vulnerable...

View Article

random

代码如下#include <stdio.h>intmain(){unsignedintrandom;random=rand();// random value!unsignedintkey=0;scanf("%d",&key);if((key^random)==0xdeadbeef){printf("Good!\n");system("/bin/cat...

View Article

shellshock

好吧,从这名字就知道是怎么回事儿了,前端时间爆出来的shellshock漏洞。我们需要执行cat flag就行。不过我开始试cat会说找不到文件,于是用/bin/cat了$ env x='() { :;}; /bin/cat flag' ./shellshock

View Article


火车运煤问题

今天比赛有一道逻辑题,是这么说的(大意):小明要穿越荒野,距离目的地有600公里。他身上最多可以携带300单位的补给,而且每走1公里会消耗1单位的补给。假设他可以在中途任意设置补给点存放补给。那么要走600公里,出发点至少要有多少单位的补给?如果出发点有3300单位的补给,他最远能走多远?这类题目以前在网上看到过,不过当时是火车运煤。再次回顾整理了下,找到了思路。首先,小明肯定要多次折返,不断地把物...

View Article


Whitespace programming language

今天做题遇到了一道很奇怪的题目。他给了一个cpp文件单看代码,似乎只是把普通的c++代码添加里很多tab,空格,并没有什么奇怪的地方。用g++编译后,执行得到说FROG_This_is_wrong_:(。看来是另有玄机。后来搜里下,找到了一种奇葩的编程语言,whitespace。具体在这里有更详细的介绍。简单地说,它是只考虑空白字符,通过特定的组合对应特定的指令。然后找这个语言的编译器,发现里这里有...

View Article

第一次尝试APK的题目

今天遇到一道APK逆向的题目,难度应该是入门级别的。由于之前见到这类题目直接就放弃了,这样还是不太好,于是试着从头开始,查资料把这道题解决了。题目给的APK在这里。为了做这道题,我把apktool装好了,还翻墙把android...

View Article

第一次尝试forensic的题目

话说最近在做的ksnctf里面的题目种类还真是丰富啊,今天遇到一道forensic的题目,也是第一次做这类题。题目给了一个img文件。我最开始是直接用mount挂载,发现有3个jpg文件,但分析不出来这些图片有没有隐写。后来在网上搜了下,这道提不是stegano,而是forensic。按照推荐,我安装了autospy,它还需要Sleuth...

View Article


对加密的zip文件使用known plain text attack

这道题提示了说对zip文件使用known plain text attack,于是在网上搜了下,这里有一篇论文是关于这个的。具体论文就没有看了,直接找了现成的实现pkcrack。不过按照作者的要求,需要给他寄明信片,我没有寄诶……按照要求,破解还需要知道一部分plain...

View Article

webhacking.kr challenge 5

打开页面,查看代码发现只有login可用,点击后来到一个登陆页面。试着登陆了下,发现需要登陆admin;而似乎没有找到注入。紧接着,发现可以直接浏览目录,在该目录下有另一个文件join.php,点进去发现什么都没有。于是查看代码,发现有混淆的js。通过将其内容打印出来,发现需要cookie和URL里包含一定内容才会显示表格。我们直接按照表格内容提交,发现可以注册。于是试着注册admin,但提示说已经...

View Article

webhacking.kr challenge 6

通过阅读源代码,发现只是简单地将cookie做了些字符替换,再用base64解码了20次。于是我们只需要反过来走一遍即可。大部分代码甚至可以直接用他。<?php$val_id="admin";$val_pw="admin";for($i=0;$i<20;$i++){$val_id=base64_encode($val_id);$val_pw=base64_encode($val_pw);...

View Article

webhacking.kr challenge 8

接连的几道题都是代码审计的。这道题里,对User-Agent有两个取法,一种是getenv,另一种是$_SERVER,而对两个的不一致的过滤就造成了问题。具体地,getenv得到的里面不限制单引号、括号和注释符号#,而且会在后面的插入语句里出现。如果我们这里取User-Agent: agent','ip',...

View Article



webhacking.kr challenge 7

发现有页面的源代码,发现参数val处存在注入,而且在提示里也说了用union。所做的防御是过滤了一些字符,而且每次随机选一个查询语句,不同的语句需要闭合的括号数目不同。由于不允许使用空格和注释,我就用TAB来分词;由于最后需要的结果2也不允许出现,加号也不允许出现,我们用减法3-1=2。由于只有5种随机的情况,所以选定一种一直跑应该就有选中的可能。我选了最简单的只有1个括号的,http://webh...

View Article

webhacking.kr challenge 9

这道题花了好久啊才做出来……不愧是这么大分值的题目首先,直接点击后就是遇到了HTTP basic auth。由于realm是sql injection world,我开始还以为在这里就要有注入……试了各种知道的payload发现没有用,于是在这里卡住了然后是搜索时偶然发现这里提到了他的basic...

View Article

webhacking.kr challenge 10

这道题其实和web-09非常像。进入页面,发现有提示,知道了column和表的名字。然后试了下直接把参数no取为查询语句,发现还是很多过滤了,而且最后发现似乎返回值只见到了0和1,估计还是盲注。过滤的地方,主要是空格有问题,但如果把空格换为换行符%0a就可以了。然后还用昨天的思路,但一直跑不出来……最后搜了答案。相比我的,主要是这次flag有两个,用我昨天做web-09时的那种对应关系被固定了。而用...

View Article

webhacking.kr challenge 12

这道题给了源代码,发现过滤了union。于是只能从当前表考虑了。尝试了取no=1,得到guest,说明其对应的no是1。如果表里还存在id=admin的记录,那么那条记录的id要么比1小,要么比1大。于是分别尝试这两种,发现后一种是正确的http://webhacking.kr/challenge/web/web-12/index.php?no=9)+or+no>1--+

View Article


第一次做ARM逆向的题目

把ARM环境搭好后,就可以动态调试了。之前一道arm逆向的题目,由于没有环境一直只能静态分析,但对arm完全不熟,进行不下去。果然能动态调试就好了。题目给了一个.c文件和一个.asm文件。我首先编译.c文件,但发现得到的结果用了好多thumb的16 bits的代码,而这和给的.asm文件是不同的。搜索后发现需要指定-marm。于是$ gcc leg.c -g -marm -o...

View Article

用QEMU模拟ARM环境

之前遇到ARM逆向的入门题,但没有环境只能静态分析,非常慢;而且我觉得边调试边学应该会快一些,于是决定模拟一个ARM环境装linux系统。首先是QEMU,由于单位电脑系统是RHEL 6,没有qemu-system-arm,于是我不得不编译了一次。我下的是qemu-2.0.2,运行 $ ./configure --target-list="arm-softmmu arm-linux-user"...

View Article

ISG初赛library

子曰:温故而知新。最近一段时间没有练习pwn的题目,正好当时ISG初赛的library还一直没研究,于是练习了下。果然是稍微放一放就生疏了……比较明显的问题是在register里,有一个format string...

View Article


mysql比较字符串忽略结尾的空白

今天学习到一个知识点,在查询时如果比较字符串,会忽略结尾的连续空白,起始的空白不会忽略。于是:select * from users where user='admin ';会把user='admin'的记录也选出。这里有比较详细的例子,而且mysql的官方文档也说了:In particular, trailing spaces are significant, which is not true...

View Article


olympic ctf echof(PWN 300)

2015年第一帖。以往的CTF的题目质量还是很高的,所以打算稍微练一练这些题目。这道题目,存在一处format string...

View Article

ISG初赛BT

这道题目是去年ISG初赛的一道ARM逆向题,当时的知识储备还不足以解决。但其实稍微了解了下ARM汇编之后就可以做了,虽然说还不熟练,花了较久时间。我是开始想用IDA的反编译的,但不知怎么回事,对thumb代码的处理总有问题;继而无奈用hopper,然而hopper得到的伪代码还是比较简陋的,而且发现居然会把本应是*ptr+=1这样的反编译为*ptr=1,这个错误太大了……于是最后基本还是通过读汇编代...

View Article

Image may be NSFW.
Clik here to view.

wireshark, burpsuite与SSL

最近在工作中,有时需要用wireshark抓包分析。而有一些通信是被ssl加密了的。虽然说以前在其他队伍的writeup里有见到过如何把server的私钥提供给wireshark来解密,但我这几次试了下还是得不到需要的东西,所以稍微研究了一下。最后的结论是某些cipher是无法仅仅从抓到的包解密的。首先,来了解一些相关的密码学知识。RSA就不再赘述了,这里主要讲一下Diffie-Hellman(DH...

View Article

BCTF writeup

周末参加了今年的第一次CTF,BCTF。由于这次CTF是面向国际的,所以题目的质量都比较高,种类也比较单纯,以逆向、溢出为主。这次确实是一个非常难得的锻炼机会,让我们体验到了国际水平CTF的难度。我们队做出了5道题,我做出了zhongguancun和warmup。在这里记录下我思考的过程。zhongguancun是我在周日下午才做出来的。(差距啊……)我的习惯是,首先通读一遍IDA...

View Article


PHP protocol的坑

LFI(local file...

View Article

0CTF writeup

周末参加了今年的第二次CTF,0CTF。与BCTF类似,这次的溢出、逆向题目也是非常有水平的,令人大开眼界。下面是我的部分的writeup。flaggenerator这道题的溢出还是比较明显的。在leetify时,一个h字符会被变成1-1三个字符,从而长度变长,造成栈溢出。但这道题有stack...

View Article


0CTF rsa quine

这道题是一道密码学(其实是数学)的题目,因为对相关理论还是不够熟练,在比赛的时候没有能够做出来:( 这两天读了读别人的writeup,基本上明白解法了,在这里记录下具体的思路。题目的要求是求”quine number”,即:已知RSA公钥,求,使得。规则很清晰,但实际解决起来还是需要一定的数学知识。Ok. Now welcome to the world of...

View Article

通过DT_DEBUG来获得各个库的基址

最近,在学习BCTF和0CTF的writeup时,注意到了一种通过DT_DEBUG来获得库的基址的方式:BCTF里的pattern用这一方法来获得ld-linux.so的地址,0CTF里的sandbox用这一方法来获得sandbox.so的基址。之前面对ASLR,我只知道可以通过GOT来获取libc.so的地址,而其他库的地址还不清楚应该怎样取得。于是,我稍微研究了下,在此记录。首先,通过reade...

View Article


0CTF freenote

这道题目是关于heap overflow的。之前没有接触过这方面。通过阅读http://winesap.logdown.com/posts/258859-0ctf-2015-freenode-write-up,...

View Article

ISG决赛pepper

这道题目是去年参加ISG决赛时遇到的。二进制文件是有多个漏洞,我们当时是做的栈溢出,而堆溢出一直没有研究过。正好这两天在学习堆溢出,发现这道题和0CTF的freenote十分相似,不愧是同一批人出的题目。所以,在这里简要记录下,因为思路是完全一样的具体地,通过修改restaurant的功能,我们可以重新编辑restaurant的description。description是保存在堆上的,但在修改时...

View Article

0CTF 0ops app

这道题提供了一个sandbox.so,当时我连如何运行这道题都不知道……今天阅读了http://acez.re/ctf-writeup-0ctf-2015-quals-login0opsapp-breaking-out-of-a-pin-sandbox/和https://rzhou.org/~ricky/0ctf2015/0ops_app/test.py,终于搞明白这道题目了,在此记录。具体地,这道...

View Article

ROP之return to dl-resolve

我们都知道,ELF在执行时,许多函数的地址是lazy binding的,即在第一次调用时才会解析其地址并填充至.got.plt。对于具体这一解析过程是如何完成的,之前并不怎么了解,只知道是在.plt中完成。其实之前Tiger有告诉我有一个名为roputils的工具,利用的就是构造所需信息,直接解析得到system的地址进而ROP。但直到最近才去研究其代码,搞明白这一技术,即return to...

View Article


密码学相关的一些代数

CTF比赛中遇到许多密码学的题目,往往最后都转化为相关的代数问题。因此,在这里就经常会用到的一些概念进行归纳总结。原根(primitive root)什么是原根是模 的原根,如果所有与 互素的数,均与 g的某个幂模 同余。换句话说,对于所有与 互素的 ,存在 k使得 。原根存在性对于一般的 ,原根是不一定存在的。比如说,模8就不存在原根。但如果是模素数...

View Article

Browsing latest articles
Browse All 122 View Live