第一个CTF题! 题目链接:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php 思路:应该算是一个经验题吧,没做过的很难获取flag。 一般思路是按F12看源码,关键源码如下:
<div style="position:relative;margin:0 auto;width:300px;height:200px;padding-top:100px;font-size:20px;">
<form action="" method="post">
<table>
<tr>
请用管理员密码进行登录~~
</tr>
<tr>
<td>密码:</td><td><input type="text" name='password'></td>
</tr>
<tr>
<td><input type="submit" name='submit' style="margin-left:30px;"></td>
</tr>
</table>
</form>
</div>
<!-- $password=$_POST['password'];
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)>0){
echo 'flag is :'.$flag;
}
else{
echo '密码错误!';
} -->
可以直接看到php代码,能够看出只要sql语句能够查到东西就能获取到flag,所以可以用sql注入, 如果输入的是 ‘or’<某个真值> 就能达到目的了,关键在于md5($password,true),首先对输入的东西进行MD5加密, 所以得找到一个字符串,md5加密之后是想要的字符。 而地址栏中的“ffifdyop”md5加密之后是”276f722736c95d99e921722cf9ed621c”(十六进制显示),这个十六进制串可以在http://www.5ixuexiwang.com/str/from-hex.php 转成字符串 ‘or’6É]™é!r,ùíb ,前面有’or’就够了,后面一串垃圾值就代表一个真值。 另: md5(string,raw) string 必需。规定要计算的字符串。 raw 可选。规定十六进制或二进制输出格式: TRUE - 原始 16 字符二进制格式 FALSE - 默认。32 字符十六进制数
欢迎与我分享你的看法。 转载请注明出处:http://taowusheng.cn/