从这次开始,只要是*CTF一类的比赛,大致都可以认为是含金量比较高的,难度大的比赛.以后的实战也会记录下来,也供以后的人参考. 里面有个比较大的GIF,加载慢请稍安勿躁. (如果不能放大图就只能右键新窗口看看了,以后有空会优化一下主题,apologize….
0x01. 萌萌哒报名系统(web)
题目描述: 天依花了一整天的时间用IDE开发了一个报名系统,现在她睡着了,难道你们不想做点什么嘛XD? (比赛完就失效的地址 )
a. 题目界面&获得login.js
直接通过源文件可以看到验证方式,当然js验证是可以很容易禁用绕过或者bs绕过的.不过这里发现了一个奇怪的东西.先放这(哪有什么鬼QQ号码?难道是tip?
1 2 3 4 5 6 7 8 9 10 11 12 13 var sqq = /^[1-9]{1}[0-9]{4,9}$/ ; if (!sqq.test ($('#qq' ).val ()) || $('#qq' ).val ().length < 5 || $('#qq' ).val ().length > 12 ) { $('#qq' ).focus ().css ({ border : "1px solid red" , boxShadow : "0 0 2px red" }); $('#userCue' ).html ("<font color='red'><b>×QQ号码格式不正确</b></font>" );return false ; } else { $('#qq' ).css ({ border : "1px solid #D7D7D7" , boxShadow : "none" }); }
根据题目描述,出现IDE,要能快速联想到IDE中有著名的文件信息泄露可能. 那么常见的就是.idea这种大名鼎鼎的编辑器了.
通过访问ip/.idea发现存在经典workspace.xml,直接点开发现会跳转? 丢bs里面跑就不会了..
唔…当然上面两个我也看了一下,没什么信息,然后在workspace.xml发现关键信息,下载得到关键页面的源文件.
1 <entry file ="file://$PROJECT_DIR$/xdcms2333.zip" />
register.php,login.php,member.php 这样才开始走上正轨做题…..当然这是手工方法,我们当然也应该使用av直接遍历扫描一下.看看有没有其他的明显问题. (记得提前crack….free edition 不可取) .附三个页面的核心代码
login.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <?php session_start (); include ('config.php' ); try { $pdo = new PDO ('mysql:host=localhost;dbname=xdcms' , $user , $pass ); }catch (Exception $e ){ die ('mysql connected error' ); } $username = (isset ($_POST ['username' ]) === true && $_POST ['username' ] !== '' ) ? (string )$_POST ['username' ] : die ('Missing username' ); $password = (isset ($_POST ['password' ]) === true && $_POST ['password' ] !== '' ) ? (string )$_POST ['password' ] : die ('Missing password' ); if (strlen ($username ) > 32 || strlen ($password ) > 32 ) { die ('Invalid input' ); } $sth = $pdo ->prepare ('SELECT password FROM users WHERE username = :username' ); $sth ->execute ([':username' => $username ]); if ($sth ->fetch ()[0 ] !== $password ) { die ('wrong password' ); } $_SESSION ['username' ] = $username ; unset ($_SESSION ['is_logined' ]); unset ($_SESSION ['is_guest' ]); header ("Location: member.php" ); ?>
register.php (关键部分标注出来了.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <?php include ('config.php' ); try { $pdo = new PDO ('mysql:host=localhost;dbname=xdcms' , $user , $pass ); }catch (Exception $e ){ die ('mysql connected error' ); } $admin = "xdsec" ."###" .str_shuffle ('you_are_the_member_of_xdsec_here_is_your_flag' ); $username = (isset ($_POST ['username' ]) === true && $_POST ['username' ] !== '' ) ? (string )$_POST ['username' ] : die ('Missing username' ); $password = (isset ($_POST ['password' ]) === true && $_POST ['password' ] !== '' ) ? (string )$_POST ['password' ] : die ('Missing password' ); $code = (isset ($_POST ['code' ]) === true ) ? (string )$_POST ['code' ] : '' ; if (strlen ($username ) > 16 || strlen ($username ) > 16 ) { die ('Invalid input' ); } $sth = $pdo ->prepare ('SELECT username FROM users WHERE username = :username' ); $sth ->execute ([':username' => $username ]); if ($sth ->fetch () !== false ) { die ('username has been registered' ); } $sth = $pdo ->prepare ('INSERT INTO users (username, password) VALUES (:username, :password)' ); $sth ->execute ([':username' => $username , ':password' => $password ]); preg_match ('/^(xdsec)((?:###|\w)+)$/i' , $code , $matches ); if (count ($matches ) === 3 && $admin === $matches [0 ]) { $sth = $pdo ->prepare ('INSERT INTO identities (username, identity) VALUES (:username, :identity)' ); $sth ->execute ([':username' => $username , ':identity' => $matches [1 ]]); } else { $sth = $pdo ->prepare ('INSERT INTO identities (username, identity) VALUES (:username, "GUEST")' ); $sth ->execute ([':username' => $username ]); } echo '<script>alert("register success");location.href="./index.html"</script>' ;
member.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <?php error_reporting (0 ); session_start (); include ('config.php' ); if (isset ($_SESSION ['username' ]) === false ) { die ('please login first' ); } try { $pdo = new PDO ('mysql:host=localhost;dbname=xdcms' , $user , $pass ); }catch (Exception $e ){ die ('mysql connected error' ); } $sth = $pdo ->prepare ('SELECT identity FROM identities WHERE username = :username' ); $sth ->execute ([':username' => $_SESSION ['username' ]]); if ($sth ->fetch ()[0 ] === 'GUEST' ) { $_SESSION ['is_guest' ] = true ; } $_SESSION ['is_logined' ] = true ; if (isset ($_SESSION ['is_logined' ]) === false || isset ($_SESSION ['is_guest' ]) === true ) { }else { if (isset ($_GET ['file' ])===false ) echo "None" ; elseif (is_file ($_GET ['file' ])) echo "you cannot give me a file" ; else readfile ($_GET ['file' ]); } ?> <html> <body background="./images/1.jpg" > <object type="application/x-shockwave-flash" style="outline:none;" data="http://cdn.abowman.com/widgets/hamster/hamster.swf?" width="300" height="225" ><param name="movie" value="http://cdn.abowman.com/widgets/hamster/hamster.swf?" ></param><param name="AllowScriptAccess" value="always" ></param><param name="wmode" value="opaque" ></param></object > <p style="color:orange" >你好啊,但是你好像不是XDSEC的人,所以我就不给你flag啦~~</p> </body> </html>
Update: 这题要用线程竞争抢进去…绕过验证.其他办法貌似无效
0x02.Simple blog(web)
A simple blog .To discover the secret of it. 即将失效の题目地址
这题也有点恶意啦. 萌X写了个自己的blog,以为不会被黑,然后马上就被打脸了……通过简单scan跟测试发现了login.php,admin.php 爆破一下发现存在弱口令admin&admin….(醉了.
但是登陆提示You are not admin .bs重现发现cookie携带了一个万恶的token值. 稍微难一点的题就到处都是token了,不管是标签中hidden还是cookie,简单尝试了普通思路绕过,提前携带都不行.
因为这个是在302调转之前生效的,说明要么截取下来一起302,要么就只能绕过了.因为token基本没法去爆破的.
不过这里发现一个奇怪的地方, token多了两个%3d 转码也就是 == ,感觉可能也有问题.
这里发现登录之前就存在了,我们尝试携带着一起登录.发现都不匹配.原因是进去之后又重新生成了一次.这里没看到源码,很难受. 试着去看看是不是源码藏在哪了
这题就不细说了.开了单独的文章说,核心是两个 1.Padding Oracle(CBC翻转攻击) 2. 绕过php字符串escape函数校验.
Update: 关于 CBC翻转攻击,很多只能把CBC的过程说的差不多,.而且解密的时候还有疑问. 然后padding oracle其实说的很差,各种小错误跟图文不搭. 大家自己搜google就知道了,非常蛋疼. 至今没有看到一个完整的没有错误的讲padding oracle的文章. 很多就是用着道哥的脚本一改. 也不说为什么只能爆15位 . 上来就是这题一看就是xxx,脚本秒之. 感觉很不好… 好在官方提供了源码复现.这里再次对LCTF表示敬意 .
希望有认真看过实验过存有疑问的一起讨论一下padding oracle相关.
0x03.BeRealDriver(Reverse)
文件地址
驾照考试越来越严了,好不容易找到一个包过的。去驾校报道,教练给了我一个U盘,里面放了个文件,还放了IDA 7.0的安装包。哇,大城市的驾校果然有钱,连IDA都送。就是密码要自己搞。教练给了个神秘网址.
driver 非正式提示:请认真阅读题目名、题目描述和题目文件
Hint 1: https://en.wikipedia.org/wiki/Lane_departure_warning_system
这题标明是rev,提示里面是一个web地址,可能是web提示,并且告诉了我们没有sql注入. 但是给了两个文件上传.根据合理猜测. 给的两个文件上传的栏,跟一个填token的值,肯定是有什么问题的. 简单扫描没有什么东西.
0x04.L PLAYGROUND(web)
L PLAYGROUND
hack me if you can //11.19 00:24 少了个s开头的文件,已经添加上了
//11.19 10:31 ‘password’: ‘’,’prefix’: ‘’
http://111.231.2.63/
0x05.”他们”有什么秘密呢?
一个简单到不能再简单的……题目地址
Hint:
1.entrance.php
2.There is no need to scan and brute force!
3.Hacking for fun!
0x06.完美冻结
Easy难度下简简单单的送分题,拼手速哦。http://pwn-1255475365.cossh.myqcloud.com/easy.zip
nc 115.159.87.182 9999
0x07.签到题(web)
这是一个拼手速抢邀请码的题 http://211.159.161.162/test.php
hint: 本地
0x08. wanna hack him?(web)
管理员使用了看似完美的安全配置.. 但是…
题目链接