我正在尝试连接一个SQL查询字符串和一个应该大写的十六进制字符串。 hURL -X -s
接受一个字符串或文件并将其转换为十六进制。
cmd = "/root/Desktop/pentest/tools/hURL/hURL -X -s " +
md5_got.chomp.delete("\n").to_s
md5_tohex = `#{cmd}`
md5_where = md5_tohex.chomp.delete("\n").to_s
此时,md5_where
是:
1b5b316d34303339613365663766633739653461646236306234336163313038643634381b5b306d
我需要这个十六进制大写。我在所有排列中都执行了这两项操作,包括遗漏to_s
和!
:
md5_where.upcase!
md5_where.to_s!
我尝试将查询和十六进制值组合在一起:
sql_comp = "SELECT word FROM captcha_rbow WHERE hex(md5) = " + md5_where
puts sql_comp
puts '###
abort()
这就是我得到的:
1B5B316D653...B306D
前导空格等于SQL查询的长度和屏幕上打印的upstring变量,没有SQL查询的痕迹
如果我选择md5_where
,我会得到这个,这应该是:
SELECT word FROM captcha_rbow WHERE hex(md5) =
为什么这会破坏文字? 这是完整的脚本 要求'开放式' 要求'sqlite3'
open('GOT_captcha.png', 'wb') do |file|
file << open('http://192.168.56.101/captcha/example5/captcha.png').read
end
cmd = "/root/Desktop/pentest/tools/hURL/hURL -m -s -f GOT_captcha.png"
md5orig = `#{cmd}`
cmd = "/root/Desktop/pentest/tools/hURL/hURL -X -s " + md5orig.chomp.delete("\n").to_s
puts cmd
md5_tohex = `#{cmd}`
md5_where = md5_tohex.to_s
puts md5_where
sql_comp = "SELECT word FROM captcha_rbow WHERE (hex(md5)) = " + md5_where.upcase
puts sql_comp
#THIS IS WHERE THE PROBLEM IS
begin
db = SQLite3::Database.open( "akad_web2" )
sql_comp = "SELECT word FROM captcha_rbow WHERE hex(md5) = '" + md5_where.upcase + "';"
puts sql_comp
stm = db.prepare sql_comp
rs = stm.execute
row = rs.next
puts row.to_s
rescue SQLite3::Exception => e
puts "Exception occurred"
puts e
ensure
stm.close if stm
db.close if db
end
abort()
注意 - 输入是一个图像文件(通过RMagick生成的验证码,带有一组已知的可能字符串),以生成MD5彩虹表。
这是输出:
/root/Desktop/pentest/tools/hURL/hURL -X -s 4039a3ef7fc79e4adb60b43ac108d648
1b5b316d34303339613365663766633739653461646236306234336163313038643634381b5b306d
1B5B316D34303339613365663766633739653461646236306234336163313038643634381B5B306D
1B5B316D34303339613365663766633739653461646236306234336163313038643634381B5B306D';
root@kali:~/Desktop/Akademy_webpentest_2#
答案 0 :(得分:1)
问题在于:默认情况下hURL
使用ANSI转义序列为输出着色。
示例:
> hURL -X -s "test" | hexdump -C
00000000 1b 5b 31 6d 37 34 36 35 37 33 37 34 1b 5b 30 6d |.[1m74657374.[0m|
因此,您在md5_tohex
变量中返回Ruby脚本的是ANSI转义字符串。
这就是为什么从那一点开始,一切似乎都表现得很奇怪。
使用hURL
选项运行--nocolor
以禁用此行为:
> hURL -X -s --nocolor "test" | hexdump -C
00000000 37 34 36 35 37 33 37 34 |74657374|
问题的进一步证据:
irb> s = `hURL -X -s "xyz"`
=> "\e[1m78797a\e[0m"
irb> s.upcase
=> "\e[1M78797A\e[0M"
irb> puts s.upcase
# <- exactly nothing is printed
=> nil
使用--nocolor
一切都已解决:
irb> s = `hURL -X -s --nocolor "xyz"`
=> "78797a"
irb> puts s.upcase
78797A
=> nil